数据结构与算法(C语言版)
书 号:9787113136659
丛 书 名:高等学校计算机科学与技术专业核心课程系列规划教材
作 者:陈明
译 者:
开 本:16开
装 帧:平装
正文语种:
出 版 社:中国铁道出版社有限公司
定 价:32元
-
内容简介
本书较系统地介绍了各种典型的数据结构,主要包括:数据结构概述、线性表、栈和队列、串、数组、树、图、查找、排序、递归和文件,为了加强对算法的理解,也介绍了算法分析方面的内容。本书叙述选材精炼、概念清楚、注重实用、逻辑性强,各章中所涉及的数据结构与算法都给出了C语言描述,并都附有大量丰富的习题,便于学生理解与掌握。 -
前言
“数据结构”课程是从20世纪70年代开始设立的计算机科学与技术专业的一门专业基础课程,现已成为必修的、重要的核心基础课程。数据是用来说明人类活动的事实观念或事物的一些文字、数字或符号。常用的数据类型分为数值数据和非数值数据两大类:数值数据包括整数、定点数、浮点数等;非数值数据主要有逻辑数据、内码和交换码等。数据的级别由低向高依次为位、字节、字、数据项、数据字段、记录、文件、数据库等。
信息是指对某一特定的目的而言,具有意义的事实与知识,使源数据经系统处理成为决策或参考的依据。数据只是事实的记录,没有特定的目的,而信息则是针对某一问题来收集数据并进行处理,作为决策和参考的依据。通过数据处理可归纳出有价值的信息。常用的数据处理方式有编辑、排序、归并、分配、建档、更新、计算、查找、查询等。
计算机科学是算法和算法变换的科学。数据结构主要是研究数据元素之间的关联方式,通常分为逻辑结构和物理结构两大类,同一逻辑结构可以对应不同的物理结构。程序存储是冯•诺依曼机的重要特征之一,构建计算机系统、利用计算机解决问题都是通过程序来实现。算法是求解问题的计算步骤的描述,是程序的核心和灵魂。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。在程序设计中,要从数据结构和算法两个方面考虑,才能得到高效而准确的结果。
在非数值计算中,处理对象已从简单数值发展到具有结构的数据,这就需要讨论如何有效地组织计算机的存储,并在此基础上有效地实现对象间的运算,数据结构就是研究与解决这些问题的重要基础。“数据结构”课程是人们在程序设计方面的经验总结,学会基本的程序设计,只能解决程序设计中30%的问题,而学会数据结构,则能解决程序设计中80%的问题。
“数据结构”课程是计算机程序设计的重要理论技术基础。通过“数据结构”课程的学习,不仅可以掌握数据结构的基本内容、典型算法和使用方法,还能应用数据结构和算法进行具体应用问题的程序设计,进而提高程序设计能力。
本书介绍最常用的典型数据结构、各种数据结构的逻辑关系、在计算机中的存储表示,以及在数据结构中的运算等。数据的逻辑结构主要包括集合、线性表、树、图等4种基本结构,利用它们可以构成任何复杂的逻辑结构。数据的存储结构主要分为顺序、链接、索引和散列等基本结构,利用它们可以构成各种复杂的存储结构。对于同样的数据,采用不同的逻辑结构和存储结构,对某一运算采用的方法不同,将得到不同的算法,进而在计算机上得到不同的运行空间和存储空间效率。
全书在结构上呈积木式,适于选择性学习;选材注重实践应用,各种常用数据结构的介绍从实际出发,避免抽象的理论论述和复杂的公式推导,典型算法的介绍深入浅出、简洁明了。每章都设有小结和习题,通过这些习题的练习,不仅能加深学生对基本概念和定义的理解,而且通过上机练习,能够提高学生的编程能力和程序调试能力。
由于编者水平有限,书中不足之处在所难免,敬请广大读者批评指正。
2011年10月 -
目录
第1章 数据结构概论 1
1.1 问题的提出 2
1.2 基本概念与术语 3
1.3 数据结构的概念 5
1.4 数据的逻辑结构、存储结构及运算 7
1.4.1 数据的逻辑结构 7
1.4.2 数据的存储结构 8
1.4.3 数据的运算 9
1.4.4 逻辑结构、存储结构及运算的关系 10
1.5 算法与算法特性 10
1.5.1 算法及其特性 10
1.5.2 算法的描述方法 11
1.5.3 算法与程序及数据结构 11
1.6 算法性能分析及算法度量 12
1.6.1 算法性能分析 12
1.6.2 算法度量 12
小结 15
习题 15
拓展实验:电话号码的查询 16
第2章 线性表 17
2.1 线性表的定义与运算 18
2.1.1 线性表的定义 18
2.1.2 线性表的抽象数据类型 18
2.2 线性表的顺序存储 19
2.2.1 顺序存储 19
2.2.2 顺序表的运算 21
2.3 线性表的链式存储 24
2.3.1 线性链表及运算 24
2.3.2 静态链表及运算 31
2.3.3 循环链表及运算 32
2.3.4 双向链表及运算 34
2.4 线性表的应用 36
2.4.1 约瑟夫问题 37
2.4.2 一元多项式求和问题 38
2.4.3 集合应用问题 41
小结 43
习题 43
拓展实验:线性表的合并 44
第3章 栈与队列 46
3.1 栈 47
3.1.1 栈的定义 47
3.1.2 栈的顺序存储结构 48
3.1.3 栈的链式存储结构 50
3.2 栈的应用 52
3.2.1 子程序的调用和返回问题 52
3.2.2 数制转换问题 52
3.3 队列 53
3.3.1 队列的定义 53
3.3.2 队列的顺序存储结构 54
3.3.3 队列的链式存储结构 60
3.4 队列的应用 64
3.4.1 设备速度不匹配问题 64
3.4.2 舞伴问题 65
小结 66
习题 66
拓展实验:算术表达式求值 67
第4章 串 68
4.1 串的基本概念 69
4.2 串的存储结构 70
4.2.1 串的静态存储结构 70
4.2.2 串的动态存储结构 71
4.3 串的基本运算 73
4.3.1 串的抽象数据类型定义 73
4.3.2 串的基本运算实现 74
4.4 模式匹配 78
4.4.1 BF算法 78
4.4.2 KMP算法 80
4.5 串的应用 84
小结 85
习题 85
拓展实验:设计简单的文本编辑器 86
第5章 数组 87
5.1 数组及其基本操作 87
5.1.1 数组的概念 88
5.1.2 抽象数据类型数组的定义 89
5.2 数组的存储结构 90
5.3 数组在矩阵运算中的应用 93
5.3.1 特殊矩阵的压缩存储 93
5.3.2 稀疏矩阵的压缩存储 94
小结 102
习题 102
拓展实验:一元多项式的值计算 103
第6章 树 104
6.1 树的概念 105
6.1.1 树的定义 105
6.1.2 树的表示方法 106
6.1.3 树的基本术语 106
6.1.4 树的ADT定义 107
6.2 二叉树 107
6.2.1 二叉树的定义及基本结构 108
6.2.2 二叉树的存储结构 109
6.2.3 二叉树的遍历 112
6.3 线索二叉树 115
6.3.1 二叉树的线索化 115
6.3.2 利用线索遍历 116
6.4 树、森林、二叉树之间的关系 120
6.4.1 树的存储结构 121
6.4.2 森林与二叉树的转换 124
6.4.3 树和森林的遍历 127
6.5 哈夫曼算法及其应用 128
6.5.1 哈夫曼树的定义 128
6.5.2 哈夫曼二叉树的构造 129
6.5.3 哈夫曼树在编码问题中的应用 131
小结 135
习题 135
拓展实验:创建二叉树 138
第7章 图 139
7.1 图的概念与ADT定义 140
7.1.1 图的概念 140
7.1.2 图的抽象数据类型定义 144
7.2 图的存储结构 144
7.2.1 邻接矩阵 145
7.2.2 邻接表 147
7.2.3 十字链表 150
7.2.4 邻接多重表 152
7.3 图的遍历 153
7.3.1 深度优先搜索 153
7.3.2 广度优先搜索 155
7.4 图的应用 157
7.4.1 生成树 157
7.4.2 最短路径 162
7.4.3 拓扑排序 166
7.4.4 关键路径 170
小结 176
习题 176
拓展实验:图的深度优先搜索 179
第8章 查找 180
8.1 查找的基本概念 181
8.2 静态查找问题 182
8.2.1 顺序查找 182
8.2.2 二分查找 182
8.3 线性表的查找方法 184
8.3.1 线性查找 184
8.3.2 折半查找 185
8.3.3 分块查找 188
8.4 树表的查找方法 190
8.4.1 二叉查找树 190
8.4.2 平衡二叉树 196
8.4.3 B-树 202
8.5 哈希表的查找方法 203
8.5.1 哈希表 203
8.5.2 构造哈希表的基本方法 205
8.5.3 解决冲突的方法 206
8.5.4 哈希表的查找方法 209
8.6 各种查找方法的比较 210
小结 210
习题 210
拓展实验:折半查找 212
第9章 排序 213
9.1 排序的基本概念 214
9.2 内部排序 216
9.2.1 插入排序 216
9.2.2 冒泡排序 220
9.2.3 快速排序 221
9.2.4 选择排序 223
9.2.5 归并排序 229
9.2.6 基数排序 231
9.3 内部排序方法比较 234
9.4 内部排序方法的选择 235
9.5 外部排序简介 236
小结 236
习题 236
拓展实验:希尔排序 238
第10章 递归 239
10.1 递归的定义与类型 240
10.1.1 递归的定义 240
10.1.2 递归的类型 240
10.2 递归应用举例 240
10.2.1 汉诺塔问题 240
10.2.2 八皇后问题 243
10.3 递归的实现 244
10.4 递归到非递归的转换过程 247
10.5 递归的时间和空间复杂度 250
小结 251
习题 251
拓展实验:汉诺塔问题研究 252
第11章 文件 253
11.1 外存储器简介 254
11.2 有关文件的概念 255
11.2.1 文件及其类别 255
11.2.2 文件的操作 256
11.3 文件的组织 258
11.3.1 顺序文件 258
11.3.2 索引文件 259
11.3.3 散列文件 264
11.3.4 多关键字文件 265
小结 267
习题 267
拓展实验:索引文件 268
参考文献 269 -
作者介绍
主要著译者顺序姓名学历职称学科专长通讯地址1 陈明 博士 教授 计算机工作单位中国石油大学 邮政编码 电话13683018135 2 工作单位 邮政编码 电话 3 工作单位 邮政编码 电话 审校者(主审者) 学历 工作单位 邮政编码 电话 职称 工作单位 邮政编码 电话 -
编辑推荐
核心课程专业图书 -
书评书荐
-
附件下载
图书推荐