突然心血来潮,想弄个这样的历史记录版块,留个纪念吧
以前一直把书本当作催眠工具,近年来才有了看书的爱好,虽然大部分看的是电子书,不过这一发不可收拾啊,看书学习也成了我每天生活中必不可少的事了...
废话也不说了,切入正题...
杂七杂八的书籍也就算了,仅记录好的技术书籍,藉以留给走我这条路的后生们以借鉴。
First:
《C++编程——数据结构与程序设计方法》
这是游戏学院的老师推荐我的一本书,也是我学游戏来第一本全部看完的书,花了不少时间,挺厚的,900来页。
这本书从C++的基础讲起(略过了C的部分),用C++语言描述了一些基本的数据结构和算法,都是非常不错的算法描述,值得去深入研究。《数据结构》这门学科是每个程序员必须学好,不懂数据结构的程序员不能称作合格的程序员,学C++描述的数据结构推荐这本书籍。目前似乎已经绝版。可以看电子版。
相关链接:http://www.china-pub.com/13344
【内容简介】本书特点:
■ 本书所有程序源代码都以ANSI/ISO 标准C++和标准C++形式提供,并可以使用Microsoft Visual C++ 6.0,Borland C++ Builder 5 开发工具,或是 Metrowerks CodeWarrior来编译这些程序。
■ 每章后面的程序范例都是完整的程序代码。这些程序范例中包括输入、输出、问题分析和算法设计等具体步骤,并提供了完整的程序代码清单。
■ “小结”部分总结了每章的重要概念。
■ “练习”测试学生标识声明和语句正误的能力。
■ “编程练习”培养学生亲自动手编写C++程序的能力。
■ “注意”强调了各章节中重要概念的注意事项。
■ 每章中统一编号的例题通过相应代码来帮助读者理解程序设计的概念。
D. S. Malik
D.S. Malik现任Creighton大学数学与计算机科学系教授。他1985年获得Ohio大学博士学位。自从在Creighton大学任教以来,他一直在讲授计算机程序设计课程。D.S. Malik在抽象代数、模糊自动机理论及语言、模糊逻辑及应用和信息科学领域发表了超过45篇论文并出版了6本图书。
【作译者介绍】
本书提供作译者介绍
D.S. Malik现任Creighton大学数学与计算机科学系教授。他1985年获得Ohio大学博士学位。自从在Creighton大学任教以来,他一直在讲授计算机程序设计课程。D.S. Malik在抽象代数、模糊自动机理论及语言、模糊逻辑及应用和信息科学领域发表了超过45篇论文并出版了6本图书。
目录 第1章 计算机和程序设计语言概述
1.1 简介
1.2 计算机发展史简述
1.3 计算机系统的组成
1.3.1 硬件
1.3.2 软件
1.4 计算机语言
1.5 程序设计语言的发展
1.6 高级语言程序的处理过程
1.7 按问题分析—编码—执行循环的程序设计
1.8 面向对象程序设计
1.9 ANSI/ISO标准C++
1.10 小结
1.11 练习
第2章 C++基础
2.1 C++程序基础
2.2 数据类型
2.2.1 简单数据类型
2.2.2 浮点数据类型
2.2.3 字符串数据类型
2.3 算术运算符及其优先级
2.3.1 运算符优先级
2.4 表达式
2.4.1 混合表达式
2.4.2 类型转换(强制转换)
2.5 输入
2.5.1 给常量和变量分配内存
2.5.2 将数据存储到变量中
2.6 增量运算符和减量运算符
2.7 输出
2.8 预处理指令
2.8.1 cin和cout与名字空间
2.8.2 在程序中使用string数据类型
2.9 程序的风格和形式
2.9.1 main函数
2.9.2 语法
2.9.3 空格符的使用
2.9.4 分号、大括号和逗号的使用
2.9.5 语义规则
2.9.6 形式和风格
2.9.7 说明文档
2.10 其他赋值语句
2.11 程序范例:长度转换
2.12 程序范例:零钱换整
2.13 小结
2.14 练习
2.15 编程练习
第3章 输入/输出
3.1 I/O流和标准I/O设备
3.1.1 cin和析取操作符>>
3.2 在程序中使用预定义函数
3.2.1 cin和get函数
3.2.2 cin和ignore函数
3.2.3 putbaek函数和peek函数
3.2.4 I/O流变量和I/O函数间的点符号(.)
3.3 输入失败
3.3.1 clear函数
3.4 输出和格式化输出
3.4.1 setprecision控制符
3.4.2 fixed控制符
3.4.3 showpoint控制符
3.4.4 setw控制符
3.5 其他的格式输出
3.5.1 fill和setfill
3.5.2 left和right控制符
3.5.3 flush函数
3.5.4 输入/输出string类型数据
3.6 文件输入/输出
3.7 程序范例:电影票销售和慈善捐赠
3.8 程序范例:学生成绩
3.9 小结
3.10 练习
3.11 编程练习
第4章 控制结构I(选择)
4.1 控制结构
4.2 关系运算符
4.2.1 关系运算符和简单数据类型
4.2.2 关系运算符和string类型
4.3 逻辑运算符和逻辑表达式
4.3.1 运算符优先级
4.3.2 优化(短路)计算
4.3.3 int数据类型和逻辑(布尔)表达式
4.3.4 bool数据类型和逻辑(布尔)表达式
4.4 选择:if和if…else
4.4.1 单路选择
4.4.2 双路选择
4.4.3 复合(块)语句
4.4.4 多重选择:嵌套if
4.4.5 if…else语句和系列辽语句的比较
4.4.6 使用伪代码进行程序开发、测试和调试程序
4.4.7 输人失败和if语句
4.4.8 恒等运算符(==)和赋值运算符(=)之间容易产生的混淆
4.4.9 条件运算符(?:)
4.5 switch结构
4.6 使用assert函数终止程序
4.7 程序范例:有线电视公司的计费程序
4.8 小结
4.9 练习
4.10 编程练习
第5章 控制结构II(循环)
5.1 为什么需要循环
5.2 while循环(重复)结构
5.2.1 情形1:计数器控制的while循环
5.2.2 情形2:结束标记控制的while循环
5.2.3 情形3:标志控制的while循环
5.2.4 情形4:EOF控制的while循环
5.2.5 eof函数
5.3 程序范例:活期账户余额
5.4 程序范例:Fibonacci数列
5.5 for循环(重复)结构
5.6 程序范例:数字分类
5.7 do…while循环(重复)结构
5.8 break和continue语句
5.9 嵌套控制结构
5.10 小结
5.11 练习
5.12 编程练习
第6章 用户自定义函数I
6.1 标准(预定义)函数
6.2 用户自定义函数
6.3 带有返回值的函数
6.3.1 return语句
6.3.2 函数原型
6.3.3 执行过程
6.4 程序范例:最大值
6.5 程序范例:有线电视公司的计费程序
6.6 小结
6.7 练习
6.8 编程练习
第7章 用户自定义函数II
7.1 无返回值函数
7.1.1 不带参数的无返回值函数
7.1.2 带有参数的无返回值函数
7.1.3 引用参数
7.2 值参数、引用参数和内存地址
7.3 引用参数和带有返回值的函数
7.4 标识符的作用域
7.5 全局变量的副作用
7.6 静态变量和自动变量
7.7 函数重载简介
7.8 带有默认参数的函数
7.9 程序范例:数字分类
7.10 程序范例:数据比较
7.11 小结
7.12 练习
7.13 编程练习
第8章 用户自定义简单数据类型、名字空间和string类型
8.1 枚举类型
8.1.1 定义变量
8.1.2 赋值
8.1.3 枚举数据类型上的运算
8.1.4 枚举数据类型和循环结构
8.1.5 枚举数据类型的输人/输出
8.1.6 函数和枚举类型
8.1.7 在定义枚举数据类型同时定义变量
8.1.8 匿名数据类型
8.1.9 typedef语句
8.2 程序范例:剪刀、石头、布的游戏
8.3 名字空间
8.4 string数据类型
8.4.1 其他string类型数据上的操作
8.5 程序范例:PigLatin字符串
8.6 小结
8.7 练习
8.8 编程练习
第9章 数组和字符串
9.1 数组
9.1.1 访问数组元素
9.1.2 处理一维数组
9.1.3 数组下标越界
9.1.4 在定义时初始化数组
9.1.5 数组处理中的一些限制
9.1.6 数组作为函数参数
9.1.7 整数类型和数组下标
9.2 C-string(字符数组)
9.2.1 字符串比较
9.2.2 输入输出字符串
9.2.3 字符串输入
9.2.4 字符串输出
9.2.5 在执行时指定输入输出文件
9.3 平行数组
9.4 二维数组和多维数组
9.4.1 访问数组元素
9.4.2 在定义时初始化二维数组
9.4.3 二维数组和枚举数据类型
9.4.4 处理二维数组
9.4.5 将二维数组作为参数传递给函数
9.4.6 字符串数组
9.4.7 定义二维数组的另一种方法
9.5 多维数组
9.6 程序范例:代码校验
9.7 程序范例:文本处理
9.8 小结
9.9 练习
9.10 编程练习
第10章 递归
10.1 递归定义
10.2 使用递归解决问题
10.2.1 Hanoi塔:分析
10.3 递归与迭代的比较
10.4 程序范例:将二进制数转化成十进制数
10.5 程序范例:将十进制数转化成二进制数
10.6 小结
10.7 练习
10.8 编程练习
第11章 结构
11.1 结构
11.1.1 访问结构成员
11.1.2 赋值
11.1.3 比较(关系运算)
11.1.4 输入/输出
11.1.5 结构变量和函数
11.1.6 数组和结构的比较
11.1.7 含数组的结构
11.1.8 结构数组
11.1.9 嵌套结构
11.2 程序范例:销售数据分析
11.3 小结
11.4 练习
11.5 编程练习
第12章 类和数据抽象
12.1 类
12.1.1 类的内建运算符
12.1.2 类的作用域
12.1.3 函数和类
12.1.4 成员函数的实现
12.1.5 类的公有成员和私有成员的顺序
12.1.6 构造函数
12.1.7 调用构造函数
12.1.8 对象数组和构造函数
12.1.9 析构函数
12.2 数据抽象、类和抽象数据类型
12.3 结构和类的比较
12.4 信息隐藏
12.5 可执行代码
12.6 程序范例:糖果自动销售机
12.7 小结
12.8 练习
12.9 编程练习
第13章 继承和组成
13.1 继承
13.1.1 基类成员函数的重定义
13.1.2 基类和派生类的构造函数
13.1.3 派生类的头文件
13.1.4 头文件的多重包含
13.1.5 C++流类
13.1.6 类的受保护成员
13.1.7 公有继承、受保护继承和私有继承
13.2 组成
13.3 面向对象程序设计(OOD)和面向对象编程(OOP)
13.3.1 标识类、对象和操作
13.4 程序范例:成绩单
13.5 小结
13.6 练习
13.7 编程练习
第14章 指针、类、表及虚函数
14.1 指针数据类型与指针变量
14.1.1 声明指针变量
14.2 取地址运算符
14.3 递引用运算符
14.4 类、结构及指针变量
14.5 初始化指针变量
14.6 动态变量
14.7 指针变量的运算
14.8 动态数组
14.9 浅拷贝、深拷贝及指针
14.10 类与指针:一些特性
14.10.1 析构函数
14.10.2 赋值运算符
14.10.3 拷贝构造函数
14.11 基于数组的表
14.11.1 拷贝构造函数
14.11.2 搜索
14.11.3 插入
14.11.4 删除
14.12 继承、指针和虚函数
14.12.1 类与虚析构函数
14.13 取地址运算符和类
14.14 小结
14.15 练习
14.16 编程练习
第15章 重载与模板
15.1 为什么需要重载运算符
15.2 运算符重载
15.2.1 运算符函数的语法
15.2.2 重载运算符:一些限制
15.2.3 this指针
15.2.4 类的友元函数
15.2.5 运算符函数作为成员函数和非成员函数
15.2.6 重载双目运算符
15.2.7 重载流插入和流析取运算符
15.2.8 重载赋值运算符
15.2.9 重载单目运算符
15.2.10 重载增量运算符和减量运算符
15.2.11 运算符重载:成员与非成员的比较
15.2.12 类和指针数据成员(再叙)
15.2.13 运算符重载:结束语
15.3 程序范例:clockType
15.4 程序范例:复数
15.5 重载数组下标运算符
15.6 程序范例:newString
15.7 函数重载
15.8 模板
15.8.1 函数模板
15.8.2 类模板
15.8.3 基于数组的表(再叙)
15.9 小结
15.10 练习
15.11 编程练习
第16章 链表
16.1 链表
16.1.1 链表:一些属性
16.1.2 插入及删除节点
16.1.3 创建链表
16.2 作为抽象数据类型的链表
16.3 有序链表
16.4 向链表
16.5 程序范例:影碟店
16.6 小结
16.7 练习
16.8 编程练习
第17章 栈和队列
17.1 栈
17.1.1 栈操作
17.2 使用数组实现栈
17.2.1 栈头文件
17.3 程序范例:最高GPA
17.4 使用链表实现栈
17.5 栈应用:后缀表达式计算器
17.6 消除递归:逆向打印链表的非递归算法
17.7 队列
17.7.1 队列操作
17.7.2 使用数组实现队列
17.7.3 用链表实现队列
17.7.4 从类linkedListType派生队列
17.8 队列应用:模拟
17.8.1 客户
17.8.2 服务者(器)
17.8.3 服务者(器)表
17.8.4 等待客户队列
17.8.5 主程序
17.9 小结
17.10 练习
17.11 编程练习
第18章 查找和排序算法
18.1 查找算法
18.1.1 顺序查找
18.1.2 有序表
18.1.3 折半查找
18.1.4 有序表的插入
18.2 渐近表示法
18.2.1 基于比较的查找算法的下界
18.3 排序算法
18.3.1 选择排序:基于数组表
18.3.2 分析:选择排序
18.4 插人排序:基于数组表
18.5 插入排序:基于链表
18.5.1 分析:插入排序
18.5.2 基于比较的排序算法的下界
18.6 快速排序:基于数组表
18.6.1 分析:快速排序
18.7 归并排序:基于链表
18.7.1 拆分
18.7.2 归并
18.7.3 分析:归并排序
18.8 程序范例:选举结果统计
18.9 小结
18.10 练习
18.11 编程练习
第19章 二叉树
19.1 二叉树简介
19.1.1 拷贝树
19.1.2 二叉树遍历
19.1.3 实现二叉树
19.2 二叉搜索树
19.2.1 二叉搜索树:分析
19.3 非递归二叉树遍历算法
19.3.1 非递归的中序遍历
19.3.2 非递归的前序遍历
19.3.3 非递归的后序遍历
19.4 二叉树遍历与函数参数
19.5 程序范例:影碟店
19.6 小结
19.7 练习
19.8 编程练习
第20章 图
20.1 简介
20.1.1 图的定义和符号
20.2 图的表示
20.2.1 邻接矩阵
20.2.2 邻接表
20.3 图操作
20.4 图遍历
20.4.1 深度优先算法
20.4.2 广度优先遍历
20.5 最短路径算法
20.5.1 最短路径
20.6 最小生成树
20.7 小结
20.8 练习
20.9 编程练习
第21章 标准模板库
21.1 STL的组成部分
21.1.1 容器类型
21.1.2 顺序容器
21.1.3 顺序容器:向量
21.1.4 所有容器公共的成员函数
21.1.5 顺序容器公共的成员函数
21.1.6 copy算法
21.1.7 顺序容器:双端队列
21.1.8 顺序容器:表
21.2 迭代器
21.2.1 迭代器的类型
21.2.2 流迭代器
21.3 关联容器
21.3.1 关联容器:集合和多重集合
21.3.2 声明集合和多重集合关联容器
21.3.3 集合/多重集合中元素的插入和删除
21.4 容器适配器
21.4.1 栈
21.4.2 队列
21.5 容器、相关的头文件以及迭代器
21.6 算法
21.6.1 STL算法分类
21.6.2 函数对象
21.6.3 插入迭代器
21.6.4 STL算法
21.6.5 函数fill和fill_n
21.6.6 函数generate和generate_n
21.6.7 函数find,find_if,find_end和find_first_of
21.6.8 函数remove,remove_if,remove_copy和remove_copy_if
21.6.9 函数replace,replace_if,replace_copy和replace_copy_if
21.6.10 函数swap,iter_swap和swap_ranges
21.6.11 函数search,search_n,sort和binary_search
21.6.12 函数adjacent_find,merge和inplace_merge
21.6.13 函数reverse,reverse_copy,rotate和rotate_copy
21.6.14 函数count,count_if,max_element,min_element和random_shuffle
21.6.15 函数for_each和transform
21.6.16 函数includes,seUntersection,set_union,set_difference和set_symmetric_difference
21.6.17 函数accumulate,adjacent_difference,inner_product和partial_sum
21.7 小结
21.8 练习
21.9 编程练习
附录A 保留字
附录B 运算符优先级
附录C 字符集
附录D 运算符重载
附录E ANSI/ISO标准C++和标准C++中头文件命名规则
附录F 头文件
附录G 系统中数据类型长度
附录H 参考文献
附录I 部分参考答案