第一图书网

C++数据结构原理与经典问题求解

左飞 电子工业出版社
出版时间:

2008-10  

出版社:

电子工业出版社  

作者:

左飞  

页数:

531  

Tag标签:

无  

前言

  本书缘起  一家世界一流的IT公司给其面试者出了如下两道测试题。  1.一辆有7节车厢的列车在星期五下午18点17分离开车站,并以50 km/h的速度行驶。现在是周末,请问你要去哪里?  2.股票A目前的报价是100元。3个月后,这个价钱可能涨到120元,也可能跌到90元。如果现在给你一次机会允许你用110元钱在接下来的3个月内买这个股票,你将如何使用这110元钱。请将你的决策过程告诉我们。  无独有偶,许多世界顶级的软件公司都喜欢在面试时问一些考查应试者思维能力的问题,为什么呢?道理很简

内容概要

  本书是一部关于计算机科学与工程领域基础性核心课程——数据结构与算法的专著。全书以典型数据结构、程序设计方法及问题求解方法为研究对象,用C++面向对象程序设计语言作为描述语言,时刻突出对经典问题求解这一要旨,并将丰富的C++语言程序设计实践融入其中。  全书采用“数据结构原理描述→面向对象实现→解决经典问题→STL介绍”的基本架构,既强调理论的完整性,又突出实例引导的驱动性,用经典问题和大量背景描述提高读者的阅读兴趣,从而使原本枯燥的理论变得妙趣横生。基于上述框架,本书简要回顾了基本C++程序设计方法后,又全面系统地介绍了链表、队列、栈、树、图等基本数据结构。此外,本书还提供了近百个算法、数十个经典问题和十余个综合问题的完整实现代码近万余行。  本书内容实用,体例新颖,结构清晰,既可以作为大、中专院校在校师生相关课程的参考书,也可以作为信息学竞赛中数据结构方面的辅导用书。此外,本书也可供计算机科学与工程领域从业人员参考和查阅。

书籍目录

第1章 绪论 11.1 数据与数据结构 21.1.1 数据及其类型 21.1.2 数据结构简介 41.2 算法 61.2.1 算法的概念 61.2.2 算法的分析 81.2.3 算法的设计 121.3 C++语言简介 181.3.1 C++的产生与发展 181.3.2 C++与面向对象思想 201.3.3 C++中的类和对象 231.4 本章小结 28第2章 C++编程基础 292.1 开始C++编程 302.1.1 输入输出 302.1.2 预处理 382.1.3 名字空间 442.2 深入的类编程 502.2.1 访问控制 502.2.2 初始化与清除 532.2.3 动态创建对象 572.2.4 友元函数 602.2.5 拷贝构造函数 612.3 丰富的C++特性 652.3.1 常量 652.3.2 函数重载 682.3.3 运算符重载 712.3.4 异常处理 772.4 代码重用机制 792.4.1 继承 802.4.2 多态 872.4.3 模板 902.5 标准模板库 932.5.1 STL简介 942.5.2 STL构成 952.5.3 STL的不同版本 972.6 本章小结 98第3章 指针、数组与字符串 993.1 指针 1003.1.1 指针的概念 1003.1.2 指针的语法 1023.1.3 函数与参数传递 1033.2 数组 1083.2.1 数组定义与初始化 1093.2.2 数组与指针 1133.2.3 数组的抽象数据类型 1163.2.4 大整数乘法问题 1203.2.5 荷兰国旗问题 1213.3 字符串 1243.3.1 C++中的字符串 1243.3.2 字符串抽象数据类型 1263.3.3 字符串的匹配算法 1283.3.4 字符串指数问题 1413.4 动态内存管理 1423.4.1 关键词new和delete 1433.4.2 避免内存错误 1463.5 本章小结 152第4章 链表 1534.1 单向链表 1544.1.1 单向链表的结构 1544.1.2 单向链表类的实现 1554.1.3 有序链表的合并 1624.1.4 多项式加法问题 1634.2 单向循环链表 1644.2.1 单向循环链表的结构 1644.2.2 单向循环链表类的实现 1664.2.3 约瑟夫问题 1694.2.4 魔术师发牌问题 1704.2.5 拉丁方阵问题 1724.3 双向循环链表 1734.3.1 双向循环链表的结构 1734.3.2 双向循环链表类的实现 1744.3.3 Vigenere加密问题 1824.3.4 选美比赛问题 1844.4 游标类的设计与实现 1864.4.1 游标类的结构 1864.4.2 游标类的实现 1874.5 STL与链表 1914.5.1 STL中链表类的接口 1914.5.2 遍历 1944.5.3 元素的插入与删除 1964.6 本章小结 196第5章 栈与队列 1975.1 栈 1985.1.1 栈的结构 1985.1.2 栈的实现 1995.1.3 括号匹配问题 2035.1.4 停车场模拟问题 2045.2 队列 2085.2.1 队列的结构 2085.2.2 队列的实现 2105.2.3 舞伴问题 2145.2.4 杨辉三角形问题 2155.2.5 游程编码问题 2165.3 优先级队列 2185.3.1 优先级队列的结构 2185.3.2 优先级队列的实现 2205.4 STL中的栈与队列 2225.4.1 STL中的stack 2225.4.2 STL中的queue 2245.4.3 STL中的priority_queue 2265.5 本章小结 229第6章 递归 2316.1 递归的概念 2326.1.1 递归的定义 2326.1.2 应用递归的原则 2356.1.3 递归和非递归的转化 2406.2 分治法 2436.2.1 分治法简述 2436.2.2 汉诺塔问题 2446.2.3 传染病问题 2466.3 回溯法 2506.3.1 回溯法简述 2516.3.2 迷宫问题 2516.3.3 八皇后问题 2556.3.4 骑士周游问题 2586.4 本章小结 265第7章 树 2677.1 树的概念 2687.1.1 树的定义 2687.1.2 树的术语 2717.1.3 树的抽象数据类型 2727.2 二叉树 2737.2.1 二叉树的定义 2737.2.2 二叉树的性质 2757.2.3 二叉树的实现 2767.2.4 二叉树的遍历 2857.2.5 二叉树的线索化 2897.3 树与森林 2917.3.1 树的存储表示 2917.3.2 树的实现 2947.3.3 树与森林的遍历 2987.3.4 森林与二叉树的转换 3007.4 霍夫曼树 3047.4.1 霍夫曼树的概念 3047.4.2 霍夫曼树的构造方法 3057.4.3 霍夫曼编码及其实现 3077.5 堆 3137.5.1 堆的概念 3147.5.2 堆的建立 3147.5.3 堆的操作 3167.6 基于STL实现树结构 3177.6.1 STL中的vector 3177.6.2 STL中的map 3217.7 医院建模问题 3237.8 本章小结 328第8章 图 3298.1 图的基本概念 3308.1.1 图的定义 3308.1.2 图的术语 3318.1.3 图的运算 3348.1.4 图的抽象数据类型 3368.2 图的存储与表示 3378.2.1 图的邻接矩阵表示 3378.2.2 图的邻接表表示 3398.2.3 两种表示法的比较 3428.3 图的遍历 3428.3.1 欧拉路径与欧拉回路 3438.3.2 哈密尔顿路径与哈密尔顿回路 3458.3.3 广度优先遍历 3468.3.4 深度优先遍历 3498.4 最短路径问题 3538.4.1 固定起点最短路问题 3538.4.2 非固定起点最短路问题 3558.4.3 最短路径的动态规划解法 3588.4.4 旅游交通路线问题 3648.5 最小生成树 3728.5.1 最小生成树的定义 3728.5.2 克鲁斯卡尔算法 3738.5.3 普里姆算法 3758.6 经典问题举例 3798.6.1 文字游戏问题 3808.6.2 道路修建问题 3828.6.3 回家路线问题 3858.6.4 水塘计算问题 3878.6.5 棍子还原问题 3898.7 本章小结 392第9章 树形搜索结构 3939.1 二叉搜索树 3949.1.1 二叉搜索树的概念 3949.1.2 二叉搜索树的操作 3959.1.3 二叉搜索树的实现 3979.1.4 二叉搜索树的分析 4009.2 AVL树 4039.2.1 AVL树的概念 4049.2.2 AVL树的旋转 4059.2.3 AVL树的实现 4109.3 红黑树 4189.3.1 红黑树的概念 4189.3.2 红黑树的操作 4219.3.3 红黑树的实现 4289.4 Trie树 4339.4.1 Trie树的概念 4339.4.2 Trie树的表示 4349.4.3 Trie树的实现 4359.5 本章小结 439第10章 集合与字典 44110.1 集合论基础 44210.1.1 集合的概念 44210.1.2 集合的运算 44410.2 集合的实现 44510.2.1 位向量集合 44510.2.2 链表集合 45110.3 字典 46010.3.1 字典的概念 46110.3.2 搜索运算 46310.4 散列 46710.4.1 散列的概念 46710.4.2 散列函数 46910.4.3 处理散列冲突 47110.4.4 散列的应用 47510.5 经典问题举例 47610.5.1 拼写检查问题 47610.5.2 无线网络问题 48510.5.3 第K个数问题 48810.6 STL中的set 49010.7 本章小结 493第11章 排序 49511.1 排序问题概述 49611.1.1 基本概念和定义 49611.1.2 排序算法的分类 49711.1.3 排序算法分析与选择 49711.2 插入排序 49811.2.1 直接插入排序 49811.2.2 二分法插入排序 50111.2.3 希尔排序 50311.3 选择排序 50611.3.1 直接选择排序 50611.3.2 堆排序 50811.4 交换排序 51211.4.1 冒泡法排序 51211.4.2 Shaker排序 51411.4.3 快速排序 51711.5 归并排序 52211.6 计数排序 52611.7 本章小结 531参考文献 533


编辑推荐

  《C++数据结构原理与经典问题求解》内容实用,体例新颖,结构清晰,既可以作为大、中专院校在校师生相关课程的参考书,也可以作为信息学竞赛中数据结构方面的辅导用书。此外,《C++数据结构原理与经典问题求解》也可供计算机科学与工程领域从业人员参考和查阅。  《C++数据结构原理与经典问题求解》有以下特点:  内外兼修:精湛高超的C++编程技巧与级富魅力的算法合计艺术相得益彰;  神形并重:生动的经典问题求解与丰富的数据结构原理娓娓道来;  润物无声:编程技能的培养与抽象思维的训练浑然一体;  由浅入深,通俗易懂,注重趣味性,避免枯燥说教;  内容生动,结构合理,强调实践性,编程实例丰富;  理念先进,方法为要,突出多角度,倡导正确思想。

图书封面

图书标签Tags

广告

下载页面


C++数据结构原理与经典问题求解 PDF格式下载



  第四章的代码出现了几处严重错误,并不限于下面列出的:
  
  1.单链表中,莫名地出现了对成员cur的调用/返回,但却看不见对cur成员的定义。
  
  2.单向循环链表的应用中,魔术师发牌问题的求解,poker.getNextNode(), 函数在哪儿定义的? 翻看了半天上下文,猜测这里应该调用poker.getNext()。
  
  3.所有的模板类定义,均没有找到析构函数,即使是在使用了
  new StackNode<T>的情况下。
  
  网上查了一下:勘误表、源代码一个都找不到,书中所谓源代码网址:”http://books.vcer.net/data“,永远都是返回:“无法链接到”的错误;给作者发邮件,犹如石沉大海...
  
  请问电子工业出版社、请问左飞先生,能负责任点儿吗?
  对得住那些纸、墨吗?
  对得住读者的48块人民币吗?


相关图书