C++数据结构原理与经典问题求解(C/C++开发专家)
分类: 图书,计算机与互联网,程序语言与软件开发,算法与数据结构,
品牌: 左飞
基本信息·出版社:电子工业出版社
·页码:531 页
·出版日期:2008年
·ISBN:7121073218/9787121073212
·条形码:9787121073212
·包装版本:1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:C/C++开发专家
产品信息有问题吗?请帮我们更新产品信息。
内容简介《C++数据结构原理与经典问题求解》是一部关于计算机科学与工程领域基础性核心课程——数据结构与算法的专著。全书以典型数据结构、程序设计方法及问题求解方法为研究对象,用C++面向对象程序设计语言作为描述语言,时刻突出对经典问题求解这一要旨,并将丰富的C++语言程序设计实践融入其中。全书采用“数据结构原理描述→面向对象实现→解决经典问题→STL介绍”的基本架构,既强调理论的完整性,又突出实例引导的驱动性,用经典问题和大量背景描述提高读者的阅读兴趣,从而使原本枯燥的理论变得妙趣横生。基于上述框架,《C++数据结构原理与经典问题求解》简要回顾了基本C++程序设计方法后,又全面系统地介绍了链表、队列、栈、树、图等基本数据结构。此外,《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.3 C++语言简介18
1.3.1 C++的产生与发展18
1.3.2 C++与面向对象思想20
1.3.3 C++中的类和对象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.1 STL简介94
2.5.2 STL构成95
2.5.3 STL的不同版本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.1 C++中的字符串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.3 Vigenere加密问题182
4.3.4 选美比赛问题184
4.4 游标类的设计与实现186
4.4.1 游标类的结构186
4.4.2 游标类的实现187
4.5 STL与链表191
4.5.1 STL中链表类的接口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.4 STL中的栈与队列222
5.4.1 STL中的stack222
5.4.2 STL中的queue224
5.4.3 STL中的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.1 STL中的vector317
7.6.2 STL中的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.2 AVL树403
9.2.1 AVL树的概念404
9.2.2 AVL树的旋转405
9.2.3 AVL树的实现410
9.3 红黑树418
9.3.1 红黑树的概念418
9.3.2 红黑树的操作421
9.3.3 红黑树的实现428
9.4 Trie树433
9.4.1 Trie树的概念433
9.4.2 Trie树的表示434
9.4.3 Trie树的实现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.6 STL中的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.2 Shaker排序514
11.4.3 快速排序517
11.5 归并排序522
11.6 计数排序526
11.7 本章小结531
参考文献533
……[看更多目录]
序言本书缘起
一家世界一流的IT公司给其面试者出了如下两道测试题。
1.一辆有7节车厢的列车在星期五下午18点17分离开车站,并以50 km/h的速度行驶。现在是周末,请问你要去哪里?
2.股票A目前的报价是100元。3个月后,这个价钱可能涨到120元,也可能跌到90元。如果现在给你一次机会允许你用110元钱在接下来的3个月内买这个股票,你将如何使用这110元钱。请将你的决策过程告诉我们。
无独有偶,许多世界顶级的软件公司都喜欢在面试时问一些考查应试者思维能力的问题,为什么呢?道理很简
文摘插图: