当前位置:首页 > 工业技术
数据结构与问题求解 C++版
数据结构与问题求解 C++版

数据结构与问题求解 C++版PDF电子书下载

工业技术

  • 电子书积分:20 积分如何计算积分?
  • 作 者:(美)Mark Allen Weiss著;张丽萍译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2005
  • ISBN:7302111669
  • 页数:738 页
图书介绍:本书从抽象思想、问题解决以及C++语言的角度介绍了数据结构和算法。本书深入讨论了数据结构的接口与实现。本书包含了C++的最新发展。
《数据结构与问题求解 C++版》目录

第1章 数组、指针和结构 1

1.1 什么是指针、数组和结构 1

目录 1

第一部分 对象和C++ 1

1.2.1 头等对象与次等对象的对比 2

1.2 数组和字符串 2

1.2.2 使用Vector 3

1.2.3 调整Vector大小 5

1.2.5 参数传递机制 7

1.2.4 push back大小与容量 7

1.2.8 标准库类型string 9

1.2.7 多维数组 9

1.2.6 常量基元数组 9

1.3 C++中的指针语法 10

1.4 动态内存管理 14

1.4.2 垃圾收集与delete 15

1.4.1 new运算符 15

1.4.3 过期指针、双重删除及其他 16

1.5 引用变量 17

1.6 结构 19

1.6.2 外部数据与内部数据、深复制与浅复制 21

1.6.1 指向结构的指针 21

1.6.3 非邻接链表:链表 23

学习目标 24

小结 24

常见错误 25

简答题 26

练习 26

网上资源 26

参考文献 28

编程项目 28

实践题 28

2.1 什么是面向对象编程 30

第2章 对象和类 30

2.2.1 类成员 31

2.2 类的基本语法 31

2.2.2 附加的构造函数语法和访问函数 33

2.2.3 接口和实现的分离 35

2.2.4 析构函数、复制构造函数和赋值运算符(=) 38

2.3 附加的C++类特性 43

2.2.5 默认的构造函数 43

2.3.1 调整后的构造函数中的初始化与赋值 47

2.3.2 类型转换 48

2.3.3 运算符重载 49

2.3.4 输入、输出和友元 52

2.4.1 避免使用友元 54

2.4 一些常用术语 54

2.4.3 整型类常量的陷阱 55

2.4.2 静态类成员 55

2.5 异常 56

2.6 String类 57

2.7 要点重述:进行了哪些调用?哪些采用了默认行为 65

2.8 组合 66

小结 67

学习目标 68

常见错误 69

简答题 70

练习 70

Internet资源 70

理论题 71

编程项目 72

参考文献 75

3.2 函数模板 76

3.1 模板的概念 76

第3章 模板 76

3.3 排序函数模板 78

3.4.1 MemoryCell模板 81

3.4 类模板 81

3.4.2 实现vector类模板 85

3.5 模板的模板:matrix类 87

3.5.1 数据成员、构造函数和基本附件 88

3.6.1 多平台参数 89

3.6 Fancy模板 89

3.5.2 operator[] 89

3.5.3 析构函数、复制赋值和复制构造函数 89

3.7 模板有关的bug 90

3.6.3 保留字typename 90

3.6.2 默认的模板参数 90

学习目标 91

小结 91

3.7.1 错误消息和改变的规则 91

3.7.2 模板匹配算法 91

3.7.3 模板中的嵌套类 91

3.7.4 类模板中的静态成员 91

Internet资源 92

常见错误 92

编程项目 93

实践题 93

练习 93

简答题 93

4.1 什么是继承 94

第4章 继承 94

4.2 继承的基本知识 97

4.2.2 构造函数和基类初始化 98

4.2.1 视性规则 98

4.2.3 添加成员 99

4.2.5 静态绑定和动态绑定 101

4.2.4 覆盖方法 101

4.2.6 默认的构造函数、复制构造函数、复制赋值运算符和析构函数 103

4.2.7 构造函数和析构函数virtual或非virtual 104

4.2.8 抽象方法和抽象类 105

4.3 例子:扩展Shape类 108

4.4 微妙的C++细节 112

4.4.1 参数的静态绑定 113

4.4.3 派生类方法隐藏基类方法 114

4.4.2 默认参数 114

4.4.4 覆盖方法的兼容返回类型 115

4.4.6 友元 116

4.4.5 私有继承 116

4.5 多重继承 117

4.4.7 值调用与多态并不混淆 117

小结 118

常见错误 119

学习目标 119

简答题 120

练习 120

Internet资源 120

参考文献 122

编程项目 122

实践题 122

5.1 模式的概念 123

第5章 设计模式 123

5.2 Functor(函数对象) 124

5.3.1 指针包装器 129

5.3 适配器和包装器 129

5.3.2 常数引用包装器 134

5.3.3 适配器更改接口 135

5.4 迭代器 136

5.4.1 迭代器设计1 137

5.4.3 基于继承的迭代器和factory 139

5.4.2 迭代器设计2 139

5.6 观察者 144

5.5 合成(对) 144

学习目标 148

小结 148

Internet资源 149

常见错误 149

实践题 150

理论题 150

练习 150

简答题 150

参考文献 152

编程项目 152

6.1 什么是算法分析 153

第6章 算法分析 153

第二部分 算法和构建代码块 153

6.2 算法运行时间的例子 156

6.3 最大连续子数列和问题 157

6.3.1 直观的O(N3)算法 158

6.3.2 改进的O(N2)算法 160

6.3.3 线性算法 161

6.4 一般的Big-Oh规则 164

6.5 对数 167

6.6.2 折半查找 169

6.6.1 顺序查找 169

6.6 静态查找问题 169

6.6.3 插值查找 172

6.7 算法分析的检验 173

学习目标 174

小结 174

6.8 Big-Oh分析的限制 174

Internet资源 175

常见错误 175

简答题 176

练习 176

理论题 177

编程项目 179

实践题 179

参考文献 180

7.1 简介 182

第7章 标准模板库 182

7.2 堆栈和队列 183

7.2.1 堆栈 184

7.2.2 堆栈和计算机语言 185

7.2.3 队列 186

7.3.1 容器 187

7.3 容器和迭代器 187

7.3.2 迭代器 188

7.4.1 STL函数对象 189

7.4 STL算法 189

7.4.2 二分查找法 191

7.5 实现带有迭代器的vector 193

7.4.3 排序 193

7.6.1 list类 195

7.6 顺序表和链表 195

7.6.2 堆栈和队列 196

7.7 集合 197

7.8 映射 199

7.9 优先队列 200

小结 203

常见错误 204

学习目标 204

理论题 205

简答题 205

Internet资源 205

练习 205

编程项目 206

实践题 206

参考文献 208

8.1 递归的概念 209

第8章 递归 209

8.2 背景知识:数学归纳法 210

8.3 基本递归 212

8.3.1 以任意基数打印数字 213

8.3.2 递归算法有效的原因 215

8.3.3 递归算法的作用原理 216

8.3.4 递归不宜太多 217

8.3.5 树 218

8.3.6 附加例子 219

8.4.1 模运算 223

8.4 数值应用 223

8.4.2 模幂运算 224

8.4.3 最大公约数和乘法逆元素 225

8.4.4 RSA密码系统 228

8.5.1 最大邻近子序列和问题 230

8.5 分治算法 230

8.5.2 基本分治递归分析 233

8.5.3 分治法运行时间的一般上限 235

8.6 动态规划 237

8.7 回溯法 241

学习目标 244

小结 244

Internet资源 245

常见错误 245

理论题 246

简答题 246

练习 246

实践题 247

编程项目 248

参考文献 249

9.1 排序为何重要 250

第9章 排序算法 250

9.2 预备知识 251

9.3 插入排序和其他简单排序的分析 252

9.4 希尔排序 254

9.5 归并排序 257

9.5.1 排过序的数组的线性时间合并 257

9.5.2 归并排序算法 259

9.6.1 快速排序算法 261

9.6 快速排序 261

9.6.2 快速排序的分析 263

9.6.3 支点的选择 265

9.6.4 分组策略 267

9.6.5 同支点相等的键 268

9.6.6 中值划分 269

9.6.8 C++快速排序例程 270

9.6.7 小数组 270

9.7 排序选择 272

9.8 排序的下限 274

9.9.1 使用指针将Comparable副本数减少为2N 275

9.9 间接排序 275

9.9.2 避免附加数组 276

小结 278

Internet资源 279

常见错误 279

学习目标 279

理论题 280

简答题 280

练习 280

实践题 281

编程项目 282

参考文献 283

10.1 为什么我们需要随机数 285

第10章 随机 285

10.2 随机数生成器 286

10.3 非均匀随机数 290

10.4 生成随机排列 291

10.5 随机算法 293

10.6 随机素数测试 295

常见错误 298

学习目标 298

小结 298

理论题 299

简答题 299

Internet资源 299

练习 299

编程项目 300

实践题 300

参考文献 301

11.1 单词查找拼图 302

第11章 娱乐与游戏 302

第三部分 应用程序 302

11.1.1 理论 303

11.1.2 C++实现 304

11.2.1 α-β修剪 309

11.2 Tic-Tac-Toe游戏 309

11.2.2 变换表 312

小结 316

11.2.3 计算机国际象棋 316

理论题 317

简答题 317

学习目标 317

常见错误 317

Internet资源 317

练习 317

编程项目 318

实践题 318

参考文献 319

12.1.1 基本算法 320

12.1 对称符号检查器 320

第12章 堆栈和编译器 320

12.1.2 实现 321

12.2.1 后缀自动机 330

12.2 简单计算器 330

12.2.2 中缀到后缀的转换 332

12.2.3 实现 333

12.2.4 表达式树 341

Internet资源 343

常见错误 343

小结 343

学习目标 343

实践题 344

理论题 344

练习 344

简答题 344

参考文献 345

编程项目 345

13.1 文件压缩 346

第13章 实用工具 346

13.1.1 前缀码 347

13.1.2 霍夫曼算法 348

13.1.3 实现 350

13.2.2 C++实现 366

13.2.1 基本概念 366

13.2 交叉引用生成程序 366

学习目标 370

小结 370

理论题 371

简答题 371

常见错误 371

Internet资源 371

练习 371

编程项目 372

实践题 372

参考文献 373

14.1 Josephus问题 375

第14章 仿真 375

14.1.2 一个更有效的算法 376

14.1.1 简单的解决方案 376

14.2.1 基本思想 380

14.2 事件驱动仿真 380

14.2.2 实例:调制解调器库仿真 381

学习目标 388

小结 388

理论题 389

简答题 389

常见错误 389

Internet资源 389

练习 389

编程项目 390

实践题 390

15.1 定义 391

第15章 图和路径 391

15.2.1 理论 403

15.2 无权最短路径问题 403

15.2.2 C++实现 406

15.3.1 理论:迪杰斯特拉算法 407

15.3 正的有权最短路径问题 407

15.3.2 C++实现 410

15.4.1 理论 412

15.4 负的有权最短路径问题 412

15.4.2 C++实现 413

15.5 无环图的路径问题 414

15.5.1 拓扑排序 415

15.5.2 无环最短路径算法的理论 416

15.5.3 C++实现 417

15.5.4 应用:关键路径分析 419

小结 421

常见错误 422

学习目标 422

理论证明 423

简答题 423

Internet资源 423

练习 423

实践题 424

编程项目 425

参考文献 426

16.1.1 堆栈 427

16.1 动态数组实现 427

第四部分 实现 427

第16章 堆栈和队列 427

16.1.2 队列 431

16.2.1 堆栈 436

16.2 链表实现 436

16.2.2 队列 441

16.3 两种方法的比较 444

16.4 STL堆栈和队列适配器 445

16.5 双头队列 446

学习目标 447

小结 447

简答题 448

练习 448

常见错误 448

Internet资源 448

编程项目 449

实践题 449

17.1 基本概念 450

第17章 链表 450

17.1.1 header节点 452

17.1.2 迭代器类 453

17.2 C++实现 454

17.3 双链表和循环链表 462

17.4 排序链表 464

17.5 实现STL链表类 466

小结 479

Internet资源 480

常见错误 480

学习目标 480

理论题 481

简答题 481

练习 481

实践题 482

编程项目 483

18.1.1 定义 485

18.1 一般树 485

第18章 树 485

18.1.2 实现 486

18.1.3 应用:文件系统 487

18.2 二叉树 490

18.3 递归和树 496

18.4 树遍历:迭代器类 499

18.4.1 后序遍历 502

18.4.2 中序遍历 506

18.4.3 前序遍历 508

18.4.4 层序遍历 509

小结 511

常见错误 512

Internet资源 512

学习目标 512

简答题 513

练习 513

编程项目 514

实践题 514

理论题 514

19.1 基本概念 516

第19章 二叉查找树 516

19.1.1 操作 517

19.1.2 C++实现 518

C++实现 526

19.2 顺序统计 526

19.3 分析二叉查找树操作 530

19.4 AVL树 533

19.4.1 属性 534

19.4.2 单旋转 536

19.4.3 旋转 538

19.4.4 AVL插入总结 540

19.5.1 自底向上插入 541

19.5 红—黑树 541

19.5.2 自项向下红—黑树 543

19.5.3 C++实现 545

19.5.4 自顶往下删除 551

19.6 AA—树 553

19.6.1 插入 554

19.6.2 删除 556

19.6.3 C++实现 557

19.7 实现STL set类和map类 561

19.8 B树 575

小结 580

常见错误 581

学习目标 581

简答题 582

练习 582

Internet资源 582

实践题 583

理论题 583

参考文献 584

编程项目 584

20.1 基本概念 587

第20章 散列表 587

20.2 散列函数 588

20.3 线形探测法 590

20.3.1 线性探测法的简单分析(naive analysis) 591

20.3.2 实际情况:原始集聚 592

20.3.3 查找运算分析 593

20.4 二次探测法 594

20.4.1 C++实现 598

20.5 分离链接法 603

20.4.2 二次探测法分析 603

20.7 散列化应用程序 604

20.6 散列表与二叉查找树 604

学习目标 605

小结 605

简答题 606

练习 606

常见错误 606

Internet资源 606

实践题 607

参考文献 608

编程项目 608

21.1 基本思想 610

第21章 优先级队列:二叉堆 610

21.1.1 结构属性 611

21.1.2 堆顺序属性 612

21.1.3 允许的操作 613

21.2.1 insert操作 615

21.2 基本操作的实现 615

21.2.2 deleteMin操作 616

21.3 buildHeap操作:线性时间的堆构造函数 619

21.4 STL priority_queue实现 622

21.6 内部排序:堆排序 625

21.5 高级操作:decreaseKey和merge 625

21.7.2 外部排序模型 628

21.7.1 我们为什么需要新的算法 628

21.7 外部排序 628

21.7.3 简单的算法 629

21.7.4 多路归并 630

21.7.5 多相归并 631

21.7.6 置换选择 632

学习目标 634

小结 634

理论题 635

简答题 635

常见错误 635

Internet资源 635

练习 635

编程项目 637

实践题 637

参考文献 638

22.1 自我调整和摊销分析 639

第22章 伸展树 639

第五部分 高级数据结构 639

22.1.1 摊销时间限制 640

22.1.2 简单的自我调整策略 641

22.2 基本的自底往上伸展树 642

22.3 基本伸展树操作 644

22.4 自底往上伸展树分析 645

22.5 自顶往下伸展树 649

22.6 实现自项往下伸展树 652

22.7 伸展树与其他查找树的比较 657

常见错误 658

学习目标 658

小结 658

理论题 659

简答题 659

Internet资源 659

练习 659

参考文献 660

编程项目 660

实践题 660

23.1.1 合并是基础 661

23.1 偏斜堆 661

第23章 合并优先级队列 661

23.1.3 偏斜堆:简单修改 662

23.1.2 简化的堆排序树合并 662

23.1.4 偏斜堆分析 663

23.2 对偶堆 665

23.2.1 对偶堆的操作 666

23.2.2 对偶堆的实现 668

23.2.3 应用:Dijkstra最短加权路径算法 674

常见错误 676

学习目标 676

小结 676

理论题 677

简答题 677

Internet资源 677

练习 677

参考文献 678

编程项目 678

实践题 678

24.2 动态等价和两个应用 680

24.1 等价关系 680

第24章 不相交集类 680

24.2.1 应用:生成迷宫 681

24.2.2 应用:最小伸展树 684

24.2.3 应用:最近共同祖先问题 686

24.3 快速查找算法 689

24.4 快速合并算法 690

24.4.1 巧妙的合并算法 691

24.4.2 路径压缩 693

24.5 C++实现 694

24.6 针对按秩合并与路径压缩的最坏情形 695

合并/查找算法分析 696

学习目标 701

小结 701

简答题 702

练习 702

常见错误 702

Internet资源 702

编程项目 703

实践题 703

理论题 703

参考文献 704

A.2.1 自增运算符与自减运算符 706

A.2 不常见的C++运算符 706

附录 706

附录A C++相关信息 706

A.1 没有编译器实现该标准 706

A.2.2 类型转换 707

A.2.3 按位运算符 708

A.4 输入和输出 710

A.3 命令参数 710

A.2.4 条件运算符 710

A.4.1 基本的流操作 711

A.4.3 字符串流 714

A.4.2 顺序文件 714

A.5 名字空间 716

常见错误 717

A.6 C++新特性 717

附录B 运算符 719

C.2 〈limits.h〉和〈climits〉中声明的常量 720

C.1 〈ctype.h〉和〈cctype〉中声明的例程 720

附录C 某些库例程 720

C.4 〈stdlib.h〉和〈cstdlib〉中声明的例程 721

C.3 〈math.h〉和〈cmath〉中声明的例程 721

D.1.1 C++实现:数组名称是一个指针 723

D.1 基元数组 723

附录D C++中的基元数组 723

D.1.3 char*类型、const指针和常量字符串 726

D.1.2 多维数组 726

D.2 动态数组分配:new[]和delete[] 729

D.3 指针算术运算、指针跳和基本迭代 733

D.3.2 指针算术的含意 734

D.3.1 *、&和[]优先级的含意 734

D.3.3 指针跳例子 736

D.3.4 使用指针跳的意义 737

Internet资源 738

常见错误 738

返回顶部