标题：C++数据结构原理与经典问题求解
内容简介
《C++数据结构原理与经典问题求解》全书以典型数据结构、程序设计方法及问题求解方法为研究对象，用C++面向对象程序设计语言作为描述语言，时刻突出对经典问题求解这一要旨，并将丰富的C++语言程序设计实践融入其中。
全书采用“数据结构原理描述→面向对象实现→解决经典问题→STL介绍”的基本架构，既强调理论的完整性，又突出实例引导的驱动性，用经典问题和大量背景描述提高读者的阅读兴趣，从而使原本枯燥的理论变得妙趣横生。基于上述框架，《C++数据结构原理与经典问题求解》简要回顾了基本C++程序设计方法后，又全面系统地介绍了链表、队列、栈、树、图等基本数据结构。此外，《C++数据结构原理与经典问题求解》还提供了近百个算法、数十个经典问题和十余个综合问题的完整实现代码近万余行。
编辑推荐
内外兼修：精湛高超的C++编程技巧与级富魅力的算法合计艺术相得益彰
神形并重：生动的经典问题求解与丰富的数据结构原理娓娓道来
润物无声：编程技能的培养与抽象思维的训练浑然一体
由浅入深，通俗易懂，注重趣味性，避免枯燥说教
内容生动，结构合理，强调实践性，编程实例丰富
理念先进，方法为要，突出多角度，倡导正确思想
目录
第1章绪论1
1.1数据与数据结构2
1.1.1数据及其类型2
1.1.2数据结构简介4
1.2算法6
1.2.1算法的概念6
1.2.2算法的分析8
1.2.3算法的设计12
1.3C++语言简介18
1.3.1C++的产生与发展18
1.3.2C++与面向对象思想20
1.3.3C++中的类和对象23
1.4本章小结28
第2章C++编程基础29
2.1开始C++编程30
2.1.1输入输出30
2.1.2预处理38
2.1.3名字空间44
2.2深入的类编程50
2.2.1访问控制50
2.2.2初始化与清除53
2.2.3动态创建对象57
2.2.4友元函数60
2.2.5拷贝构造函数61
2.3丰富的C++特性65
2.3.1常量65
2.3.2函数重载68
2.3.3运算符重载71
2.3.4异常处理77
2.4代码重用机制79
2.4.1继承80
2.4.2多态87
2.4.3模板90
2.5标准模板库93
2.5.1STL简介94
2.5.2STL构成95
2.5.3STL的不同版本97
2.6本章小结98
第3章指针、数组与字符串99
3.1指针100
3.1.1指针的概念100
3.1.2指针的语法102
3.1.3函数与参数传递103
3.2数组108
3.2.1数组定义与初始化109
3.2.2数组与指针113
3.2.3数组的抽象数据类型116
3.2.4大整数乘法问题120
3.2.5荷兰国旗问题121
3.3字符串124
3.3.1C++中的字符串124
3.3.2字符串抽象数据类型126
3.3.3字符串的匹配算法128
3.3.4字符串指数问题141
3.4动态内存管理142
3.4.1关键词new和delete143
3.4.2避免内存错误146
3.5本章小结152
第4章链表153
4.1单向链表154
4.1.1单向链表的结构154
4.1.2单向链表类的实现155
4.1.3有序链表的合并162
4.1.4多项式加法问题163
4.2单向循环链表164
4.2.1单向循环链表的结构164
4.2.2单向循环链表类的实现166
4.2.3约瑟夫问题169
4.2.4魔术师发牌问题170
4.2.5拉丁方阵问题172
4.3双向循环链表173
4.3.1双向循环链表的结构173
4.3.2双向循环链表类的实现174
4.3.3Vigenere加密问题182
4.3.4选美比赛问题184
4.4游标类的设计与实现186
4.4.1游标类的结构186
4.4.2游标类的实现187
4.5STL与链表191
4.5.1STL中链表类的接口191
4.5.2遍历194
4.5.3元素的插入与删除196
4.6本章小结196
第5章栈与队列197
5.1栈198
5.1.1栈的结构198
5.1.2栈的实现199
5.1.3括号匹配问题203
5.1.4停车场模拟问题204
5.2队列208
5.2.1队列的结构208
5.2.2队列的实现210
5.2.3舞伴问题214
5.2.4杨辉三角形问题215
5.2.5游程编码问题216
5.3优先级队列218
5.3.1优先级队列的结构218
5.3.2优先级队列的实现220
5.4STL中的栈与队列222
5.4.1STL中的stack222
5.4.2STL中的queue224
5.4.3STL中的priority_queue226
5.5本章小结229
第6章递归231
6.1递归的概念232
6.1.1递归的定义232
6.1.2应用递归的原则235
6.1.3递归和非递归的转化240
6.2分治法243
6.2.1分治法简述243
6.2.2汉诺塔问题244
6.2.3传染病问题246
6.3回溯法250
6.3.1回溯法简述251
6.3.2迷宫问题251
6.3.3八皇后问题255
6.3.4骑士周游问题258
6.4本章小结265
第7章树267
7.1树的概念268
7.1.1树的定义268
7.1.2树的术语271
7.1.3树的抽象数据类型272
7.2二叉树273
7.2.1二叉树的定义273
7.2.2二叉树的性质275
7.2.3二叉树的实现276
7.2.4二叉树的遍历285
7.2.5二叉树的线索化289
7.3树与森林291
7.3.1树的存储表示291
7.3.2树的实现294
7.3.3树与森林的遍历298
7.3.4森林与二叉树的转换300
7.4霍夫曼树304
7.4.1霍夫曼树的概念304
7.4.2霍夫曼树的构造方法305
7.4.3霍夫曼编码及其实现307
7.5堆313
7.5.1堆的概念314
7.5.2堆的建立314
7.5.3堆的操作316
7.6基于STL实现树结构317
7.6.1STL中的vector317
7.6.2STL中的map321
7.7医院建模问题323
7.8本章小结328
第8章图329
8.1图的基本概念330
8.1.1图的定义330
8.1.2图的术语331
8.1.3图的运算334
8.1.4图的抽象数据类型336
8.2图的存储与表示337
8.2.1图的邻接矩阵表示337
8.2.2图的邻接表表示339
8.2.3两种表示法的比较342
8.3图的遍历342
8.3.1欧拉路径与欧拉回路343
8.3.2哈密尔顿路径与哈密尔顿回路345
8.3.3广度优先遍历346
8.3.4深度优先遍历349
8.4最短路径问题353
8.4.1固定起点最短路问题353
8.4.2非固定起点最短路问题355
8.4.3最短路径的动态规划解法358
8.4.4旅游交通路线问题364
8.5最小生成树372
8.5.1最小生成树的定义372
8.5.2克鲁斯卡尔算法373
8.5.3普里姆算法375
8.6经典问题举例379
8.6.1文字游戏问题380
8.6.2道路修建问题382
8.6.3回家路线问题385
8.6.4水塘计算问题387
8.6.5棍子还原问题389
8.7本章小结392
第9章树形搜索结构393
9.1二叉搜索树394
9.1.1二叉搜索树的概念394
9.1.2二叉搜索树的操作395
9.1.3二叉搜索树的实现397
9.1.4二叉搜索树的分析400
9.2AVL树403
9.2.1AVL树的概念404
9.2.2AVL树的旋转405
9.2.3AVL树的实现410
9.3红黑树418
9.3.1红黑树的概念418
9.3.2红黑树的操作421
9.3.3红黑树的实现428
9.4Trie树433
9.4.1Trie树的概念433
9.4.2Trie树的表示434
9.4.3Trie树的实现435
9.5本章小结439
第10章集合与字典441
10.1集合论基础442
10.1.1集合的概念442
10.1.2集合的运算444
10.2集合的实现445
10.2.1位向量集合445
10.2.2链表集合451
10.3字典460
10.3.1字典的概念461
10.3.2搜索运算463
10.4散列467
10.4.1散列的概念467
10.4.2散列函数469
10.4.3处理散列冲突471
10.4.4散列的应用475
10.5经典问题举例476
10.5.1拼写检查问题476
10.5.2无线网络问题485
10.5.3第K个数问题488
10.6STL中的set490
10.7本章小结493
第11章排序495
11.1排序问题概述496
11.1.1基本概念和定义496
11.1.2排序算法的分类497
11.1.3排序算法分析与选择497
11.2插入排序498
11.2.1直接插入排序498
11.2.2二分法插入排序501
11.2.3希尔排序503
11.3选择排序506
11.3.1直接选择排序506
11.3.2堆排序508
11.4交换排序512
11.4.1冒泡法排序512
11.4.2Shaker排序514
11.4.3快速排序517
11.5归并排序522
11.6计数排序526
11.7本章小结531
参考文献533
……