内容简介
本书基于Python语言介绍了数据结构与算法的基本知识,主要内容包括抽象数据类型和Python面向对象程序设计、线性表、字符串、栈和队列、二叉树和树、集合、排序以及算法的基本知识。本书延续问题求解的思路,从解决问题的目标来组织教学内容,注重理论与实践的并用。
目录
- 前言
- 第1章绪论1
- 1.1计算机问题求解1
- 1.1.1程序开发过程1
- 1.1.2一个简单例子3
- 1.2问题求解:交叉路口的红绿灯安排4
- 1.2.1问题分析和严格化5
- 1.2.2图的顶点分组和算法6
- 1.2.3算法的精化和Python描述7
- 1.2.4讨论8
- 1.3算法和算法分析10
- 1.3.1问题、问题实例和算法10
- 1.3.2算法的代价及其度量14
- 1.3.3算法分析19
- 1.3.4Python程序的计算代价(复杂度)21
- 1.4数据结构23
- 1.4.1数据结构及其分类24
- 1.4.2计算机内存对象表示26
- 1.4.3Python对象和数据结构30
- 练习32
- 第2章抽象数据类型和Python类34
- 2.1抽象数据类型34
- 2.1.1数据类型和数据构造34
- 2.1.2抽象数据类型的概念36
- 2.1.3抽象数据类型的描述37
- 2.2Python的类39
- 2.2.1有理数类39
- 2.2.2类定义进阶40
- 2.2.3本书采用的ADT描述形式43
- 2.3类的定义和使用44
- 2.3.1类的基本定义和使用44
- 2.3.2实例对象:初始化和使用45
- 2.3.3几点说明47
- 2.3.4继承49
- 2.4Python异常53
- 2.4.1异常类和自定义异常53
- 2.4.2异常的传播和捕捉54
- 2.4.3内置的标准异常类54
- 2.5类定义实例:学校人事管理系统中的类55
- 2.5.1问题分析和设计56
- 2.5.2人事记录类的实现57
- 2.5.3讨论62
- 本章总结63
- 练习64
- 第3章线性表66
- 3.1线性表的概念和表抽象数据类型66
- 3.1.1表的概念和性质66
- 3.1.2表抽象数据类型67
- 3.1.3线性表的实现:基本考虑69
- 3.2顺序表的实现69
- 3.2.1基本实现方式69
- 3.2.2顺序表基本操作的实现71
- 3.2.3顺序表的结构74
- 3.2.4Python的list76
- 3.2.5顺序表的简单总结78
- 3.3链接表79
- 3.3.1线性表的基本需要和链接表79
- 3.3.2单链表79
- 3.3.3单链表类的实现84
- 3.4链表的变形和操作88
- 3.4.1单链表的简单变形88
- 3.4.2循环单链表91
- 3.4.3双链表92
- 3.4.4两个链表操作95
- 3.4.5不同链表的简单总结98
- 3.5表的应用99
- 3.5.1Josephus问题和基于“数组”概念的解法99
- 3.5.2基于顺序表的解100
- 3.5.3基于循环单链表的解101
- 本章总结102
- 练习103
- 第4章字符串107
- 4.1字符集、字符串和字符串操作107
- 4.1.1字符串的相关概念107
- 4.1.2字符串抽象数据类型109
- 4.2字符串的实现109
- 4.2.1基本实现问题和技术109
- 4.2.2实际语言里的字符串110
- 4.2.3Python的字符串111
- 4.3字符串匹配(子串查找)112
- 4.3.1字符串匹配112
- 4.3.2串匹配和朴素匹配算法113
- 4.3.3无回溯串匹配算法(KMP算法)115
- 4.4字符串匹配问题119
- 4.4.1串匹配/搜索的不同需要120
- 4.4.2一种简化的正则表达式122
- 4.5Python正则表达式123
- 4.5.1概况124
- 4.5.2基本情况124
- 4.5.3主要操作125
- 4.5.4正则表达式的构造126
- 4.5.5正则表达式的使用132
- 本章总结132
- 练习133
- 第5章栈和队列135
- 5.1概述135
- 5.1.1栈、队列和数据使用顺序135
- 5.1.2应用环境136
- 5.2栈:概念和实现136
- 5.2.1栈抽象数据类型137
- 5.2.2栈的顺序表实现137
- 5.2.3栈的链接表实现139
- 5.3栈的应用140
- 5.3.1简单应用:括号匹配问题140
- 5.3.2表达式的表示、计算和变换142
- 5.3.3栈与递归149
- 5.4队列155
- 5.4.1队列抽象数据类型155
- 5.4.2队列的链接表实现155
- 5.4.3队列的顺序表实现156
- 5.4.4队列的list实现158
- 5.4.5队列的应用160
- 5.5迷宫求解和状态空间搜索162
- 5.5.1迷宫求解:分析和设计162
- 5.5.2求解迷宫的算法164
- 5.5.3迷宫问题和搜索167
- 5.6几点补充171
- 5.6.1几种与栈或队列相关的结构171
- 5.6.2几个问题的讨论172
- 本章总结173
- 练习173
- 第6章二叉树和树176
- 6.1二叉树:概念和性质176
- 6.1.1概念和性质177
- 6.1.2抽象数据类型181
- 6.1.3遍历二叉树181
- 6.2二叉树的list实现183
- 6.2.1设计和实现183
- 6.2.2二叉树的简单应用:表达式树185
- 6.3优先队列188
- 6.3.1概念188
- 6.3.2基于线性表的实现189
- 6.3.3树形结构和堆191
- 6.3.4优先队列的堆实现192
- 6.3.5堆的应用:堆排序195
- 6.4应用:离散事件模拟196
- 6.4.1通用的模拟框架197
- 6.4.2海关检查站模拟系统198
- 6.5二叉树的类实现202
- 6.5.1二叉树结点类203
- 6.5.2遍历算法204
- 6.5.3二叉树类208
- 6.6哈夫曼树209
- 6.6.1哈夫曼树和哈夫曼算法209
- 6.6.2哈夫曼算法的实现210
- 6.6.3哈夫曼编码211
- 6.7树和树林212
- 6.7.1实例和表示213
- 6.7.2定义和相关概念213
- 6.7.3抽象数据类型和操作215
- 6.7.4树的实现216
- 6.7.5树的Python实现218
- 本章总结220
- 练习220
- 第7章图224
- 7.1概念、性质和实现224
- 7.1.1定义和图示224
- 7.1.2图的一些概念和性质225
- 7.1.3图抽象数据类型227
- 7.1.4图的表示和实现228
- 7.2图结构的Python实现231
- 7.2.1邻接矩阵实现231
- 7.2.2压缩的邻接矩阵(邻接表)实现233
- 7.2.3小结235
- 7.3基本图算法235
- 7.3.1图的遍历236
- 7.3.2生成树238
- 7.4*小生成树240
- 7.4.1*小生成树问题240
- 7.4.2Kruskal算法240
- 7.4.3Prim算法243
- *7.4.4Prim算法的改进246
- 7.4.5*小生成树问题247
- 7.5*短路径248
- 7.5.1*短路径问题248
- 7.5.2求解单源点*短路径的Dijkstra算法248
- 7.5.3求解任意顶点间*短路径的Floyd算法252
- 7.6AOV/AOE网及其算法255
- 7.6.1AOV网、拓扑排序和拓扑序列255
- 7.6.2拓扑排序算法257
- 7.6.3AOE网和关键路径258
- 7.6.4关键路径算法259
- 本章总结261
- 练习262
- 第8章字典和集合265
- 8.1数据存储、检索和字典265
- 8.1.1数据存储和检索265
- 8.1.2字典实现的问题267
- 8.2字典线性表实现269
- 8.2.1基本实现269
- 8.2.2有序线性表和二分法检索270
- 8.2.3字典线性表总结272
- 8.3散列和散列表273
- 8.3.1散列的思想和应用273
- 8.3.2散列函数275
- 8.3.3冲突的内消解:开地址技术277
- 8.3.4外消解技术280
- 8.3.5散列表的性质280
- 8.4集合282
- 8.4.1集合的概念、运算和抽象数据类型282
- 8.4.2集合的实现283
- 8.4.3特殊实现技术:位向量实现285
- 8.5Python的标准字典类dict和set286
- 8.6二叉排序树和字典287
- 8.6.1二叉排序树288
- 8.6.2**二叉排序树295
- 8.6.3一般情况的**二叉排序树297
- 8.7平衡二叉树302
- 8.7.1定义和性质302
- 8.7.2AVL树类303
- 8.7.3插入操作304
- 8.7.4相关问题310
- 8.8动态多分支排序树311
- 8.8.1多分支排序树311
- 8.8.2B树312
- 8.8.3B+树314
- 本章总结315
- 练习316
- 第9章排序319
- 9.1问题和性质319
- 9.1.1问题定义319
- 9.1.2排序算法320
- 9.2简单排序算法323
- 9.2.1插入排序323
- 9.2.2选择排序325
- 9.2.3交换排序327
- 9.3快速排序328
- 9.3.1快速排序的表实现329
- 9.3.2程序实现330
- 9.3.3复杂度331
- 9.3.4另一种简单实现332
- 9.4归并排序332
- 9.4.1顺序表的归并排序333
- 9.4.2归并算法的设计问题333
- 9.4.3归并排序函数定义333
- 9.4.4算法分析335
- 9.5其他排序方法335
- 9.5.1分配排序和基数排序335
- 9.5.2一些与排序有关的问题338
- 9.5.3Python系统的list排序339
- 本章总结340
- 练习342
- 参考文献344
数据结构的Python描述”这个小班,个人觉得邱老师的这本书很不错。如果读者已经熟悉python语言,尤其是内置的结构元组、list、dict、布景已被熟练地广泛使用回头看这本理论教科书,确实有一本“理论教材”应该严谨高度,而且相当经典。与其他同类教材相比,这是秋版“数据结构的Python版本”最具价值的地方。我给它90分。
本书没有在python语言内置结构的功能上花费篇幅/方法,然后推导出本课程的几个经典章节。相反,从成熟的传统理论框架中回顾python的实现和特点,有利于优化python的应用。因此,这本书是关于python的“效率取向”高级教材也合适。给定的原始代码不追求完整性,它最大程度地关注点对点“数据结构”核心内容,省略次要细节。他的叙事风格和角度对我个人非常有用与国外其他同类教材相比,也是本书最明显的特点。
说说缺点。这本书里的例子和练习一般都是用冷峻的方式来表达的。经典教材的写作风格不应该等同于机械化。在这方面,米勒的第二版优秀而生动、新颖的面向生活的示例表达有助于直观地理解数据结构。毕竟《数据结构》也是一门课程,一部教科书,表达的友好程度关系到教科书的亲和力和口碑(据介绍,北京大学地物系目前使用的是米勒的数据结构py教材)
总之,瑕不掩瑜。如果python已经知道了,并且想要细化数据结构的理论,那么这个版本就是优秀的。没有之一。