数据结构与算法—C语言版 本书特色
本书以C语言为基础讲解数据结构与算法。全书共11章,全面介绍了开发中常用的数据结构,包括线性表(顺序表、单链表、双链表、循环链表)、栈和队列、串、数组和广义表、树、图,详细讲解了各种数据结构的实现及常用操作,以及多种查找算法、内部排序算法的原理和实现,简要介绍了文件的相关知识,*后通过一个综合项目对书中介绍的知识进行整合应用,帮助读者了解实际项目开发的流程。本书对每种数据结构和算法的剖析都遵循由浅入深的原则,并配以实用的案例和图示,适合具有C语言基础的数据结构初学者,实用性强。本书可作为高等院校计算机相关专业数据结构课程的教学参考用书,也可作为培训教材和自学者的学习用书。
数据结构与算法—C语言版 内容简介
由传智播客编著的数据结构与算法的C语言版教材,让初学者能熟悉并灵活运用数据结构与算法。涵盖了常用的数据结构和算法,提供了9个常用的数据结构的完整实现、31个常用算法的实现、17道经典思考题。针对每一个所讲解的知识点都进行了深入分析,并使用生动形象的情境化举例,将原本复杂的、难于理解的知识点和问题进行简化,真正遵循了由浅入深、由易到难的学习规律。精心设计了大量的实用案例,让学习者不但能掌握和理解知识点,并且还可以清楚地知道在实际工作中如何去运用。免费提供丰富的配套资源,包括精美教学PPT、50个辅助案例、1000道测试题、长达30小时的教学视频。
数据结构与算法—C语言版 目录
第1章数据结构与算法概述1
1.1数据结构1
1.1.1什么是数据结构1
1.1.2数据结构的分类2
1.2抽象数据类型6
1.3算法7
1.3.1什么是算法7
1.3.2算法的特性9
1.3.3算法的复杂度10
1.3.4算法与数据结构12
1.4小结12
【思考题】12
第2章线性表13
2.1什么是线性表13
2.2线性表的顺序存储(顺序表)14
2.2.1顺序存储的原理14
2.2.2顺序存储的实现15
2.3线性表的链式存储(链表)23
2.3.1链式存储的原理23
2.3.2链式存储的实现24
2.4双链表31
2.4.1什么是双链表32
2.4.2双链表的实现32
2.5循环链表39
2.5.1什么是循环链表39
2.5.2循环链表的实现40
2.5.3约瑟夫环43
2.6本章小结48
【思考题】49目录数据结构与算法——C语言版第3章栈和队列50
3.1什么是栈50
3.2栈的实现51
3.2.1栈的顺序存储实现51
3.2.2栈的链式存储实现56
3.3栈的应用60
3.3.1用栈实现四则运算60
3.3.2栈的递归应用72
3.4什么是队列75
3.5队列的实现75
3.5.1顺序队列的实现76
3.5.2链式队列的实现80
3.5.3循环队列84
3.6本章小结86
【思考题】87
第4章串88
4.1什么是串88
4.2串的存储结构89
4.2.1串的顺序存储89
4.2.2串的链式存储97
4.3串的模式匹配算法98
4.3.1朴素的模式匹配98
4.3.2KMP算法(无回溯的模式匹配)101
4.4本章小结105
【思考题】105
第5章数组和广义表106
5.1数组106
5.2矩阵的压缩存储109
5.2.1特殊矩阵109
5.2.2稀疏矩阵的定义110
5.2.3稀疏矩阵的创建112
5.2.4稀疏矩阵的转置114
5.2.5稀疏矩阵的十字链表表示118
5.3广义表123
5.3.1广义表的定义123
5.3.2广义表的存储结构124
5.3.3广义表的递归运算125
5.4本章小结132
【思考题】132
第6章树133
6.1树133
6.1.1什么是树133
6.1.2树的表示法135
6.2二叉树138
6.2.1什么是二叉树138
6.2.2二叉树的分类138
6.2.3二叉树的性质139
6.3二叉树的存储结构141
6.3.1二叉树的顺序存储141
6.3.2二叉树的链式存储143
6.4二叉树的遍历147
6.4.1二叉树的遍历147
6.4.2递归思想的应用151
6.5二叉树的非递归遍历154
6.6二叉树与树、森林之间的转换162
6.6.1二叉树与树之间的转换162
6.6.2二叉树与森林之间的转换162
6.7二叉树的创建164
6.7.1中序和先序创建二叉树164
6.7.2#号法创建树166
6.8线索二叉树169
6.8.1什么是线索二叉树169
6.8.2二叉树的线索化171
6.8.3线索化二叉树的遍历175
6.9赫夫曼树177
6.9.1什么是赫夫曼树177
6.9.2赫夫曼树的构造178
6.9.3赫夫曼编码179
6.10本章小结180
【思考题】181
第7章图182
7.1图的基本概念182
7.1.1图的定义与基本术语182
7.1.2图的基本操作185
7.2图的存储结构186
7.2.1图的邻接矩阵存储187
7.2.2图的邻接表存储189
7.2.3图的十字链表存储192
7.2.4图的邻接多重表存储194
7.3图的遍历196
7.3.1深度优先遍历196
7.3.2广度优先遍历198
7.4*小生成树201
7.4.1什么是*小生成树201
7.4.2Prim算法203
7.4.3Kruskal算法207
7.5*短路径210
7.5.1从源点到其他顶点的*短路径211
7.5.2每对顶点的*短路径216
7.6拓扑排序219
7.7关键路径224
7.8本章小结229
【思考题】230
第8章查找231
8.1查找概述231
8.2顺序表的查找232
8.3有序表的查找233
8.3.1折半查找233
8.3.2插值查找235
8.3.3斐波纳契查找235
8.4索引顺序查找239
8.5二叉排序树241
8.6平衡二叉树246
8.6.1平衡二叉树的概念246
8.6.2平衡二叉树的插入247
8.6.3平衡二叉树的删除252
8.7B树254
8.7.1B树的概念254
8.7.2B树的插入256
8.7.3B树的删除258
8.8键树261
8.9哈希表265
8.9.1什么是哈希表265
8.9.2哈希函数的构造方法267
8.9.3处理哈希冲突269
8.9.4哈希表的查找实现273
8.10本章小结275
【思考题】275
第9章内部排序276
9.1排序的概念与分类276
9.2交换排序278
9.2.1冒泡排序279
9.2.2快速排序283
9.3插入排序286
9.3.1直接插入排序286
9.3.2折半插入排序289
9.3.3希尔排序290
9.4选择排序294
9.4.1简单选择排序294
9.4.2树形选择排序296
9.4.3堆排序298
9.5归并排序303
9.6基数排序307
9.6.1基数排序基础307
9.6.2链式基数排序310
9.7内部排序方法比较314
9.8磁盘排序315
9.8.1外部存储设备315
9.8.2磁盘排序分析317
9.8.3置换?选择排序319
9.8.4多路平衡归并321
9.8.5*佳归并树324
9.9本章小结325
【思考题】326
第10章文件327
10.1文件概述327
10.2顺序文件和索引文件328
10.2.1顺序文件328
10.2.2索引文件329
10.3ISAM文件和VSAM文件331
10.3.1ISAM文件331
10.3.2VSAM文件334
10.4哈希文件336
10.5多关键字文件337
10.5.1多重表文件337
10.5.2倒排文件338
10.6本章小结339
【思考题】339
第11章综合项目——贪吃蛇340
11.1项目分析340
11.1.1模块设计340
11.1.2模块描述342
11.1.3项目分析345
11.2项目实现346
11.2.1创建项目346
11.2.2项目设计346
11.2.3项目实现349
11.2.4主函数实现360
11.2.5效果展示364
11.3项目心得365
【思考题】366