本书是作者积多年讲授与研究“数据结构”课程的经验并结合指导学生上机的实践编写而成的。作者力求从实践的角度,帮助读者深入学习、理解和掌握数据结构知识并能灵活应用这些知识。本书涵盖了“数据结构”课程涉及的上机实践内容,并且列举了理论知识对应的算法实现程序,这些程序都已在VC++6.0环境下调试通过。
黑新宏,男,博士,教务处处长,1994.9-1998.7 西安理工大学 计算机及其应用 学士;□000.9-□003.4
西安理工大学 计算机应用技术 硕士;□005.4-□008.3 日本大学 理工学部 计算机科学 博士;□008.7-□013.11
西安理工大学计算机科学与工程学院 副教授;□013.1□至今 西安理工大学计算机科学与工程学院
教授。□018.1至今,西安理工大学计算机学院教授、院长。
目录
□□章 线性表1
1.1 线性表的定义1
1.□ 线性表的顺序存储――顺序表1
1.3 线性表的链式存储□
第□章 栈和队列□3
□.1 栈□3
□.□ 队列□5
第3章 串39
第4章 数组与广义表56
4.1 数组56
4.□ 特殊矩阵58
4.3 稀疏矩阵58
4.4 广义表61
第5章 树与二叉树76
5.1 树76
5.□ 二叉树76
5.3 二叉树的性质78
5.4 二叉树的存储结构78
5.5 二叉树的遍历方法80
5.6 线索二叉树80
5.7 哈夫曼树8□
5.8 哈夫曼编码84
第6章 图115
6.1 图的概念115
6.□ 图的基本术语116
6.3 邻接矩阵118
6.4 邻接表1□0
6.5 图的遍历1□1
6.6 图的连通性问题1□1
6.7 生成树与□小生成树1□□
6.8 □短路径1□3
6.9 AOV网与拓扑排序1□4
6.10 AOE网与关键路径1□6
第7章 查找167
7.1 顺序查找167
7.□ 有序表的查找168
7.3 二叉排序树与平衡二叉树168
7.4 哈希表与哈希方法169
7.5 哈希函数的构造方法169
7.6 处理冲突的方法170
第8章 排序196
8.1 插入排序196
8.□ 交换排序197
8.3 选择排序198
8.4 归并排序□00
8.5 基数排序□00
第9章 数据结构算法应用□□8
9.1 顺序表的应用□□8
9.1.1 顺序表的逆置□□8
9.1.□ 将两个升序的顺序表A和B合并为一个升序的顺序表C□□9
9.1.3 单链表的逆置□31
9.1.4 将递增有序的单链表A和B合并为递减有序的单链表C□3□
9.1.5 删除单链表中值相同的节点□34
9.1.6 按递增次序输出单链表中各节点的数据值□35
9.1.7 用单链表实现约瑟夫(Josephus)问题□37
9.□ 栈和队列的应用□39
9.□.1 用栈判断给定的字符序列是否为回文□39
9.□.□ 循环链表中只有队尾指针的入队和出队算法□40
9.□.3 算术表达式中的括号匹配□4□
9.□.4 将队列中所有元素逆置□45
9.□.5 用两个栈模拟一个队列□48
9.□.6 用栈实现汉诺塔(Tower of Hanoi)问题非递归解法□50
9.3 串的应用□5□
9.3.1 将串s1中连续的字符用串s□替换□5□
9.3.□ 计算一个子串在串中出现的次数□53
9.3.3 输出长度□大的等值子串□55
9.3.4 将链串s中首次与链串t匹配的子串逆置□56
9.4 数组与广义表的应用□58
9.4.1 将所有奇数存放到数组的前半部分,所有偶数存放到数组的后半部分□58
9.4.□ 求字符数组中连续相同字符构成的子序列长度□59
9.4.3 求广义表的表头和表尾□60
9.4.4 另一种广义表生成方法□64
9.5 树与二叉树的应用□68
9.5.1 交换二叉树的左子树和右子树□68
9.5.□ 统计二叉树叶子节点个数的非递归算法的实现□69
9.5.3 判定一棵二叉树是否为完全二叉树□71
9.5.4 求二叉树中□□条□长的路径并输出此路径上各节点的值□73
9.6 图的应用□76
9.6.1 邻接矩阵转换为邻接表□76
9.6.□ 深度优先搜索的非递归算法实现□78
9.6.3 求无向连通图中距顶点v0路径长度为k的所有节点□80
9.6.4 用深度优先搜索对图中所有顶点进行拓扑排序□83
9.7 查找的应用□86
9.7.1 判断一棵二叉树是否为二叉排序树□86
9.7.□ 另一种平衡二叉树的生成方法□88
9.8 排序的应用□93
9.8.1 用双向循环链表表示的插入排序□93
9.8.□ 双向冒泡排序□95
9.8.3 双向选择排序□97
9.8.4 单链表存储下的选择排序□98
9.8.5 归并排序的迭代算法实现300
参考文献303