图书目录

目录

第1章绪论1

1.1数据结构的研究内容1

1.2数据结构的基本概念3

1.2.1数据、数据元素、数据项和数据对象3

1.2.2数据结构4

1.3抽象数据类型及其实现6

1.3.1数据类型6

1.3.2抽象数据类型6

1.3.3C++的类和对象7

1.3.4C++的动态存储分配11

1.3.5C++的模板11

1.4算法和算法分析15

1.4.1算法15

1.4.2算法分析16

本章小结20

习题121

第2章线性表23

2.1线性表的逻辑结构23

2.2线性表的顺序表示和实现25

2.2.1线性表的顺序存储结构——顺序表25

2.2.2顺序表的实现26

2.3线性表的链式表示和实现33

2.3.1线性表的链式存储结构——链表33

2.3.2单链表的定义和表示33

2.3.3单链表的实现34

2.3.4双链表42

2.3.5循环链表44

2.4顺序表和链表的比较45

2.5线性表的应用46

本章小结52

习题252第3章栈和队列56

3.1栈56

3.1.1栈的定义56

3.1.2顺序栈的表示和实现58

3.1.3链栈的表示和实现62

3.1.4栈的应用67

3.2队列69

3.2.1队列的定义69

3.2.2循环队列——队列的顺序表示和实现71

3.2.3链队——队列的链式表示和实现75

3.2.4队列的应用80

本章小结83

习题384

第4章串88

4.1串的定义88

4.2串的存储结构90

4.3串的模式匹配91

本章小结96

习题496

第5章数组和广义表98

5.1数组98

5.1.1数组的基本概念98

5.1.2数组的存储结构99

5.2矩阵100

5.2.1特殊矩阵的压缩存储100

5.2.2稀疏矩阵的压缩存储104

5.3广义表109

5.3.1广义表的定义109

5.3.2广义表的存储结构111

本章小结112

习题5112

第6章树和二叉树116

6.1树116

6.1.1树的定义116

6.1.2树的基本术语116

6.1.3树的抽象数据类型定义118

6.2二叉树119

6.2.1二叉树的定义119

6.2.2二叉树的抽象数据类型定义121

6.2.3二叉树的性质123

6.2.4二叉树的存储结构124

6.2.5二叉链表的实现127

6.3二叉树的遍历133

6.3.1遍历的概念133

6.3.2遍历算法136

6.4线索二叉树144

6.4.1线索二叉树的概念144

6.4.2构造线索二叉树145

6.4.3线索二叉树的遍历148

6.5树和森林149

6.5.1树的存储结构149

6.5.2树和森林与二叉树的转换151

6.5.3树和森林的遍历154

6.6哈夫曼树及其应用155

6.6.1哈夫曼树的基本概念155

6.6.2哈夫曼树的构造算法156

6.6.3哈夫曼编码158

本章小结160

习题6161

第7章图165

7.1图的基本概念165

7.1.1图的定义165

7.1.2基本术语166

7.1.3图的抽象类型定义168

7.2图的存储结构169

7.2.1邻接矩阵169

7.2.2邻接表176

7.2.3十字链表185

7.2.4邻接多重表185

7.3图的遍历186

7.3.1深度优先遍历187

7.3.2广度优先遍历188

7.4图的应用191

7.4.1最小生成树191

7.4.2最短路径197

7.4.3拓扑排序204

7.4.4关键路径208

本章小结213

习题7214

第8章查找219

8.1查找的基本概念219

8.1.1查找的定义219

8.1.2查找算法的性能分析220

8.2基于静态表的查找221

8.2.1顺序查找221

8.2.2折半查找221

8.3二叉排序树223

8.3.1二叉排序树的概念224

8.3.2二叉排序树结点的定义224

8.3.3二叉排序树类的定义和实现225

8.4二叉平衡树231

8.4.1二叉平衡树的概念231

8.4.2二叉平衡树的平衡处理235

8.4.3二叉平衡树的插入操作239

8.5B树和B+树240

8.5.1B树241

8.5.2B+树244

8.6散列表245

8.6.1散列表的概念245

8.6.2常见的散列函数246

8.6.3处理冲突的方法246

本章小结249

习题8249

第9章排序251

9.1排序的基本概念251

9.1.1排序的定义251

9.1.2内排序和外排序251

9.1.3排序用到的类定义251

9.2插入排序252

9.2.1直接插入排序252

9.2.2希尔排序253

9.3交换排序255

9.3.1冒泡排序255

9.3.2快速排序257

9.4选择排序259

9.4.1简单选择排序259

9.4.2堆排序261

9.5归并排序266

9.6各种内部排序算法的分析和比较268

本章小结269

习题9269

第10章实验271

实验1一元多项式求和271

实验2求解约瑟夫问题277

实验3表达式求值280

实验4字符串的加解密285

实验5利用二叉树求解简单算术表达式289

实验6医院选址问题294

附录C++程序设计简述299

A.1C++程序的基本结构299

A.2C++的数据类型300

A.3顺序结构306

A.4选择结构308

A.5循环结构309

A.6数组311

A.7指针和引用315

A.8函数317

A.9结构体319

参考文献322