《数据结构 Python语言描述》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:(美)兰伯特(Kenneth A.Lambert)著;李军译
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2018
  • ISBN:7115464618
  • 页数:302 页
图书介绍:本书面向计算机专业的学生、爱好者和从业人员,是Python编程语言的面向对象设计、数据结构方面的一本入门图书。本书首先介绍了Python语言的基础知识和特性,然后结合各种数据结构,分别用Python进行了剖析和实现。本书涉及到多态和继承等主题,以及集合接口的多种实现,空间和时间代价的分析,以及各种不同的集合的实现等等。每章最后,还给出了练习,帮助读者巩固和思考。

第1章 Python编程基础 1

1.1基本程序要素 1

1.1.1程序和模块 1

1.1.2 Python程序示例:猜数字 1

1.1.3编辑、编译并运行Python程序 2

1.1.4程序注释 3

1.1.5词法元素 3

1.1.6拼写和命名惯例 3

1.1.7语法元素 4

1.1.8字面值 4

1.1.9字符串字面值 4

1.1.10运算符和表达式 5

1.1.11函数调用 5

1.1.12 pRInt函数 5

1.1.13 input函数 5

1.1.14类型转换函数和混合模式运算 6

1.1.15 可选的和关键字函数参数 6

1.1.16变量和赋值语句 6

1.1.17 Python数据类型 7

1.1.18 import语句 7

1.1.19获取关于程序组件的帮助 7

1.2控制语句 8

1.2.1条件式语句 8

1.2.2使用if name__==“_main” 9

1.2.3循环语句 10

1.3字符串及其运算 10

1.3.1运算符 10

1.3.2格式化字符串以便输出 11

1.3.3对象和方法调用 13

1.4内建Python集合及其操作 13

1.4.1列表 14

1.4.2元组 14

1.4.3遍历序列 14

1.4.4字典 15

1.4.5搜索一个值 15

1.4.6对集合应用模式匹配 15

1.5编写新的函数 16

1.5.1函数定义 16

1.5.2递归函数 17

1.5.3嵌套的函数定义 19

1.5.4高阶函数 19

1.5.5使用lambda表达式创建匿名函数 20

1.6捕获异常 20

1.7文件及其操作 21

1.7.1文本文件的输出 22

1.7.2将数字写入到一个文本文件 22

1.7.3从文本文件读取文本 23

1.7.4从文件读取数字 24

1.7.5使用pickle读写对象 24

1.8创建新的类 25

1.9编程项目 28

第2章 集合概览 30

2.1集合类型 30

2.1.1线性集合 30

2.1.2层级集合 31

2.1.3图集合 31

2.1.4无序集合 31

2.1.5有序集合 31

2.1.6集合类型的分类 32

2.2集合上的操作 32

2.3集合的实现 34

2.4小结 35

2.5复习题 35

2.6编程项目 36

第3章 搜索、排序和复杂度分析 37

3.1评估算法的性能 37

3.1.1度量算法的运行时间 37

3.1.2统计指令 39

3.1.3度量算法所使用的内存 41

3.1.4练习3.1 41

3.2复杂度分析 41

3.2.1复杂度的阶 41

3.2.2大O表示法 43

3.2.3常量比例的作用 43

3.2.4练习3.2 43

3.3搜索算法 44

3.3.1搜索最小值 44

3.3.2顺序搜索一个列表 44

3.3.3最好情况、最坏情况和平均情况的性能 45

3.3.4有序列表的二叉搜索 45

3.3.5比较数据项 47

3.3.6练习3.3 48

3.4基本排序算法 48

3.4.1选择排序 48

3.4.2冒泡排序 49

3.4.3插入排序 50

3.4.4再谈最好情况、最坏情况和平均情况的性能 52

3.4.5练习3.4 52

3.5更快的排序 53

3.5.1快速排序简介 53

3.5.2合并排序 56

3.5.3练习3.5 59

3.6指数算法:递归式的Fibonacci 59

3.7案例学习:算法探查器 61

3.7.1需求 61

3.7.2分析 61

3.7.3设计 62

3.7.4实现(编写代码) 63

3.8小结 65

3.9复习题 66

3.10编程项目 67

第4章 数组和链表结构 69

4.1数组数据结构 69

4.1.1随机访问和连续内存 71

4.1.2静态内存和动态内存 72

4.1.3物理大小和逻辑大小 72

4.1.4练习4.1 73

4.2数组的操作 73

4.2.1增加数组的大小 73

4.2.2减小数组的大小 74

4.2.3在数组中插入一项 74

4.2.4从数组中删除一项 75

4.2.5复杂度权衡:时间、空间和数组 76

4.2.6练习4.2 76

4.3二维数组 77

4.3.1处理网格 77

4.3.2创建并初始化网格 77

4.3.3定义Grid类 78

4.3.4杂乱的网格和多维数组 79

4.3.5练习4.3 79

4.4链表结构 80

4.4.1单链表结构和双链表结构 80

4.4.2非连续性内存和节点 81

4.4.3定义一个单链表节点类 82

4.4.4使用单链表节点类 82

4.4.5练习4.4 84

4.5单链表结构上的操作 84

4.5.1遍历 84

4.5.2搜索 85

4.5.3替换 86

4.5.4在开始处插入 86

4.5.5在末尾插入 87

4.5.6从开始处删除 87

4.5.7从末尾删除 88

4.5.8在任何位置插入 89

4.5.9从任意位置删除 90

4.5.10复杂度权衡:时间、空间和单链表结构 91

4.5.11练习4.5 92

4.6链表的变体 92

4.6.1带有一个哑头节点的循环链表结构 92

4.6.2双链表结构 93

4.6.3练习4.6 95

4.7小结 95

4.8复习题 96

4.9编程项目 96

第5章 接口、实现和多态 98

5.1开发接口 98

5.1.1定义包接口 98

5.1.2指定参数和返回值 99

5.1.3构造方法和实现类 101

5.1.4先验条件、后验条件、异常和文档 101

5.1.5用Python编写接口 102

5.1.6练习5.1 103

5.2开发一个基于数组的实现 103

5.2.1选择并初始化数据结构 103

5.2.2先完成容易的方法 104

5.2.3完成迭代器 105

5.2.4完成使用迭代器的方法 106

5.2.5 in运算符和contains方法 106

5.2.6完成remove方法 107

5.2.7练习5.2 107

5.3开发一个基于链表的实现 107

5.3.1初始化数据结构 108

5.3.2完成迭代器 109

5.3.3完成clear和add方法 109

5.3.4完成remove方法 109

5.3.5练习5.3 110

5.4两个包实现的运行时性能 110

5.5测试两个包实现 111

5.6用UML图表示包资源 112

5.7小结 113

5.8复习题 113

5.9编程项目 114

第6章 继承和抽象类 115

6.1使用继承定制一个己有的类 115

6.1.1已有类的子类化 115

6.1.2再谈init方法 116

6.1.3添加新的contains方法 117

6.1.4修改已有的add方法 117

6.1.5 ArraySortedBag的运行时间性能 118

6.1.6 Python中的类层级 118

6.1.7练习6.1 119

6.2使用抽象类去除代码冗余性 119

6.2.1设计一个AbstractBag类 119

6.2.2重新编写AbstractBag中的init方法 120

6.2.3修改AbstractBag的子类 120

6.2.4将AbstractBag中的add方法泛化 121

6.3所有集合的一个抽象类 122

6.3.1将AbstractCollection整合到集合层级中 122

6.3.2在__eq__方法中使用两个迭代器 123

6.3.3练习6.2 124

6.4小结 124

6.5复习题 124

6.6编程项目 125

第7章 栈 127

7.1栈概览 127

7.2使用栈 128

7.2.1栈接口 128

7.2.2初始化一个栈 129

7.2.3示例应用程序:匹配括号 129

7.2.4练习7.1 131

7.3栈的3种应用 131

7.3.1计算算术表达式 131

7.3.2计算后缀表达式 132

7.3.3练习7.2 133

7.3.4将中缀表达式转换为后缀表达式 133

7.3.5练习7.3 135

7.3.6回溯算法 135

7.3.7内存管理 137

7.4栈的实现 138

7.4.1测试驱动程序 138

7.4.2将栈添加到集合层级中 139

7.4.3数组实现 140

7.4.4链表实现 141

7.4.5 AbstractStack类的作用 144

7.4.6两种实现的时间和空间分析 144

7.4.7练习7.4 145

7.5案例学习:计算后缀表达式 145

7.5.1要求 145

7.5.2分析 145

7.5.3设计 148

7.5.4实现 150

7.6小结 153

7.7复习题 153

7.8编程项目 154

第8章 队列 156

8.1队列概览 156

8.2队列接口及其应用 157

练习8.1 158

8.3队列的两个应用 159

8.3.1模拟 159

8.3.2轮询CPU调度 161

8.3.3练习8.2 161

8.4队列的实现 161

8.4.1队列的链表实现 161

8.4.2数组实现 163

8.4.3两种实现的时间和空间复杂度分析 164

8.4.4练习8.3 165

8.5案例学习:模拟超市排队结账 165

8.5.1要求 165

8.5.2分析 165

8.5.3用户界面 166

8.5.4类及其作用 166

8.6优先队列 171

练习8.4 175

8.7案例学习:急症室调度 175

8.7.1需求 175

8.7.2分析 175

8.7.3类 176

8.7.4设计和实现 177

8.8小结 179

8.9复习题 179

8.10编程项目 180

第9章 列表 182

9.1概览 182

9.2使用列表 183

9.2.1基于索引的操作 183

9.2.2基于内容的操作 183

9.2.3基于位置的操作 184

9.2.4列表的接口 187

9.2.5练习9.1 188

9.3列表的应用 188

9.3.1堆存储管理 188

9.3.2组织磁盘上的文件 189

9.3.3其他集合的实现 190

9.4列表实现 191

9.4.1 AbstractList类的角色 191

9.4.2基于数组的实现 192

9.4.3链表实现 194

9.4.4两种实现的时间和空间分析 196

9.4.5练习9.2 197

9.5实现列表迭代器 197

9.5.1列表迭代器的角色和作用 197

9.5.2设置和实例化一个列表迭代器类 198

9.5.3列表迭代器中的导航方法 199

9.5.4列表迭代器中的修改器方法 200

9.5.5链表列表的列表迭代器的设计 201

9.5.6列表迭代器实现的时间和空间分析 201

9.6案例学习:开发一个有序的列表 201

9.6.1要求 201

9.6.2分析 202

9.6.3设计 202

9.6.4实现(代码) 204

9.7小结 205

9.8复习题 205

9.9编程项目 206

第10章 树 208

10.1树的概览 208

10.1.1树的术语 208

10.1.2普通的树和二叉树 209

10.1.3树的递归定义 210

10.1.4练习10.1 210

10.2为什么要使用树 210

10.3二叉树的形状 211

练习10.2 213

10.4二叉树的3种常见应用 213

10.4.1堆 213

10.4.2二叉搜索树 214

10.4.3表达式树 215

10.4.4练习10.3 216

10.5二叉树的遍历 216

10.5.1前序遍历 216

10.5.2中序遍历 217

10.5.3后序遍历 217

10.5.4层序遍历 217

10.6开发二叉搜索树 217

10.6.1二叉搜索树接口 218

10.6.2链表实现的数据结构 219

10.6.3二叉搜索树的复杂度分析 223

10.6.4练习10.4 224

10.7递归的后代解析和编程语言 224

10.7.1语法简介 224

10.7.2在语言中识别、解析和解释句子 226

10.7.3词法分析和扫描器 226

10.7.4解析策略 227

10.8案例学习:解析和表达式树 227

10.8.1要求 227

10.8.2分析 228

10.8.3节点类的设计和实现 228

10.8.4解析器类的设计和实现 230

10.9二叉树的数组实现 231

练习10.5 232

10.10实现堆 232

练习10.6 234

10.11小结 234

10.12复习题 235

10.13编程项目 236

第11章 集和字典 238

11.1使用集 238

11.2 Python的set类 239

11.2.1集的一个示例会话 239

11.2.2集的应用 240

11.2.3集和包的关系 240

11.2.4集和字典的关系 240

11.2.5集的实现 240

11.2.6练习11.1 241

11.3集的基于数组和链表的实现 241

11.3.1 AbstractSet类 241

11.3.2 ArraySet类 242

11.4使用字典 243

11.5基于数组和基于链表的字典实现 244

11.5.1 Item类 244

11.5.2 AbstractDict类 245

11.5.3 ArrayDict类 246

11.5.4集和字典的基于数组和列表的实现的复杂度分析 247

11.5.5练习11.2 248

11.6哈希策略 248

11.6.1冲突和密度的关系 249

11.6.2非数字键的哈希 250

11.6.3线性探测 251

11.6.4二次探测 252

11.6.5链化 253

11.6.6复杂度分析 253

11.6.7练习11.3 254

11.7案例学习:探查哈希策略 254

11.7.1需求 255

11.7.2分析 255

11.7.3设计 256

11.8集的哈希实现 258

11.9字典的哈希实现 261

练习11.4 263

11.10有序的集和字典 263

11.11小结 264

11.12复习题 264

11.13编程项目 265

第12章 图 267

12.1图的术语 267

练习12.1 269

12.2为什么使用图 270

12.3图的表示 270

12.3.1相邻矩阵 270

12.3.2 邻接表 271

12.3.3两种表示的分析 272

12.3.4运行时间的进一步考虑 272

12.3.5练习12.2 273

12.4图的遍历 273

12.4.1泛型遍历算法 273

12.4.2广度优先遍历和深度优先遍历 274

12.4.3图区域 275

12.4.4练习12.3 276

12.5图中的树 276

12.5.1生成树和森林 276

12.5.2最小生成树 277

12.5.3最小生成树的算法 277

12.6拓扑排序 279

12.7最短路径问题 279

12.7.1 Dijkstra算法 280

12.7.2初始化步骤 280

12.7.3计算步骤 281

12.7.4无限的表示和用法 282

12.7.5分析 282

12.7.6练习12.4 282

12.7.7 Floyd算法 283

12.7.8分析 283

12.8开发一个图集合 284

12.8.1使用图集合的示例 284

12.8.2 LinkedDirected-Graph类 285

12.8.3 LinkedVertex类 288

12.8.4 LinkedEdge类 289

12.9案例学习:测试图算法 290

12.9.1需求 290

12.9.2分析 290

12.9.3 GraphDemoView类和GraphDemoModel类 291

12.9.4实现(代码) 292

12.10小结 295

12.11复习题 296

12.12编程项目 297

附录 供Python程序员使用的集合框架 299