数据结构是计算机及相关专业的重要专业基础课。它不仅是计算机专业学生的必修课程,也是许多非计算机专业的重要课程。数据结构的知识内容及其涉及的技术方法是计算机、电子、信息与通信等领域中诸多课程的基础,同时也是软件工程研究、开发和应用中必备的基础。本书是《数据结构和STL》的配套辅导教材,由于数据结构所包含的内容丰富,知识抽象,许多算法技巧性强,学生学习难度大,因此,本书在内容选择上不仅扩展了相关基础知识,详细分解了重要实例的数据结构和算法,还结合了电子信息类专业特点,对实验内容、课程设计内容都做了精心选择。撰写本书旨在对《数据结构和STL》这本书进行有益的补充,有一定针对性地作为电子信息类专业的数据结构辅导教材。本书作者长期从事数据结构课程的教学工作,在本书的写作过程中注重知识点的难易把握,突出数据结构在实际问题中的应用,同时对内容进行合理的剪裁和扩充,梳理出清晰的数据结构学习主线。本书的特点主要表现在以下几个方面。1. 扩展学习本书第1篇重点是对《数据结构和STL》书上的方法举一反三,从内容的深度和广度两个层面上进行扩展,使学习能力较强的学生能够不局限于课本内容,使之提高自己运用计算机算法解决问题的能力。2. 分级实验设计本书第2篇将实验按照难度分成基础实验、应用实验和扩展实验。 可以根据自己的能力来选择适合的题目进行实验,并增加了典型实验的详细讲解和实现,有助于读者理解实验的内涵,独立完成实验的内容。3. 实验设计与课程设计的衔接本书第2篇实验中的扩展实验设计用来解决实际的问题,即实验也可以作为课程设计的一部分,方便读者对数据结构重点章节内容的扩展和理解;此外和第3篇的课程设计在内容设计上既有关联又有深度的扩展,使读者可以在深度和广度两个方面扩展数据结构知识的应用。
本教材是针对大学理工科电子信息及相关专业所编写的《数据结构(C语言版)》教材。对于这些专业的学生,计算机基础教学的教学目的应该包括以下几点:能够熟练的将计算机作为工具运用于学习和今后的工作之中;能够在相关的领域中较好的进行计算机软/硬件的开发;学会并掌握自主学习计算机技术的方法,以便在将来继续不断的学习计算机新技术。这些目的是要通过若干门计算机基础课程来配套完成的,《数据结构(C语言版)》也是其中的一门课程。这门课程和其他计算机基础课程之间应该密切配合、合理分工,进一步提升学生对计算机的掌握程度,并且能够加深理解和应用在相关的领域中。
徐雅静,2003年毕业从教至今已有8年,一直从事计算机系列课程的教学工作,并坚持将教学与实践相结合,参与了一系列的教学和教学改革工作,是北京邮电大学信息与通信专业计算机基础课程改革的参与者之一。2004年开始教授数据结构课程,至今已有7年,目前是《数据结构》课程的实际负责人。本书所有作者均为北京邮电大学信息与通信工程学院的教师,目前继续在教学第一线投入教学和教学改革工作。所有老师已教授《数据结构》、《C++程序设计》等计算机类课程八年以上,具有丰富的教学经验。前两位作者还曾参与编写《计算机文化基础》、《大学计算机基础》、《C++程序设计》等教材。
第1篇习题与讲解
第1章绪论3
1.1本章导学3
1.1.1知识点MAP图3
1.1.2学习重点3
1.2扩展学习4
1.2.1深入理解数据结构课程的学习内容4
1.2.2算法的时间复杂度分析5
1.2.3异常处理机制7
1.3课后习题指导10
1.4练习题15
第2章线性表16
2.1本章导学16
2.1.1知识点MAP图16
2.1.2学习重点16
2.2扩展学习17
2.2.1遍历顺序表17
2.2.2深入理解链表的存储结构18
2.2.3求单链表的长度19
2.2.4在单链表当前结点前后进行操作的快速算法20
2.2.5链表的应用21
2.3课后习题指导25
2.4练习题36
第3章栈、队列和串39
3.1本章导学39
3.1.1知识点MAP图39
3.1.2学习重点39
3.2扩展学习40
3.2.1用队列实现Josephus环问题40
3.2.2深入理解递归41
3.2.3回溯法43
3.3课后习题指导48
3.4练习题55
第4章多维数组和广义表57
4.1本章导学57
4.1.1知识点MAP图57
4.1.2学习重点57
4.2扩展学习58
4.2.1C++中多维数组存储58
4.2.2大数组存储探讨59
4.3课后习题指导61
4.4练习题66
第5章树67
5.1本章导学67
5.1.1知识点MAP图67
5.1.2学习重点68
5.2扩展学习68
5.2.1二叉树构造方法69
5.2.2二叉树的复制72
5.2.3二叉树的路径显示73
5.2.4二叉树的高度74
5.3课后习题指导75
5.4练习题85
第6章图87
6.1本章导学87
6.1.1知识点MAP图87
6.1.2学习重点88
6.2扩展学习88
6.2.1非递归深度优先遍历问题89
6.2.2判断图G是否连通的问题90
6.2.3哈密顿路径问题91
6.3课后习题指导93
6.4练习题98
第7章查找100
7.1本章导学100
7.1.1知识点MAP图100
7.1.2学习重点101
7.2扩展学习101
7.2.1时空效率101
7.2.2非递归实现二叉排序树102
7.2.3链地址法构造散列表107
7.3课后习题指导111
7.4练习题118
第8章排序120
8.1本章导学120
8.1.1知识点MAP图120
8.1.2学习重点120
8.2扩展学习121
8.2.1排序算法在单链表上的移植121
8.2.2基数排序算法126
8.2.3荷兰国旗问题128
8.3课后习题指导131
8.4练习题138
综合试卷一140
综合试卷二145
综合试卷三150
综合试卷四156
综合试卷五161
练习题答案166
综合试卷一答案173
综合试卷二答案176
综合试卷三答案180
综合试卷四答案183
综合试卷五答案186
第2篇实验题目与指导
第1部分实验题目191
实验一线性表191
实验二栈和队列193
实验三多维数组196
实验四树198
实验五图200
实验六查找202
实验七排序203
第2部分实验指导206
第3篇课程设计
课程设计1动态内存管理241
课程设计2华容道游戏求解254
课程设计3校园地图266
附录A华容道游戏、魔方游戏、独立钻石棋280
附录B实验报告模板282