《零基础学数据结构》是机械工业出版社策划的零基础学系列的非常经典的图书。零基础学系列的许多图书都成为畅销图书,其中,《零基础学数据结构》荣登月畅销第11名,周畅销第2。
本书特点:
1。内容全面,讲解详细
2。层次清晰,结构合理
3。结合图表,叙述简单
4。例子典型,深入剖析
5。配有系统,巩固知识
6。配有多媒体视频讲解,加速学习
《数据结构》是计算机专业的专业基础课和核心课程。本书内容全面,所有算法都是用C语言描述,能够直接运行,在每一章的所有知识点都给出了算法的具体使用。本书内容包括数据结构概述、C语言程序设计基础、线表、栈、队列、串、数组、广义表、树和二叉树、图、查找、内排序和外排序。为了便于读者学习,在讲解每一个知识点时,都结合图和具体实例进行分析,在每个知识点的最后都给出算法的具体应用,每一个例子都比较典型且知识点覆盖完整。
本书可作为大中专院校的计算机相关专业数据结构的教材,也可作为计算机软件开发、考研和软件等级考试相关人员的参考书。
目录
第一篇基 础 篇
第1章数据结构概述 1
1.1数据结构的基本概念 1
1.2抽象数据类型及其描述 2
1.2.1抽象数据类型的定义 3
1.2.2抽象数据类型的描述 3
1.3数据结构的逻辑结构与物理结构 4
1.3.1逻辑结构 4
1.3.2物理结构 5
1.4算法的特性与算法的描述 5
1.4.1算法的定义 5
1.4.2算法的特性 6
1.4.3算法的描述 6
1.5算法分析 7
1.5.1算法设计的要求 7
1.5.2算法效率评价 8
1.5.3算法时间复杂度 9
1.5.4算法空间复杂度 11
1.6小结 11
第2章C语言基础 12
2.1开发环境介绍 12
2.1.1Turbo C 2.0开发环境介绍 12
2.1.2Visual C++ 6.0开发环境介绍 14
2.2递归与非递归 17
2.2.1函数的递归调用 17
2.2.2递归应用举例 18
2.2.3一般递归转化为非递归 20
2.3指针 20
2.3.1指针变量 20
2.3.2指针变量的引用 22
2.3.3指针与数组 22
2.3.4函数指针与指针函数 27
2.4参数传递 32
2.4.1传值调用 33
2.4.2传地址调用 34
2.5结构体与联合体 36
2.5.1结构体的定义 37
2.5.2指向结构体的指针 38
2.5.3联合体及应用 39
2.6动态内存分配与释放 40
2.6.1内存动态分配与释放 40
2.6.2链表 40
2.7小结 46
2.8习题 46
第二篇线性数据结构
第3章线性表 47
3.1线性表的概念及运算 47
3.1.1线性表的逻辑结构 47
3.1.2线性表的抽象数据类型 48
3.2线性表的顺序表示与实现 49
3.2.1线性表的顺序存储结构 49
3.2.2顺序表的基本运算 50
3.2.3顺序表的实现算法分析 53
3.3顺序表的应用举例 53
3.4线性表的链式表示与实现 58
3.4.1单链表的存储结构 58
3.4.2单链表的基本运算 60
3.5单链表应用举例 65
3.6循环单链表 70
3.6.1循环单链表的链式存储 71
3.6.2循环单链表的应用 72
3.7双向链表 76
3.7.1双向链表的存储结构 76
3.7.2双向链表的插入操作和删除操作 77
3.8双向链表的应用举例 79
3.9静态链表 82
3.9.1静态链表的存储结构 82
3.9.2静态链表的实现 83
3.9.3静态链表的应用 85
3.10各种线性表的操作 86
3.11一元多项式的表示与相乘 94
3.11.1一元多项式的表示 94
3.11.2一元多项式相乘 95
3.12小结 99
3.13习题 100
第4章栈 101
4.1栈的表示与实现 101
4.1.1栈的定义 101
4.1.2栈的抽象数据类型 102
4.2栈的顺序表示与实现 102
4.2.1栈的顺序存储结构 102
4.2.2顺序栈的基本运算 103
4.2.3共享栈的问题 105
4.3栈的应用举例一 107
4.4栈的链式表示与实现 111
4.4.1栈的存储结构 111
4.4.2栈的基本运算 112
4.4.3链栈的应用 114
4.5栈的应用举例二 115
4.5.1数制转换 116
4.5.2括号配对 117
4.5.3行编辑程序 119
4.6栈与递归的实现 121
4.6.1递归 121
4.6.2消除递归 124
4.7栈的应用举例三 129
4.7.1表达式的转换与计算 130
4.7.2表达式的运算 132
4.8小结 136
4.9习题 137
第5章队列 138
5.1队列的定义及抽象数据类型 138
5.1.1队列的定义 138
5.1.2队列的抽象数据类型 138
5.2队列的顺序存储及实现 139
5.2.1顺序队列的表示 139
5.2.2顺序队列的“假溢出” 142
5.2.3顺序循环队列的表示 143
5.2.4顺序循环队列的实现 144
5.2.5顺序循环队列实例 145
5.3队列的链式存储及实现 148
5.3.1链式队列的表示 148
5.3.2链式队列的实现 150
5.3.3链式队列实例 152
5.4双端队列 156
5.4.1双端队列的定义 156
5.4.2双端队列的应用 156
5.5队列在杨辉三角中的应用 159
5.5.1杨辉三角 159
5.5.2杨辉三角的队列构造 159
5.5.3杨辉三角队列的实现 160
5.6小结 164
5.7习题 164
第6章串 165
6.1串的定义及抽象数据类型 165
6.1.1串的定义 165
6.1.2串的抽象数据类型 165
6.2串的顺序表示与实现 167
6.2.1串的顺序存储结构 167
6.2.2串的基本运算 168
6.3串的应用举例 173
6.4串的堆分配表示与实现 174
6.4.1堆分配的存储结构 175
6.4.2堆串的基本运算 175
6.5堆串的应用举例 181
6.6串的链式存储表示与实现 183
6.6.1串的链式存储结构 183
6.6.2链串的基本运算 184
6.7链串的应用举例 189
6.8串的模式匹配 191
6.8.1经典的模式匹配算法─Brute-Force 191
6.8.2KMP算法 193
6.8.3模式匹配应用举例 198
6.9小结 202
6.10习题 202
第7章数组 203
7.1数组的定义及抽象数据类型 203
7.1.1数组的定义 203
7.1.2数组的抽象数据类型 204
7.2数组的顺序表示与实现 204
7.2.1数组的顺序存储结构 204
7.2.2数组的基本运算 206
7.2.3数组的应用举例 208
7.3特殊矩阵的压缩存储 209
7.3.1对称矩阵的压缩存储 210
7.3.2三角矩阵的压缩存储 210
7.3.3对角矩阵的压缩存储 211
7.4稀疏矩阵的压缩存储 212
7.4.1稀疏矩阵的定义 212
7.4.2稀疏矩阵的抽象数据类型 212
7.4.3稀疏矩阵的三元组表示 213
7.4.4稀疏矩阵的三元组实现 213
7.5稀疏矩阵的应用举例 219
7.5.1稀疏矩阵相乘三元组表示 219
7.5.2稀疏矩阵相乘三元组实现 221
7.6稀疏矩阵的十字链表表示与实现 224
7.6.1稀疏矩阵的十字链表表示 224
7.6.2稀疏矩阵的十字链表实现 225
7.7稀疏矩阵的十字链表实现应用举例 228
7.8小结 233
7.9习题 234
第8章广义表 235
8.1广义表的定义及抽象数据类型 235
8.1.1广义表的定义 235
8.1.2广义表的抽象数据类型 236
8.2广义表的头尾链表表示与实现 236
8.2.1广义表的头尾链表存储结构 236
8.2.2广义表的基本运算 237
8.2.3采用头尾链表存储结构的广义表应用举例 240
8.3广义表的扩展线性链表表示与实现 243
8.3.1广义表的扩展线性链表存储 243
8.3.2广义表的基本运算 244
8.3.3采用扩展线性链表存储结构的广义表应用举例 247
8.4小结 249
8.5习题 250
第三篇非线性数据结构
第9章树 251
9.1树的定义及抽象数据类型 251
9.1.1树的定义 251
9.1.2树的逻辑表示 252
9.1.3树的抽象数据类型 253
9.2二叉树 254
9.2.1二叉树的定义 254
9.2.2二叉树的性质 255
9.2.3二叉树的抽象数据类型 257
9.3二叉树的存储表示与实现 258
9.3.1二叉树的顺序存储 258
9.3.2二叉树的链式存储 258
9.3.3二叉树的基本运算 259
9.4二叉树的遍历 263
9.4.1二叉树遍历的定义 263
9.4.2二叉树的先序遍历 263
9.4.3二叉树的中序遍历 265
9.4.4二叉树的后序遍历 267
9.5二叉树遍历的应用举例 269
9.5.1二叉树的创建 269
9.5.2二叉树的输出 273
9.5.3二叉树的计数 276
9.6二叉树的线索化 279
9.6.1二叉树线索化的定义.. 279
9.6.2二叉树的线索化 280
9.6.3线索二叉树的遍历 282
9.6.4线索二叉树的应用举例 284
9.7树、森林与二叉树 287
9.7.1树的存储结构 287
9.7.2树转换为二叉树 290
9.7.3森林转换为二叉树 291
9.7.4二叉树转换为树和森林 292
9.7.5树和森林的遍历 292
9.8哈夫曼树 293
9.8.1哈夫曼树的定义 293
9.8.2哈夫曼编码 294
9.8.3哈夫曼编码算法的实现 295
9.9树与二叉树的应用举例 301
9.9.1相似二叉树 301
9.9.2由先序和中序、中序和后序确定二叉树 302
9.9.3树的孩子兄弟链表应用举例 308
9.10小结 311
9.11习题 312
第10章图 313
10.1图的定义与相关概念 313
10.1.1图的定义 313
10.1.2图的相关概念 314
10.1.3图的抽象数据类型 316
10.2图的存储结构 317
10.2.1邻接矩阵表示法 317
10.2.2邻接表表示法 318
10.2.3十字链表表示法 320
10.2.4邻接多重链表表示法 321
10.3图的应用举例 322
10.3.1采用邻接矩阵创建图 322
10.3.2采用邻接表创建图 325
10.4图的遍历 328
10.4.1图的深度优先遍历 328
10.4.2图的广度优先遍历 331
10.4.3图的遍历应用举例 333
10.5图的连通性问题 335
10.5.1无向图的连通分量与生成树 335
10.5.2最小生成树 337
10.6有向无环图 342
10.6.1AOV网与拓扑排序 342
10.6.2AOE网与关键路径 345
10.6.3关键路径应用举例 349
10.7最短路径 354
10.7.1从某个顶点到其余各顶点的最短路径 354
10.7.2每一对顶点之间的最短路径 359
10.8图的应用举例 363
10.9小结 367
10.10习题 368
第四篇查找和排序
第11章查找 369
11.1查找的基本概念 369
11.2静态查找 370
11.2.1顺序表的查找 370
11.2.2有序顺序表的查找 371
11.2.3索引顺序表的查找 373
11.2.4静态查找应用举例 374
11.3动态查找 377
11.3.1二叉排序树 377
11.3.2平衡二叉树 384
11.4B_树与B+树 392
11.4.1B_树 392
11.4.2B+树 399
11.5散列表 400
11.5.1散列表的定义 400
11.5.2散列函数的构造方法 401
11.5.3处理冲突的方法 402
11.5.4散列表应用举例 403
11.6小结 407
11.7习题 408
第12章内排序 409
12.1排序的基本概念 409
12.2插入排序 410
12.2.1直接插入排序 410
12.2.2折半插入排序 411
12.2.3希尔排序 412
12.2.4插入排序应用举例 413
12.3选择排序 415
12.3.1简单选择排序 415
12.3.2堆排序 417
12.3.3选择排序应用举例 421
12.4交换排序 423
12.4.1冒泡排序 423
12.4.2快速排序 424
12.4.3交换排序应用举例 427
12.5归并排序 431
12.5.1归并排序算法 431
12.5.2归并排序应用举例 432
12.6基数排序 434
12.6.1基数排序算法 434
12.6.2基数排序应用举例 437
12.7各种排序算法的比较 441
12.8排序算法应用举例 442
12.9小结 445
12.10习题 446
第13章外排序 447
13.1外存的存取特性 447
13.2磁盘排序 448
13.2.1归并排序的基本方法 448
13.2.2多路归并排序 449
13.3磁带排序 451
13.3.12路归并排序 451
13.3.2多路非平衡归并排序 452
13.4小结 453