书籍详情

数据结构与算法分析-C++语言描述(第2版)

数据结构与算法分析-C++语言描述(第2版)

作者:奈霍夫

出版社:清华大学

出版时间:2006-11-01

ISBN:9787302138396

定价:¥98.00

购买这本书可以去
内容简介
  本书的第1版来自于对作者在长达20年的时间里教授一门数据结构入门课程(通常是CS2)的经验的总结。接着发展成为由Joel Adams和Larry Nyhoff编著的,被广泛使用的“C++:An Introduction to Computing”,一本起源于他们多年来以C++教授的第一门程序设计课程(CS1)的书籍。但是计算机科学教学目录随着教育方法和方法学的改变也改变了。为了跟上这些变化,这本入门性质的C++教材也经过了修订,最近推出了第3版。
作者简介
暂缺《数据结构与算法分析-C++语言描述(第2版)》作者简介
目录
第1章  软件开发    1
1.1  问题分析和需求规格说明    3
1.2  设计    5
1.2.1  自顶向下设计    5
1.2.2  面向对象设计    7
1.2.3  小规模设计    9
1.3  编码    15
1.4  测试、运行和调试    27
1.5  维护    34
1.6  本章小结    36
第2章  抽象数据类型入门    40
2.1  对ADT及其实现的第一瞥    40
2.2  C++的简单数据类型    41
2.2.1  整型数据    42
2.2.2  实型数据    46
2.2.3  字符数据    49
2.4.4  布尔数据    50
2.3  程序员定义的数据类型    53
2.3.1  Typedefs    53
2.3.2  枚举    53
2.3.3  类    55
2.4  指针    56
2.4.1  声明和初始化指针    57
2.4.2  基本指针操作    60
2.4.3  动态内存分配——new操作    64
2.4.4  关于引用形参的注释    65
2.5  本章小结    68
第3章  数据结构和抽象数据类型    73
3.1  数据结构,抽象数据类型和实现    73
3.2  静态数组    77
3.2.1  一维静态数组    78
3.2.2  下标运算    81
3.2.3  数组作为形参    82
3.2.4  越界错误    83
3.2.5  数组的问题    86
3.3  多维数组    88
3.3.1  二维数组    88
3.3.2  高维数组    89
3.3.3  数组的数组声明    91
3.3.4  多维数组作函数参数    95
3.4  动态数组    97
3.4.1  new操作——动态数组    98
3.4.2  指针的其他用法    110
3.5  C风格结构(可选)    112
指向结构的指针    116
3.6  过程式编程    117
过程式编程的例子    118
3.7  本章小结    123
第4章  OOP和ADT进阶——类    129
4.1  过程式编程vs.面向对象编程    129
4.2  类    130
4.2.1 “传统的”(C)结构和OOP
(C++)结构以及类之间的
区别    131
4.2.2  类声明    131
4.3  例子:用户定义的Time类的
第一个版本    135
4.3.1  为什么不使所有成员都
公有化    137
4.3.2  实现一个类    138
4.3.3  一些现象    141
4.4  类构造函数    142
4.5  其他类操作    150
4.5.1  复制操作——初始化和
赋值    150
4.5.2  访问函数和更动函数    151
4.5.3  重载运算符    153
4.5.4  重载输入/输出运算符    154
4.5.5  其他操作:前进和关系
操作    161
4.5.6  总结以及其他一些细节    163
4.5.7  指向类对象的指针    167
4.5.8  this指针    168
4.6  本章小结    171
第5章  标准C++输入/输出和字
符串类    176
5.1  C++标准I/O类    177
5.1.1  istream类    178
5.1.2  ostream类    182
5.1.3  文件I/O:ifstream和
ofstream类    186
5.1.4  I/O类层次    188
5.2  C++ String类型    192
5.2.1  C风格的字符串    193
5.2.2  一个字符串类    195
5.2.3  C++ String类    196
5.2.4  String流    204
5.3  案例学习:文本编辑    208
5.4  模式匹配介绍(可选)    216
5.5  数据加密介绍(可选)    219
5.5.1  数据加密标准(Data Encryption
Standard)    222
5.5.2  公共密钥加密(Public-Key
Encryption)    222
5.6  本章小结    224
第6章  列表    228
6.1  作为ADT的列表    229
设计和创建一个列表类    230
6.2  基于数组的列表实现    231
6.2.1  选择存储结构    231
6.2.2  实现操作    232
6.2.3  一个使用静态数组存储的
列表类    234
6.3  使用动态分配的基于数组实现的
列表    242
6.3.1  类中的动态分配——析构函数、复制构造函数和赋值运算符    246
6.3.2  最后一点    253
6.4  对链表的介绍    257
6.4.1  它们是什么    257
6.4.2  实现基本列表操作    258
6.4.3  小结    262
6.5  在C++中基于指针来实现链表    264
6.5.1  节点结构    264
6.5.2  链表实现中的数据成员    266
6.5.3  链表实现中的函数成员    267
6.6  基于数组的链表实现    271
6.6.1  节点结构    272
6.6.2  存储池管理    274
6.7  本章小结    276
第7章  栈    280
7.1  栈的介绍    281
7.2  设计和创建一个Stack类——
基于数组    285
7.2.1  选择存储结构    285
7.2.2  实现操作    288
7.2.3  实现pop操作的算法    290
7.2.4  完整的Stack类    290
7.2.5  使用动态数组存储栈元素296
7.2.6  前瞻    309
7.3  链式栈    312
7.3.1  选择存储结构    313
7.3.2  实现操作    314
7.3.3  完整的Stack类:链表
版本    317
7.4  栈在函数调用中的使用    324
7.5  案例学习:后缀(RPN)表示329
7.5.1  计算后缀表达式    330
7.5.2  将中缀表达式转换成后缀
表达式    331
7.6  本章小节    341
第8章  队列    345
8.1  队列入门    345
8.2  设计和创建一个Queue类——
基于数组    353
8.2.1  使用静态数组存储队列
元素    356
8.2.2  使用动态数组存储队列
元素    361
8.3  链式队列    365
8.3.1  一种自然的链表实现    365
8.3.2  使用循环链表    374
8.4  队列的应用:缓冲区和调度376
8.5  案例学习:信息中心仿真    379
8.5.1  问题分析和需求规格说明380
8.5.2  创建一个Simulation类    380
8.5.3  Time类和Call类    389
8.6  本章小结    390
第9章  ADT实现:模板和标准容器393
9.1  介绍:可重用性和通用性的发展394
9.1.1  从算法到算法    394
9.1.2  从数据到容器    396
9.2  函数通用性——重载和模板396
9.2.1  重载    397
9.2.2  函数模板    399
9.2.3  另一个例子:显示一个
数组    403
9.3  类通用性——模板    404
9.3.1  Typedef有什么错    404
9.3.2  类模板    405
9.3.3  Stack类模板的另一个版本417
9.3.4  对标准C++容器类模板的
快速一瞥    418
9.4  vector容器    420
9.4.1  定义vector对象    421
9.4.2  一些vector操作    423
9.4.3  内部实现一瞥——增加
容量    427
9.4.4  对迭代器的第一次探讨    430
9.4.5  一些牵涉到迭代器的vector
函数成员    433
9.4.6  综合比较:vector对数组434
9.5  案例学习:计算机系统登录统计438
9.6  多维vector(可选)    443
9.6.1  二维vector对象    443
9.6.2  二维vector操作    444
9.7  其他标准容器——deque、stack以及queue    447
9.7.1  STL的deque类模板    447
9.7.2  我们的stack类模板的一个
新(但是非必须的)版本    450
9.7.3  STL的stack适配器    452
9.7.4  STL的queue适配器    453
9.8  Bitset和Valarray(可选)454
9.8.1  Bitset    454
9.8.2  Valarray    456
9.8.3  Slics、Mask、以及间接
数组    458
9.9  本章小结    459
第10章  ADT实现--递归、算法分析
以及标准算法    464
10.1  递归    464
10.1.1  递归的例子    465
10.1.2  递归函数的编码    466
10.1.3  糟糕递归的例子:Fibonacci
数字    468
10.1.4  例子:折半查找    470
10.1.5  例子:回文检查程序    473
10.2  递归的例子:Hanoi塔;分析478
10.2.1  Hanoi塔    478
10.2.2  分析    481
10.3  实现递归    485
10.4  算法效率    489
10.5  C++中的标准算法    500
10.5.1  例:STL的sort算法    500
10.5.2  STL算法的例子    505
10.5.3  <numeric>库中的算法    506
10.5.4  例:花样滑冰评判    507
10.6  算法正确性证明(可选)    508
10.6.1  例:计算平均值    509
10.6.2  例:递归求幂函数    510
10.6.3  总结    511
10.7  本章小节    513
第11章  其他链表结构    519
11.1  单向链表的某些变种    519
11.1.1  带头节点的链表    519
11.1.2  循环链表    522
11.2  稀疏多项式的链式实现    526
11.3  双向链表和标准C++list    534
11.3.1  双向链表    534
11.3.2  标准list类模板    536
11.3.3  例:互联网地址    542
11.3.4  对C++中list的内部一瞥546
11.4  案例学习:长整数运算    551
11.4.1  问题    551
11.4.2  设计    551
11.4.3  实现    553
11.5  其他链列表    560
11.5.1  多序列表    560
11.5.2  稀疏矩阵    561
11.5.3  广义表    563
11.6  本章小结    566
第12章  二叉树和散列表    571
12.1  线性查找和折半查找的复习571
12.1.1  线性查找    572
12.1.2  折半查找    573
12.2  二叉树的介绍    576
12.2.1  树的定义    577
12.2.2  二叉树的一些例子    578
12.2.3  二叉树的数组表示    579
12.2.4  二叉树的链表表示    581
12.3  作为递归数据结构的二叉树583
12.4  二叉查找树    589
12.4.1  BST的实现    590
12.4.2  遍历BST    592
12.4.3  BST的查找    596
12.4.4  BST中的插入操作    599
12.4.5  从BST中删除一个节点    602
12.4.6  不平衡(Lopsidedness)
问题    612
12.5  案例学习:计算机登录验证616
12.5.1  问题    616
12.5.2  设计    616
12.5.3  编码    617
12.6  线索化二叉查找树(可选)620
12.7  散列表    624
12.7.1  散列函数    625
12.7.2  冲突处理策略    626
12.7.3  改进    627
12.8  本章小结    631
第13章  排序    636
13.1  某些计算时间为O(n2)的排序
方法    637
13.1.1  选择排序    637
13.1.2  交换排序    639
13.1.3  插入排序    641
13.1.4  排序算法的性能比较    643
13.1.5  间接排序    644
13.2  堆、堆排序和优先队列    647
13.2.1  堆    648
13.2.2  堆的基本操作    649
13.2.3  堆排序    652
13.2.4  STL中的堆算法    655
13.2.5  堆和优先队列    658
13.3  快速排序    662
13.3.1  拆分操作    663
13.3.2  快速排序    665
13.3.3  改进    668
13.4  归并排序    670
13.4.1  归并列表    670
13.4.2  折半归并排序    672
13.4.3  自然归并排序    674
13.5  基数排序(Radix Sort)677
13.6  本章小结    680
第14章  OOP和ADT    684
14.1  OOP和ADT的简要历史和概览684
14.1.1  封装性    685
14.1.2  继承性    686
14.1.3  多态性和动态联编    687
14.2  继承和面向对象设计    688
14.2.1  第1个例子:许可证    689
14.2.2  公有、私有和保护域    693
14.2.3  派生类的形式    693
14.2.4  类之间的Is-a、Has-a和
Uses-a关系    694
14.3  创建派生类    696
14.3.1  派生类构造函数    697
14.3.2  访问继承的数据成员    697
14.3.3  复用操作    698
14.3.4  例子:栈和有限栈    700
14.4  案例学习:工资    703
14.4.1  问题    703
14.4.2  设计    703
14.5  多态性、虚函数和ADT    711
14.5.1  为什么需要多态性:联编
问题    711
14.5.2  虚函数和动态联编    713
14.5.3  例1:使用句柄    716
14.5.4  例2:栈和有限栈    717
14.5.5  纯虚函数和抽象类    720
14.6  案例学习:异构数据结构722
14.6.1  虚函数的必要性    723
14.7  本章小结    726
第15章  树    729
15.1  案例学习:哈夫曼编码    729
15.1.1  变长码    730
15.1.2  立刻可解码性    730
15.1.3  哈夫曼编码    731
15.2  平衡树:AVL树    735
15.2.1  例子:州简称的BST    735
15.2.2  基本的重新平衡旋转
操作    743
15.3  2-3-4树、红-黑树、B-树和
其他树    748
15.3.1  2-3-4树    750
15.3.2  红-黑树    756
15.3.3  B-树    760
15.3.4  用二叉树来表示树和
森林    761
15.4  STL中的关联容器——
map(可选)    765
15.5  本章小结    771
第16章  图和有向图    773
16.1  有向图    773
16.1.1  邻接矩阵表示(Adjacency-
Matrix Representation)    775
16.1.2  邻接表表示(Adjacency-
List Representation)    776
16.2  搜索和遍历有向图    781
16.2.1  深度优先搜索    782
16.2.2  广度优先搜索    783
16.2.3  遍历和最短路经问题    785
16.2.4  NP完全性问题    794
16.3  图    796
16.3.1  邻接矩阵和邻接表表示797
16.3.2  边列表表示    798
16.3.3  连通性    799
16.4  本章小结    810
附录A  ASCII字符集    812
附录B  小测验答案    814
猜您喜欢

读书导航