前言 1
第1章 概述 1
1.1 什么是数据结构 2
1.2 基本概念和术语 4
1.3 算法和算法分析 6
1.3.1 算法及其描述 6
1.3.2 算法性能和复杂度分析 8
1.4 C语言基础 9
1.4.1 数组 9
1.4.2 指针 10
1.4.3 结构体类型 12
1.4.4 C程序的调试方法 13
本章小结 13
习题一 14
第2章 顺序表 15
2.1 线性表的定义及逻辑结构 15
2.2 线性表的基本操作 16
2.3 线性表的顺序存储结构 16
2.4 顺序表基本操作的实现 18
2.4.1 顺序表的初始化 18
2.4.2 顺序表中元素的插入 18
2.4.3 顺序表中元素的删除 19
2.4.4 顺序表的按值查找 21
2.5 顺序表应用 21
本章小结 23
习题二 24
实验一 顺序表应用 24
第3章 链表 27
3.1 单链表 27
3.1.1 单链表的基本概念 27
3.1.2 单链表的数据类型 28
3.2 循环链表 34
3.3 双向链表 35
3.3.1 双向链表的基本概念 35
3.3.2 双向链表的插入与删除的算法 36
3.4 应用举例及分析 37
本章小结 39
习题三 40
实验二 链表的应用 41
第4章 栈与队列 45
4.1 栈 45
4.1.1 栈的基本概念 45
4.1.2 栈的存储方式和基本操作的实现算法 46
4.2 队列 50
4.2.1 队列的基本概念 50
4.2.2 队列的基本操作 51
4.2.3 队列的存储方式和基本操作的实现算法 51
4.3 栈与队列的应用 55
4.3.1 栈的应用 55
4.3.2 队列的应用 57
本章小结 59
习题四 59
实验三 栈的应用 61
第5章 字符串与多维数组 63
5.1 串 63
5.1.1 串的基本概念 63
5.1.2 串的存储结构 64
5.1.3 串基本操作的实现算法 65
5.1.4 串的应用 67
5.2 数组 68
5.2.1 数组的定义 68
5.2.2 数组的存储结构 68
5.2.3 特殊矩阵的压缩存储 69
5.2.4 稀疏矩阵的压缩存储 70
5.2.5 数组的应用 73
本章小结 74
习题五 74
实验四 字符串与数组 75
第6章 递归 77
6.1 递归的基本概念和实现原理 77
6.2 递归算法实现 81
6.2.1 递归算法实现的基本步骤 81
6.2.2 递归的应用 82
6.3 递归问题的非递归实现 83
6.3.1 简单递归问题的转换 84
6.3.2 借助栈实现非递归过程 84
习题六 85
实验五 递归 86
第7章 树与二叉树 88
7.1 树的定义和基本运算 88
7.1.1 树的定义 88
7.1.2 基本术语 89
7.1.3 树的基本运算 90
7.2 二叉树 90
7.2.1 二叉树的定义 91
7.2.2 二叉树的性质 91
7.2.3 二叉树的存储 93
7.2.4 遍历二叉树 96
7.2.5 哈夫曼树 98
7.3 树、森林和二叉树的转换 100
7.3.1 树的存储结构 100
7.3.2 树与二叉树的转换 102
7.3.3 森林转换为二叉树 103
7.3.4 二叉树转换为树和森林 103
7.3.5 树和森林的遍历 104
习题七 105
实验六 树 106
第8章 排序与查找 110
8.1 排序基本概念 110
8.2 简单排序方法 111
8.3 快速排序 114
8.4 归并排序 116
8.5 查找基本概念和术语 118
8.6 静态查找表 119
8.7 动态查找表 123
8.8 哈希表查找 126
8.8.1 哈希表与哈希方法 126
8.8.2 常用的哈希函数 127
8.8.3 处理冲突的方法 129
8.8.4 哈希表的查找分析 130
习题八 131
实验七 排序 132
第9章 图 135
9.1 图的概念和术语 135
9.2 图的存储方式 137
9.3 图的遍历 140
9.4 最小生成树 142
本章小结 144
习题九 144
实验八 图的创建与遍历 144
第10章 常用算法 147
10.1 穷举法 147
10.2 回溯法 148
10.3 分治法 149
10.4 贪婪法 150
10.5 递推法 151
10.6 动态规划法 152
附录 155
附录A TurboC集成环境的调试功能 155
附录B 《数据结构与算法》课程标准 156
参考文献 163