以图解方式阐述数据结构的基本概念及应用,提高学习效率。
用C#语言来实践数据结构中的重要理论,以范例程序来说明数据结构的内涵。
提供丰富、完整的范例程序和每章课后习题源代码供读者下载使用,边学边实践。
范例采用了集编译、运行、测试和调试功能于一体的Visual Studio Community 2017集成开发环境(IDE),它是一套的工具。
提供实践数据结构的C#程序指令,并以摘要的方式帮助读者快速掌握其中的重点。
基本信息
商品名称: |
图解数据结构--使用C# |
开本: |
16开 |
作者: |
吴灿铭、胡昭民 |
定价: |
79.00 |
ISBN号: |
9787302528722 |
出版时间: |
2019-06-18 |
出版社: |
清华大学出版社 |
印刷时间: |
2019-06-11 |
版次: |
1 |
印次: |
1 |
目&nbs;&nbs;&nbs; 录
第1章&nbs; 数据结构与算法&nbs;&nbs; &nbs;1
1.1&nbs; 数据结构的定义&nbs;&nbs; &nbs;2
1.1.1&nbs; 数据与信息&nbs;&nbs; &nbs;2
1.1.2&nbs; 数据的特性&nbs;&nbs; &nbs;3
1.2&nbs; 算法&nbs;&nbs; &nbs;4
1.2.1&nbs; 到处都是算法&nbs;&nbs; &nbs;4
1.2.2&nbs; 算法的定义&nbs;&nbs; &nbs;5
1.3&nbs; 算法性能分析&nbs;&nbs; &nbs;7
1.3.1&nbs; Big-oh&nbs;&nbs; &nbs;8
1.3.2&nbs; Ω (omega)&nbs;&nbs; &nbs;11
1.3.3&nbs; θ (theta)&nbs;&nbs; &nbs;11
1.4&nbs; 常见算法介绍&nbs;&nbs; &nbs;11
1.4.1&nbs; 分治法&nbs;&nbs; &nbs;12
1.4.2&nbs; 递归法&nbs;&nbs; &nbs;13
1.4.3&nbs; 贪心法&nbs;&nbs; &nbs;17
1.4.4&nbs; 动态规划法&nbs;&nbs; &nbs;17
1.4.5&nbs; 迭代法&nbs;&nbs; &nbs;18
1.4.6&nbs; 枚举法&nbs;&nbs; &nbs;20
1.5&nbs; 程序设计简介&nbs;&nbs; &nbs;21
1.5.1&nbs; 程序开发流程&nbs;&nbs; &nbs;22
1.5.2&nbs; 结构化程序设计&nbs;&nbs; &nbs;22
1.5.3&nbs; 面向对象程序设计&nbs;&nbs; &nbs;23
课后习题&nbs;&nbs; &nbs;26
第2章&nbs; 数组结构&nbs;&nbs; &nbs;28
2.1&nbs; 线性表简介&nbs;&nbs; &nbs;29
2.2&nbs; 认识数组&nbs;&nbs; &nbs;30
2.2.1&nbs; 一维数组&nbs;&nbs; &nbs;31
2.2.2&nbs; 二维数组&nbs;&nbs; &nbs;33
2.2.3&nbs; 三维数组&nbs;&nbs; &nbs;37
2.2.4&nbs; n维数组&nbs;&nbs; &nbs;40
2.3&nbs; 矩阵&nbs;&nbs; &nbs;41
2.3.1&nbs; 矩阵相加&nbs;&nbs; &nbs;41
2.3.2&nbs; 矩阵相乘&nbs;&nbs; &nbs;44
2.3.3&nbs; 转置矩阵&nbs;&nbs; &nbs;47
2.3.4&nbs; 稀疏矩阵&nbs;&nbs; &nbs;49
2.3.5&nbs; 上三角形矩阵&nbs;&nbs; &nbs;52
2.3.6&nbs; 下三角形矩阵&nbs;&nbs; &nbs;57
2.3.7&nbs; 带状矩阵&nbs;&nbs; &nbs;62
2.4&nbs; 数组与多项式&nbs;&nbs; &nbs;62
课后习题&nbs;&nbs; &nbs;65
第3章&nbs; 链表&nbs;&nbs; &nbs;67
3.1&nbs; 动态分配内存&nbs;&nbs; &nbs;68
3.2&nbs; 单向链表&nbs;&nbs; &nbs;69
3.2.1&nbs; 建立单向链表&nbs;&nbs; &nbs;70
3.2.2&nbs; 单向链表节点的删除&nbs;&nbs; &nbs;75
3.2.3&nbs; 单向链表插入新节点&nbs;&nbs; &nbs;79
3.2.4&nbs; 单向链表的反转&nbs;&nbs; &nbs;85
3.2.5&nbs; 单向链表的串接&nbs;&nbs; &nbs;89
3.2.6&nbs; 多项式链表表示法&nbs;&nbs; &nbs;90
3.3&nbs; 环形链表&nbs;&nbs; &nbs;97
3.3.1&nbs; 环形链表新节点的插入&nbs;&nbs; &nbs;97
3.3.2&nbs; 环形链表中节点的删除&nbs;&nbs; &nbs;98
3.3.3&nbs; 环形链表的串接&nbs;&nbs; &nbs;101
3.3.4&nbs; 疏矩阵链表表示法&nbs;&nbs; &nbs;106
3.4&nbs; 双向链表&nbs;&nbs; &nbs;108
3.4.1&nbs; 双向链表的定义&nbs;&nbs; &nbs;108
3.4.2&nbs; 双向链表节点的插入&nbs;&nbs; &nbs;109
3.4.3&nbs; 双向链表节点的删除&nbs;&nbs; &nbs;110
课后习题&nbs;&nbs; &nbs;114
第4章&nbs; 堆栈&nbs;&nbs; &nbs;116
4.1&nbs; 堆栈简介&nbs;&nbs; &nbs;117
4.1.1&nbs; 用数组来实现堆栈&nbs;&nbs; &nbs;118
4.1.2&nbs; 用链表来实现堆栈&nbs;&nbs; &nbs;124
4.2&nbs; 堆栈的应用&nbs;&nbs; &nbs;128
4.2.1&nbs; 汉诺塔问题&nbs;&nbs; &nbs;130
4.2.2&nbs; 老鼠走迷宫&nbs;&nbs; &nbs;136
4.2.3&nbs; 八皇后问题&nbs;&nbs; &nbs;142
4.3&nbs; 算术表达式的求值法(对应于表达式的表示法)&nbs;&nbs; &nbs;146
4.3.1&nbs; 中序表示法求值&nbs;&nbs; &nbs;147
4.3.2&nbs; 前序表示法求值&nbs;&nbs; &nbs;148
4.3.3&nbs; 后序表示法求值&nbs;&nbs; &nbs;149
4.4&nbs; 中序法转换为前序法&nbs;&nbs; &nbs;150
4.4.1&nbs; 二叉树法&nbs;&nbs; &nbs;150
4.4.2&nbs; 括号法&nbs;&nbs; &nbs;150
4.4.3&nbs; 堆栈法&nbs;&nbs; &nbs;151
4.5&nbs; 前序与后序表达式转换成中序表达式&nbs;&nbs; &nbs;157
4.5.1&nbs; 括号法&nbs;&nbs; &nbs;158
4.5.2&nbs; 堆栈法&nbs;&nbs; &nbs;159
课后习题&nbs;&nbs; &nbs;161
第5章&nbs; 队列&nbs;&nbs; &nbs;163
5.1&nbs; 认识队列&nbs;&nbs; &nbs;164
5.1.1&nbs; 队列的基本操作&nbs;&nbs; &nbs;164
5.1.2&nbs; 用数组实现队列&nbs;&nbs; &nbs;165
5.1.3&nbs; 用链表实现队列&nbs;&nbs; &nbs;169
5.2&nbs; 队列的应用&nbs;&nbs; &nbs;171
5.2.1&nbs; 环形队列&nbs;&nbs; &nbs;172
5.2.2&nbs; 双向队列&nbs;&nbs; &nbs;176
5.2.3&nbs; 优先队列&nbs;&nbs; &nbs;179
课后习题&nbs;&nbs; &nbs;180
第6章&nbs; 树&nbs;&nbs; &nbs;182
6.1&nbs; 树的基本概念&nbs;&nbs; &nbs;183
6.2&nbs; 二叉树简介&nbs;&nbs; &nbs;185
6.2.1&nbs; 二叉树的定义&nbs;&nbs; &nbs;185
6.2.2&nbs; 特殊二叉树简介&nbs;&nbs; &nbs;187
6.3&nbs; 二叉树存储方式&nbs;&nbs; &nbs;188
6.3.1&nbs; 一维数组表示法&nbs;&nbs; &nbs;188
6.3.2&nbs; 链表表示法&nbs;&nbs; &nbs;191
6.4&nbs; 二叉树遍历&nbs;&nbs; &nbs;193
6.4.1&nbs; 中序遍历&nbs;&nbs; &nbs;194
6.4.2&nbs; 后序遍历&nbs;&nbs; &nbs;194
6.4.3&nbs; 前序遍历&nbs;&nbs; &nbs;195
6.4.4&nbs; 二叉树遍历的实现&nbs;&nbs; &nbs;196
6.4.5&nbs; 二叉运算树&nbs;&nbs; &nbs;200
6.5&nbs; 二叉树的高级研究&nbs;&nbs; &nbs;206
6.5.1&nbs; 二叉排序树&nbs;&nbs; &nbs;206
6.5.2&nbs; 二叉查找树&nbs;&nbs; &nbs;212
6.5.3&nbs; 线索二叉树&nbs;&nbs; &nbs;216
6.6&nbs; 树的二叉树表示法&nbs;&nbs; &nbs;222
6.6.1&nbs; 树转化为二叉树&nbs;&nbs; &nbs;222
6.6.2&nbs; 树林转化为二叉树&nbs;&nbs; &nbs;224
6.6.3&nbs; 树与森林的遍历&nbs;&nbs; &nbs;225
6.6.4&nbs; 确定*二叉树&nbs;&nbs; &nbs;228
6.7&nbs; 优化二叉查找树&nbs;&nbs; &nbs;230
6.7.1&nbs; 扩充二叉树&nbs;&nbs; &nbs;230
6.7.2&nbs; 霍夫曼树&nbs;&nbs; &nbs;231
6.8&nbs; 衡树&nbs;&nbs; &nbs;232
6.8.1&nbs; 衡树的定义&nbs;&nbs; &nbs;232
6.8.2&nbs; B树&nbs;&nbs; &nbs;234
课后习题&nbs;&nbs; &nbs;235
第7章&nbs; 图&nbs;&nbs; &nbs;238
7.1&nbs; 图论简介&nbs;&nbs; &nbs;239
7.1.1&nbs; 图的定义&nbs;&nbs; &nbs;240
7.1.2&nbs; 无向图&nbs;&nbs; &nbs;240
7.1.3&nbs; 有向图&nbs;&nbs; &nbs;241
7.2&nbs; 图的数据表示法&nbs;&nbs; &nbs;242
7.2.1&nbs; 邻接矩阵法&nbs;&nbs; &nbs;242
7.2.2&nbs; 邻接链表法&nbs;&nbs; &nbs;247
7.2.3&nbs; 邻接复合链表法&nbs;&nbs; &nbs;251
7.2.4&nbs; 索引表格法&nbs;&nbs; &nbs;253
7.3&nbs; 图的遍历&nbs;&nbs; &nbs;254
7.3.1&nbs; 深度优先法&nbs;&nbs; &nbs;254
7.3.2&nbs; 广度优先查找法&nbs;&nbs; &nbs;258
7.4&nbs; 生成树&nbs;&nbs; &nbs;262
7.5&nbs; *小生成树&nbs;&nbs; &nbs;264
7.5.1&nbs; rim算法&nbs;&nbs; &nbs;264
7.5.2&nbs; Kruskal算法&nbs;&nbs; &nbs;265
7.6&nbs; 图的*短路径&nbs;&nbs; &nbs;271
7.6.1&nbs; 单点对全部顶点——Dijkstra算法与A*算法&nbs;&nbs; &nbs;272
7.6.2&nbs; 两两顶点间的*短路径——Floyd算法&nbs;&nbs; &nbs;279
7.7&nbs; AOV网络与拓扑排序&nbs;&nbs; &nbs;284
7.8&nbs; AOE网络&nbs;&nbs; &nbs;286
课后习题&nbs;&nbs; &nbs;288
第8章&nbs; 排序&nbs;&nbs; &nbs;292
8.1&nbs; 排序简介&nbs;&nbs; &nbs;294
8.1.1&nbs; 排序的分类&nbs;&nbs; &nbs;294
8.1.2&nbs; 排序算法分析&nbs;&nbs; &nbs;294
8.2&nbs; 内部排序法&nbs;&nbs; &nbs;295
8.2.1&nbs; 冒泡排序法&nbs;&nbs; &nbs;296
8.2.2&nbs; 选择排序法&nbs;&nbs; &nbs;301
8.2.3&nbs; 插入排序法&nbs;&nbs; &nbs;305
8.2.4&nbs; 希尔排序法&nbs;&nbs; &nbs;307
8.2.5&nbs; 合并排序法&nbs;&nbs; &nbs;311
8.2.6&nbs; 快速排序法&nbs;&nbs; &nbs;312
8.2.7&nbs; 堆积排序法&nbs;&nbs; &nbs;316
8.2.8&nbs; 基数排序法&nbs;&nbs; &nbs;323
8.3&nbs; 外部排序法&nbs;&nbs; &nbs;326
8.3.1&nbs; 直接合并排序法&nbs;&nbs; &nbs;326
8.3.2&nbs; k路合并法&nbs;&nbs; &nbs;337
8.3.3&nbs; 多相合并法&nbs;&nbs; &nbs;337
课后习题&nbs;&nbs; &nbs;338
第9章&nbs; 查找&nbs;&nbs; &nbs;342
9.1&nbs; 常见的查找方法&nbs;&nbs; &nbs;343
9.1.1&nbs; 顺序查找法&nbs;&nbs; &nbs;344
9.1.2&nbs; 二分查找法&nbs;&nbs; &nbs;346
9.1.3&nbs; 插值查找法&nbs;&nbs; &nbs;349
9.1.4&nbs; 斐波拉契查找法&nbs;&nbs; &nbs;352
9.2&nbs; 哈希查找法&nbs;&nbs; &nbs;355
9.3&nbs; 常见的哈希法&nbs;&nbs; &nbs;356
9.3.1&nbs; 除留余数法&nbs;&nbs; &nbs;356
9.3.2&nbs; 方取中法&nbs;&nbs; &nbs;357
9.3.3&nbs; 折叠法&nbs;&nbs; &nbs;358
9.3.4&nbs; 数字分析法&nbs;&nbs; &nbs;359
9.4&nbs; 碰撞与溢出问题的处理&nbs;&nbs; &nbs;359
9.4.1&nbs; 线性探测法&nbs;&nbs; &nbs;360
9.4.2&nbs; 方探测法&nbs;&nbs; &nbs;362
9.4.3&nbs; 再哈希法&nbs;&nbs; &nbs;362
9.4.4&nbs; 链表法&nbs;&nbs; &nbs;364
9.4.5&nbs; 哈希法综合范例&nbs;&nbs; &nbs;367
课后习题&nbs;&nbs; &nbs;370
附录A&nbs; C#开发环境与指令摘要&nbs;&nbs; &nbs;373
A.1&nbs; Visual Studio Community 2017软件下载与安装&nbs;&nbs; &nbs;374
A.2&nbs; 创建*个控制台项目&nbs;&nbs; &nbs;376
A.3&nbs; C# 语言重要指令的简介&nbs;&nbs; &nbs;378
A.3.1&nbs; 注释指令&nbs;&nbs; &nbs;379
A.3.2&nbs; 控制台应用程序输入/输出指令&nbs;&nbs; &nbs;379
A.3.3&nbs; 变量与常数&nbs;&nbs; &nbs;380
A.3.4&nbs; 数组的声明与使用&nbs;&nbs; &nbs;381
A.3.5&nbs; 数组的排序&nbs;&nbs; &nbs;382
A.3.6&nbs; 随机数的使用&nbs;&nbs; &nbs;383
A.3.7&nbs; 数据类型转换&nbs;&nbs; &nbs;383
A.3.8&nbs; 对象与类&nbs;&nbs; &nbs;384
A.3.9&nbs; 静态类与静态字段&nbs;&nbs; &nbs;386
附录B&nbs; 习题答案&nbs;&nbs; &nbs;388
......这是一本综合讲述数据结构及其算法的入门书,全书采用图文讲解的方式,力求读者易于学习和掌握。全书从基本的数据结构概念开始讲起,包括数组结构、队列、堆栈、树形结构、排序、查找等;接着介绍常用的算法,包括分治法、递归法、贪心法、动态规划法、迭代法、枚举法、回溯法等,并为每个经典的算法都提供了C#程序设计语言编写的完整范例程序;*后在每章末尾都安排了大量的习题,这些题目包含各类考试的例题,希望读者能灵活地应用所学的各种知识。本书图文并茂,叙述简洁、清晰,范例丰富,可操作性强,针对具有一定编程能力又想提高编程“深度”的非信息专业类人员或学生,是一本数据结构普及型的教科书或自学参考书。......吴灿铭,现任荣钦科技股份有限公司执行长,美国Rochester Institute of Technology计算机科学研究所毕业,长期从事信息教育及计算机图书写作的工作,计算机图书著作包括计算器概论、数据结构、办公室电子数据处理、互联网等相关题材,并监制过多套游戏以及教学软件的研发。