图书介绍

数据结构 1000个问题与解答(C语言版)2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

数据结构 1000个问题与解答(C语言版)
  • (印)慕克吉著 著
  • 出版社: 北京:清华大学出版社
  • ISBN:9787302224846
  • 出版时间:2010
  • 标注页数:645页
  • 文件大小:27MB
  • 文件页数:673页
  • 主题词:数据结构;C语言-程序设计

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

数据结构 1000个问题与解答(C语言版)PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

第1章 数组1

1.0 引言1

1.1 如何初始化数组1

1.1.1 初始化:在声明数组时1

1.1.2 初始化:使用循环1

1.1.3 初始化:使用另一个数组的值2

1.1.4 初始化:使用特殊值2

1.2 如何使用下标遍历一维数组2

1.2.1 如何使用指针遍历一维数组3

1.2.2 如何使用下标遍历二维数组3

1.2.3 如何使用指针遍历二维数组3

1.3 如何操作数组元素3

1.4 如何把指定范围内的数据元素加起来5

1.5 如何把数组中偶数位置和奇数位置的元素加起来5

1.6 如何执行包含外部变量的运算6

1.6.1 如何乘以数组元素7

1.6.2 如何仅仅把数组中的偶数元素加起来7

1.6.3 如何仅仅把数组中的奇数元素加起来7

1.6.4 如何把一个元素加到数组每一个元素上7

1.6.5 如何从数组的每一个元素中减去某个元素8

1.6.6 如何将一个元素乘以数组的每一个元素8

1.6.7 如何让数组的每一个元素除以某个元素8

1.6.8 如何平方数组的每一个元素9

1.7 如何找出函数值9

1.8 如何求解人口统计学应用——一个人口统计的问题9

1.9 在什么地方使用三维数组10

1.10 如何删除数组中的某个特定数据项11

1.11 如何删除特定位置的数据项12

1.12 如何得到数组中的最大值14

1.13 如何得到数组中的最小值15

1.14 如何按字母顺序排序数组15

1.15 如何检查字符串是否是回文字符串16

1.16 如何搜索数组元素17

1.17 如何让数组元素唯一18

1.18 如何计算数组元素的平均值19

1.19 如何计算一组整数的加权平均值20

1.20 如何计算已排序数组元素的中值20

1.21 如何找出数组元素的众数21

1.22 如何得到数组元素的值域22

1.23 如何得到数组的标准差22

1.24 如何得到数组元素的方差24

1.25 如何使用牛顿前向差分内插法得到内插值24

1.26 如何使用拉格朗日内插公式插值25

1.27 如何得到X或Y的回归线27

1.28 如何得到简单聚合指数28

1.29 如何得到价格相关指数的简单平均值30

1.30 如何得到拉斯贝尔(Laspeyre)指数30

1.31 如何得到派许(Paasche)指数31

1.32 如何得到鲍莱(Bowley)指数31

1.33 如何得到费雪(Fisher)指数31

1.34 如何得到马歇尔-爱德华(Marshall-Edward)指数32

1.35 如何使用二维数组表示矩阵32

1.36 如何把两个3×3矩阵加起来33

1.37 如何做两个3×3矩阵的减法34

1.38 如何做两个矩阵的乘法34

1.39 如何使用矩阵乘法计算收入35

1.40 使用斯特拉森算法计算2×2矩阵的乘法,它仅需7次乘法和18次加法即可完成36

1.41 如何得到两个矩阵的Hadamard积37

1.42 如何得到两个矩阵的Kronecker积38

1.43 如何得到矩阵的转置矩阵39

1.44 如何得到方阵的逆矩阵40

1.45 如何得到矩阵的上三角矩阵42

1.46 如何得到严格上三角矩阵43

1.47 如何得到矩阵的下三角矩阵43

1.48 如何得到严格下三角矩阵44

1.49 如何用给定的行和列构造Toeplitz矩阵45

1.50 如何判断矩阵是否是对称矩阵45

1.51 将稀疏矩阵表示为数组46

1.51.1 如何把两个稀疏矩阵相加47

1.52 三维数组应用49

1.53 如何从函数中返回多个值50

1.54 如何克隆Java的字符串分词类51

1.55 二进制到十进制转换52

1.56 如何为股票交易设计一张图表53

1.57 如何得到HHI指数55

1.58 如何得到城市的基尼系数56

1.59 如何判断三个给定数字是否构成等差数列、等比数列或调和数列57

1.60 不同信号格式的动画58

1.61 一个著名的密码技术——密写术64

1.62 上述加密法的解密程序65

1.63 如何得到256级灰度图像的直方图66

1.64 如何把灰度图像转换为黑白图像/负片图像67

概念复习68

练习题69

编程题70

第2章 结构73

2.0 引言73

2.1 使用typedef73

2.2 访问结构元素74

2.3 Turbo C(DOS下)中一些内置的有用结构75

2.4 如何定义一个表示三维空间中点的结构76

2.5 如何使用点结构得到多边形的图心76

2.6 如何得到三维空间中两个点之间的距离77

2.7 如何得到任何正多边形的面积77

2.8 如何测试三个点的共线性78

2.9 如何检查三角形是否是等边三角形78

2.10 如何检查三角形是否是等腰三角形79

2.11 如何使用Point结构建立三角形模型79

2.12 如何检查三角形是否是直角三角形80

2.13 如何得到三角形是否是等边三角形80

2.14 如何使用三角形构建四面体模型81

2.15 如何使用Struct和Enum建立矩形模型82

2.16 如何使用Point建立梯形模型82

2.17 如何检查梯形是否是等腰梯形83

2.18 如何检查点是否位于三角形内部83

2.19 如何检查点是否位于矩形内部84

2.20 如何检查点是否位于圆内部85

2.21 如何检查两个圆是否相交85

2.22 如何检查两个圆是否相切86

2.23 如何以斜率方式建立直线模型86

2.24 如何以XY截距格式建立直线模型87

2.25 如何把XY截距形式的直线转换为斜率格式的直线87

2.26 如何把斜率格式的直线转换为XY截距形式的直线87

2.27 如何检查两条直线是否平行87

2.28 如何得到两条直线的交点88

2.29 如何得到圆上任一点的切线88

2.30 如何使用直线和点建立抛物线模型88

2.31 如何得到抛物线上任一点的切线89

2.32 如何得到抛物线上任一点的法线89

2.33 如何建立椭圆模型89

2.34 如何计算椭圆的面积90

2.35 如何得到椭圆上任何一点的切线90

2.36 如何得到椭圆上任何一点的法线90

2.37 如何用结构建立棱柱建模91

2.38 如何建立圆柱的模型91

2.39 如何得到圆柱的表面积92

2.40 如何建立圆锥的模型92

2.41 如何得到圆锥的面积92

2.42 如何得到由圆和点定义的圆柱的体积93

2.43 如何得到棱柱的面积93

2.44 如何检查点是否位于椭圆的内部94

2.45 如何检查点是否位于双曲线内部,假定给出了长轴或短轴94

2.46 如何建立菱形的模型95

2.47 如何得到菱形的面积95

2.48 如何以结构方式建立向量的模型95

2.49 如何编写向量加法的函数95

2.50 如何得到向量的加权和96

2.51 如何检查向量的加权和是否是仿射和97

2.52 如何编写一个得到两个向量积的函数97

2.53 如何编写一个得到两个向量向量积的函数98

2.54 如何编写一个向量标量乘法的函数98

2.55 如何得到三个向量的点积99

2.56 如何检测三个向量是否共面99

2.57 如何得到三个向量的向量积99

2.58 如何得到四个向量的标量积100

2.59 如何得到四个向量的向量积100

2.60 如何用结构建立复数模型100

2.61 如何在极坐标和直角坐标之间转换101

2.62 如何把复数加起来102

2.63 如何用一个复数减去另一个复数102

2.64 如何乘两个复数103

2.65 使用极坐标复数结构验证棣莫弗定理103

2.66 如何使用结构编写一个电话本模拟程序103

2.67 如何以结构组合方式建立银行账户模型107

2.68 如何使用结构编写一个POS(销售点)模拟程序109

概念复习123

练习题123

编程题124

第3章 链表126

3.0 引言126

3.1 单向链表126

3.2 双向链表128

3.3 循环链表129

3.4 你如何处理链表数组129

3.5 在C和预测器重的链表130

3.6 本章的链表函数理念130

3.7 如何在单向链表的末尾插入一个结点131

3.8 如何在单向链表首部插入结点132

3.9 如何得到单向链表的第一个元素133

3.10 如何得到单向链表的最后一个元素134

3.11 如何遍历单向链表134

3.12 如何计数单向链表中结点的个数134

3.13 如何得到单向链表中数据项的频率135

3.14 如何搜索单向链表中特定数据项135

3.15 如何得到单向链表中特定结点的地址136

3.16 如何在单向链表的特定位置插入结点136

3.17 如何在单向链表特定元素之前插入一个结点137

3.18 如何显示单向链表的所有内容138

3.19 如何得到单向链表的最大元素138

3.20 如何得到单向链表的最小值139

3.21 如何使用给定值编辑特定结点的内容139

3.22 如何编写一个合并两个链表的函数140

3.23 如何编写一个将一个链表插入到另一个链表中的函数141

3.24 如何交换单向链表的首尾结点(即第一个结点和最后一个结点)142

3.25 如何对换除首尾结点之外的任何其他两个结点143

3.26 如何删除由下标数字给定的特定结点143

3.27 如何从链表中删除一个范围的元素144

3.28 如何从链表中隔一个元素删除一个元素145

3.29 如何让链表数据项唯一145

3.30 如何删除链表的第一个元素146

3.31 如何删除链表的最后一个元素146

3.32 链表和判定函数147

3.33 作为一个数据结构的多项式的属性和方法是什么148

3.34 如何使用单向链表表示多项式148

3.35 多项式工具箱149

3.36 如何在多项式上增加一个新的数据项150

3.37 如何把两个多项式相加并返回它们的和151

3.38 如何将两个多项式相乘151

3.39 如何得到多项式的微分151

3.40 如何计算多项式的积分152

3.41 如何计算给定值处多项式的值152

3.42 如何得到函数的定积分值152

3.43 如何显示多项式152

3.44 如何得到复合函数的值153

3.45 如何在多项式中添加一个新的数据项154

3.46 如何把两个三变量多项式相加155

3.47 如何把两个三变量多项式相乘155

3.48 如何计算多项式对x的微分155

3.49 如何计算多项式对y的微分156

3.50 如何计算多项式对z的微分156

3.51 如何计算多项式对x的积分,假定其他两个变量为常量156

3.52 如何计算多项式对y的积分,假定其他两个变量为常量157

3.53 如何计算多项式对z的积分,假定其他两个变量为常量157

3.54 当所有三个变量都变化时如何积分多项式157

3.55 如何对给定的x、y、z值计算多项式的值157

3.56 如何在给定区间内积分多项式158

3.57 多项式工具箱的一些应用158

3.58 如何得到三变量函数的卷积159

3.59 大数:链表的应用160

3.60 如何在链表中存储两个大数,之后把这两个大数相加并显示和161

3.61 数字信号处理162

3.61.1 如何使用链表建立数字信号的模型162

3.62 如何得到信号长度163

3.63 如何得到信号中给定振幅的位置163

3.64 如何在信号末尾添加一个新值164

3.65 如何在信号前部添加新值165

3.66 如何返回第一个信号结点指针165

3.67 如何返回最后一个信号结点指针166

3.68 如何在信号的特定位置插入结点166

3.69 如何显示数字信号166

3.70 如何得到第一个信号结点的振幅167

3.71 如何得到最后一个信号结点的振幅167

3.72 如何得到给定信号特定振幅的频率167

3.73 如何得到给定索引信号结点的地址168

3.74 如何得到特定点信号的振幅168

3.75 如何检查数字信号是否是偶信号168

3.76 如何检查数字信号是否是因果信号169

3.77 如何检查数字信号是否是反因果信号170

3.78 如何检查信号是否是非因果信号171

3.79 如何在单向循环链表末尾添加结点171

3.80 双向链表172

3.80.1 如何编写一个建立整型双向链表的模型172

3.81 如何在双向链表末尾添加一个数值172

3.82 如何在双向链表前部添加一个数值173

3.83 如何前进到双向链表的下一个结点173

3.84 如何前进到双向链表的前一个结点174

3.85 如何以前向方式显示双向链表174

3.86 如何以后向方式显示双向链表174

3.87 如何在链表的某个位置插入一个值174

3.88 如何在循环双向链表末尾添加一个值175

3.89 链表在生物化学上的应用176

3.89.1 使用链表表示DNA链176

3.90 如何被两个单DNA链混合到另一个DNA上178

3.91 如何把一个DNA溶合到一对链中179

3.92 如何模拟一个DNA链到另一个DNA链的链接180

3.93 如何使用锯齿数组表示稀疏矩阵181

3.94 如何在稀疏矩阵中添加一个数据项182

3.95 如何把一个锯齿行添加到稀疏矩阵的锯齿表示中182

3.96 如何从用户处接收稀疏矩阵的元素并创建链表的锯齿数组以空间高效方式表达该矩阵183

3.97 使用锯齿数组表示手写签名184

3.98 如何使用链表建立简单内容管理系统的模型185

3.99 如何使用链表建立工作流引擎系统的模型189

3.100 数组和链表的对比190

概念复习191

练习题192

编程题193

第4章 字符串194

4.0 引言194

4.1 C中有关字符串的一些关键事实194

4.2 C-风格字符串195

4.2.1 字符串初始化195

4.3 如何在声明时初始化195

4.4 如何使用用户定义值初始化字符串195

4.5 如何使用一个字符串初始化另一个字符串196

4.6 如何使用字符值初始化字符串196

4.7 如何使用ASCII值初始化字符串197

4.8 一些内置Turbo C字符串库函数简介197

4.8.1 得到字符串长度198

4.8.2 连接两个C-风格字符串198

4.8.3 比较两个字符串199

4.8.4 将字符串复制到另一个字符串200

4.8.5 将字符串改变为小写或大写202

4.9 设计使用这两个函数的实用工具202

4.9.1 纠正C/C++程序中错误的大小写(使用strlwr()202

4.10 用于更改文件中几个所选缩略语大小写的工具(使用strupr())204

4.11 如何颠倒字符串205

4.12 如何使用一个字符设置字符串中的字符206

4.13 如何找到子串字符在另一个字符串中的第一次出现207

4.14 如何得到两个字符串开始不同的位置208

4.15 如何以内存高效方式创建字符串的副本209

4.16 如何将字符串拆分为符号210

4.17 你知道什么是字符串前缀吗211

4.18 你知道什么是字符串后缀吗212

4.19 你知道什么是字符串的子序列吗213

4.19.1 如何检查单词是否有某个前缀215

4.19.2 如何检查单词是否有给定的后缀215

4.19.3 如何接收一个使用空格分隔的单词字符串并以char*类型返回这些单词的链表217

4.19.4 如何计算句子中单词的总数218

4.19.5 如何在短语中用一个单词替换另一个单词218

4.19.6 如何从句子中删除给定单词的所有出现219

4.19.7 如何以换行方式显示文本220

4.19.8 如何演示文本的随机密码学加密221

4.19.9 如何解密使用上述函数加密的文本222

4.19.10 如何以字符链表形式表示字符串223

4.19.11 如何使用字符串的上述链表表示创建新的字符串223

4.19.12 如何显示链表表示的字符串224

4.19.13 如何从字符串中提取从一个下标开始、另一个下标结束的子串224

4.19.14 如何从给定字符串左部截掉指定个数的字符225

4.19.15 如何从给定字符串右部截掉指定个数的字符225

4.19.16 如何在字符串左部填充n个指定字符225

4.19.17 如何在字符串右部填充n个指定字符226

4.19.18 如何去除单词两边的空白226

4.19.19 如何使用指定字符和对齐方式填充字符串227

4.19.20 如何移除短语中的所有空格228

4.19.21 如何对给定的k提取字符串的所有k-gram228

4.19.22 如何检查字符串是否是有效的UPC代码229

4.20 如何检查字符串是否是有效的ISBN230

4.21 如何检查社会保险号(SIN)的有效性231

4.22 如何检查给定的信用卡号码是否有效232

4.23 如何将句子的大小写修改为正确的句子大小写238

4.24 如何切换句子中字母的大小写238

4.24.1 如何计算句子中给定单词的频率239

4.24.2 如何显示给定句子的单词直方图240

4.24.3 如何找到句子/短语/字符串中最常使用的单词241

4.24.4 如何检查一个单词/短语是否是另一个单词/短语的变位词241

4.25 如何得到给定单词的同音码244

4.25.1 如何使用单词的语音码检查两个单词是否发音相同246

练习题246

编程题247

第5章 递归248

5.0 引言248

5.1 递归的不同类型248

5.2 递归的陷阱248

5.3 斐波纳契数和黄金分割249

5.4 使用递归的随机数生成器252

5.5 如何使用von Numann中间平方法生成伪随机数(PRN)254

5.6 如何生成Ackermann函数257

5.7 什么是逆Ackermann函数257

5.8 如何对给定变量生成TAK函数257

5.9 使用递归求解非线性方程262

5.10 使用递归的模式生成271

5.11 如何编写一个递归函数生成帕斯卡三角形的数274

5.12 帕斯卡三角形和斐波纳契数之间的关系是什么275

5.13 如何编写一个递归函数得到Bell三角形的数。要接收两个数字,一个用于行,另一个用于列276

5.14 Bell数的应用277

5.15 如何编写一个递归函数生成Bernoulli三角形的数277

5.16 如何编写一个递归函数生成Catalan三角形的数278

5.17 生成Catalan数的递归关系是什么279

5.18 使用Catalan数求解欧拉多边形剖分问题280

5.19 DYCK路径和Catalan数280

5.20 投票问题和Catalan数281

5.21 如何编写一个递归函数生成Losanitsch三角形数281

5.22 如何编写递归函数生成Leibnitz Harmonic三角形数282

5.23 L-系统、递归以及更多分形287

5.24 使用递归的分形生成289

5.25 Koch曲线289

5.26 Koch雪花290

5.27 自然场景生成中的递归290

概念复习291

练习题292

编程题292

第6章 栈294

6.0 引言294

6.1 使用结构建立栈的模型294

6.2 如何初始化上述模型建立的栈294

6.3 如何从上述栈中弹出MRA元素296

6.4 如何显示栈顶元素296

6.5 如何交换栈顶的两个元素297

6.6 使用数组的方法大汇总297

6.7 使用链表建立栈的模型299

6.8 入栈一个元素299

6.9 如何从栈中出栈一个元素300

6.10 如何窥视栈顶301

6.11 如何交换栈顶两个元素301

6.12 如何使用栈编写一个括号匹配器306

6.13 开关箱布线问题306

6.14 仙人掌栈314

6.14.1 如何把数据项压入仙人掌栈315

6.14.2 如何从仙人掌栈中弹出数据项316

6.15 如何编写一个使用仙人掌栈检查错误输入URL的算法316

6.16 什么是MTFL321

6.17 如何使用两个栈建立MTFL模型,而这两个栈本身由链表建立322

6.18 如何使用MTFL找出商店中最常被搜索的商品326

6.19 什么是回溯法327

6.20 如何使用栈开发一个找到迷宫中路径的回溯算法328

概念复习333

练习题333

编程题334

第7章 队列336

7.0 引言336

7.1 如何使用数组建立线性队列的模型336

7.2 如何初始化上面定义的线性队列336

7.3 如何在队列中添加一个元素337

7.4 如何从队列中删除元素338

7.5 如何在队列中搜索元素340

7.6 如何显示队列中的元素341

7.7 使用链表建立队列模型341

7.8 如何在链表队列中添加一个数据项342

7.8.1 如何得到队列中元素的个数343

7.9 如何删除队列的队首数据项344

7.10 如何搜索队列中的元素344

7.11 如何显示队列元素345

7.11.1 如何找到队列的队首元素345

7.11.2 如何找到队列的队尾元素345

7.12 使用两个栈建立线性队列的模型347

7.13 如何使用两个队列建立栈的模型349

7.14 使用结构建立循环队列的模型350

7.14.1 如何初始化循环队列351

7.14.2 如何把字符串添加到上面定义的循环队列中351

7.14.3 如何删除循环队列的第一个字符串351

7.14.4 如何在循环队列中搜索特定数据项352

7.14.5 如何显示循环队列352

7.15 使用数组建立优先队列模型352

7.16 使用单向链表建立优先队列的模型358

7.17 优先队列的一个应用366

7.18 如何使用链表建立Deque(双端队列)的模型374

7.19 如何使用队列建立移动到线性表首部(MTFL)的模型374

7.20 如何模拟收银台前的队列375

概念复习380

练习题381

编程题381

第8章 树383

8.0 引言383

8.1 表示树的不同方法是什么385

8.2 什么是严格二叉树385

8.3 什么是准完全二叉树385

8.4 什么是完全二叉树(又称完美二叉树)385

8.5 什么是弱二叉树386

8.6 什么是强二叉树387

8.7 如何使用数组建立二叉树的模型388

8.7.1 如何添加根的值388

8.7.2 如何给结点添加一个左孩子388

8.7.3 如何给结点添加一个右孩子388

8.7.4 如何从左孩子找到父结点位置388

8.7.5 如何从右孩子找到父结点位置388

8.7.6 如何得到子结点是否是单独的结点389

8.7.7 如何找到姐妹/兄弟的位置389

8.7.8 如何得到结点在二叉树中的层次389

8.7.9 如何得到二叉树的度数390

8.7.10 如何在树中找到某个值的位置390

8.7.11 如何计算树中结点的个数390

8.7.12 如何得到结点孩子的个数391

8.7.13 如何计算树中叶子的个数391

8.7.14 如何得到有单个孩子的父结点的个数391

8.7.15 如何得到结点左孩子的值392

8.7.16 如何得到结点右孩子的值392

8.7.17 如何检测结点是否有左孩子392

8.7.18 如何判断结点是否是其父母的左孩子392

8.8 如何判断结点是否是其父母的右孩子393

8.8.1 如何判断结点是否有右结点394

8.8.2 如何走到左孩子的位置394

8.8.3 如何走到右孩子的位置394

8.8.4 如何使用链表建立二叉树的模型394

8.8.5 如何给任意结点添加左孩子395

8.8.6 如何给任意结点添加右孩子395

8.9 如何得到结点的兄弟结点的地址395

8.10 如何得到结点叔叔的地址396

8.11 如何以中序方式遍历树396

8.11.1 如何以前序方式遍历树396

8.11.2 如何以后序方式遍历树396

8.11.3 如何计算二叉树中结点的个数397

8.11.4 如何计算父结点拥有的孩子的个数397

8.11.5 如何计算二叉树中内部结点的个数397

8.11.6 如何计算二叉树中叶子的个数398

8.11.7 如何检查两个二叉树是否相同398

8.12 什么是二叉搜索树398

8.12.1 如何向二叉搜索树添加元素399

8.12.2 如何检查二叉树是否是二叉搜索树400

8.13 如何在二叉搜索树中搜索值400

8.13.1 如何从二叉搜索树中删除一个结点401

8.14 什么是二叉搜索树的右旋转402

8.14.1 如何绕着一个结点右旋转树一次402

8.14.2 什么是二叉搜索树的左旋转403

8.14.3 如何向左旋转树一次403

8.15 二叉搜索树的一些应用领域403

8.16 什么是表达式树404

8.16.1 如何用二叉树表示表达式树404

8.17 什么是决策树409

8.18 二叉搜索树和对策411

8.19 如何在这样的适应性测试中处理多个科目414

8.20 如何把多叉树转换为二叉树415

8.21 什么是二叉搜索树的平衡因子416

8.21.1 如何得到二叉搜索树的平衡因子417

8.21.2 如何检测二叉搜索树是否平衡417

8.22 如何平衡二叉搜索树418

8.22.1 自平衡二叉搜索树418

8.22.2 自组织二叉搜索树:418

8.23 什么是伸展树418

8.23.1 如何在二叉搜索树上执行Zig操作420

8.23.2 如何在二叉搜索树上执行Zag操作420

8.24 什么是堆421

8.25 创建堆的不同方法是什么421

8.25.1 自项向下方法421

8.25.2 自底向上方法422

8.26 如何用数组实现二叉堆422

8.27 什么是AVL树422

8.28 如何在AVL树中插入元素422

8.29 什么是BSP树423

8.30 四元树424

8.30.1 如何使用C结构建立四元树的模型424

8.30.2 如何在这个四元树中添加一个东北方向的孩子425

8.30.3 如何在这个四元树中添加一个西北方向的孩子425

8.30.4 如何在这个四元树中添加一个东南方向的孩子425

8.30.5 如何在这个四元树中添加一个西南方向的孩子426

8.30.6 如何检测一个结点是否是另一个结点东北方向的孩子426

8.30.7 如何检测一个结点是否是另一个结点西北方向的孩子426

8.30.8 如何检测一个结点是否是另一个结点东南方向的孩子426

8.30.9 如何检测一个结点是否是另一个结点西南方向的孩子426

8.31 如何得到四元树结点的东北方向的叔叔427

8.3 1.1 如何得到四元树结点的西北方向的叔叔427

8.31.2 如何得到四元树结点的东南方向的叔叔428

8.31.3 如何得到四元树结点的西南方向的叔叔428

8.32 如何使用四元树表示图像429

8.33 如何把四元树转换为二叉树429

8.34 叠加使用二叉树表示的多个二值图像430

8.35 使用四元树的手写体识别432

8.36 如何使用四元树压缩图像433

8.37 什么是八叉树435

8.37.1 如何使用C结构建立八叉树的模型435

8.37.2 如何给八叉树结点添加一个上邻居436

8.37.3 如何给八叉树结点添加一个下邻居436

8.37.4 如何给八叉树结点添加一个左邻居436

8.38 什么是字典树437

8.39 如何使用链表建立字典树的模型437

8.40 如何向字典树中添加一个键438

8.41 如何在字典树中搜索键439

8.42 如何知道字典树中的键能否被删除442

8.43 如何使用字典树进行拼法检查443

概念复习444

编程题445

第9章 图446

9.0 引言446

9.1 表示图的不同方法是什么446

9.2 如何在使用邻接矩阵建立模型的图中添加边446

9.3 如何在使用邻接矩阵建立模型的图中删除边447

9.4 什么是路径矩阵447

9.4.1 如何检测两个结点之间是否存在一条路径447

9.5 如何检测图是否是一棵树448

9.6 什么是图的最小生成树448

9.7 Prim算法448

9.8 得到最小生成树的Kruskal算法450

9.9 得到最小生成树的反向删除算法451

9.9.1 如何使用Warshall算法得到最短路径452

9.10 什么是有向无环图(DAG)452

9.11 DAG的拓扑排序是什么453

9.11.1 如何得到使用矩阵表示的两个图的并454

9.11.2 如何得到使用矩阵表示的两个图的交454

9.11.3 如何使用邻接表建立无向图的模型454

9.11.4 如何在图中添加一个新结点455

9.11.5 如何向图中添加一条新边456

9.11.6 如何从图中软删除边457

9.11.7 如何显示图的边457

9.11.8 如何从图中软删除顶点458

9.11.9 如何检测顶点是否出现在图中458

9.11.10 如何检测边是否出现在图中458

9.11.11 如何得到拥有绕其自循环的结点列表459

9.11.12 如何得到图中结点的度数459

9.11.13 如何检测结点是否孤立460

9.11.14 什么是吊坠顶点,如何检测顶点是否是吊坠顶点460

9.11.15 如何显示图460

9.11.16 如何检测一个图的顶点是否是另一个图的顶点的子集461

9.11.17 如何检测一个图的边是否是另一个图的边的子集461

9.11.18 如何检测一个图是否是另一个图的子集462

9.11.19 如何检测图是否是欧拉图462

9.11.20 如何检测图是否是完全图463

9.12 如何检测图是否是平面图463

9.12.1 如何使用结构建立有向加权图的模型463

9.12.2 如何向加权有向图上添加一条边464

9.12.3 如何得到有向图结点的入度465

9.12.4 如何得到有向图结点的出度465

9.12.5 如何得到一对儿结点的并行边的条数465

9.12.6 如何输出拥有并行路径的所有边466

9.12.7 如何检测有向图是否平衡466

9.12.8 如何检测有向图中边是否存在466

9.12.9 如何检测有向图是否对称467

9.12.10 如何检测边是否自循环467

9.12.11 如何得到有向图中自循环的个数467

9.12.12 如何检测有向图是否正则467

9.13 宽度优先搜索468

9.14 深度优先搜索470

概念复习470

练习题471

编程题471

第10章 排序473

10.0 引言473

10.1 本章中的函数473

10.2 排序算法分类473

10.3 交换排序算法474

10.3.1 解释冒泡排序算法474

10.4 冒泡排序的时间复杂度是什么476

10.5 什么是奇偶移项排序477

10.6 双向冒泡排序的时间复杂度是什么480

10.7 组合排序的时间复杂度是什么482

10.8 插入排序算法483

10.9 插入排序的时间复杂度是什么484

10.10 与理想(O(n2))曲线的比较485

10.11 二叉插入排序的时间复杂度是什么486

10.12 插入排序中存在的问题:移位487

10.13 解释图书馆排序算法(又称间隙插入排序)488

10.14 Shell排序的时间复杂度是什么489

10.15 选择排序算法490

10.16 选择排序的时间复杂度是什么491

10.17 什么是Bingo排序492

10.18 混合排序算法492

10.19 什么是J-Sort排序493

10.20 N分而治之算法493

10.21 如何编写一个演示快速排序的函数493

10.22 快速排序的时间复杂度是什么494

10.23 快速排序中如何选择基准494

10.24 合并排序的时间复杂度是什么496

10.25 Stooge排序的时间复杂度是什么497

10.26 分布排序算法497

10.27 桶排序497

10.28 具有O(n2)时间复杂度的排序算法的性能比较498

10.29 具有O(n log n)时间复杂度的排序算法的性能比较499

10.30 Bogo排序及其他500

10.31 树排序500

10.32 词典排序501

10.33 基数排序501

10.34 使用散列的地址计算排序502

10.35 排序的应用504

10.36 什么是聚类504

10.37 商业集群504

10.38 找出最短路径504

10.39 找到城市中最热销的DVD505

10.40 找出联机台球比赛中的最大联机得分505

10.41 给定维度后找到最大形状505

概念复习505

练习题506

编程题507

第11章 散列508

11.0 引言508

11.1 冲突的概念及其解析508

11.2 有关散列的一些关键事实和术语510

11.2.1 如何演示整数的线性探查技巧511

11.2.2 如何演示二次探查法512

11.3 如何对散列表中散列元素演示分离链接方法513

11.4 什么是混合散列515

11.4.1 如何演示混合散列(链表散列)516

11.4.2 如何从混合散列表中搜索数据项519

11.5 混合散列(链表散列)的变体是什么520

11.6 什么是散列链以及什么是它的OTP利用520

11.6.1 如何演示散列链和OTP生成520

11.7 如何使用散列树检查从P2P网络下载的媒体的完整性522

练习题523

编程题523

第12章 ADT524

12.1 黑箱的概念524

12.2 ADT概述524

12.3 C中ADT设计525

12.4 设计你自己的ADT525

练习题527

编程题527

第13章 日期529

13.0 引言529

13.0.1 如何检查年份是否是闰年529

13.0.2 如何得到任意日期明天的日期530

13.0.3 如何得到任意日期昨天的日期532

13.0.4 如何计算同一年度两个日期之间的天数534

13.1 如何得到星期几534

13.2 如何从给定日期得到后第N个星期日的日期538

13.3 如何从给定日期得到前第N个星期日的日期539

13.4 包装函数:提高代码的可读性540

13.4.1 如何得到前年特定日期是星期几541

13.4.2 如何得到明年特定日期是星期几541

13.4.3 如何得到下个月最后X天的日期543

13.4.4 如何得到下个月前X天的日期544

13.4.5 如何得到给定范围内所有闰年2月29日是星期几544

13.4.6 如何得到一个日期相比于另一个日期是否是过去545

13.4.7 如何检查两个日期是否相同545

13.4.8 如何检查一个日期是否是另一个日期的将来545

13.4.9 如何得到特定日期之后或之前一定天数的日期546

13.4.10 如何得到特定日期之后或之前数月的日期547

13.4.11 如何得到特定日期数年后或数年前的日期547

13.5 与系统内置的Date结构交互547

13.6 与现实世界交互548

练习题551

编程题552

第14章 映射554

14.0 引言554

14.1 如何表示映射554

14.1.1 如何在Buddy链表末尾添加一个Buddy555

14.1.2 如何在Buddy链表首部添加一个Buddy555

14.1.3 如何删除链表中的最后一个Buddy555

14.1.4 如何删除链表中的第一个Buddy556

14.1.5 如何在特定下标处删除Buddy/映射数据项556

14.1.6 如何删除一个范围内的Buddy/映射数据项557

14.1.7 如何隔一项删除一项Buddy/映射数据项557

14.1.8 如何在Buddy链表/映射中得到第一个朋友/数据项558

14.1.9 如何在Buddy链表/映射中得到最后一个朋友/数据项558

14.1.10 如何计算链表中伙伴的个数558

14.1.11 如何替换映射中特定数据项559

14.1.12 如何对换映射中两个不同位置上元素的内容559

14.1.13 如何对换映射的首部和尾部559

14.2 如何在映射上定义谓词并从客户端使用它560

14.3 如何从Buddy链表中知道谁是谁的朋友560

14.4 如何使用映射设计一个随机加密编码器561

14.5 映射之映射的应用562

14.6 多语言单词映射563

14.7 键互联映射(KIM)564

练习题564

编程题565

第15章 货币566

15.0 引言566

15.0.1 如何使用结构建立USD货币566

15.0.2 如何加两个USD金额566

15.0.3 如何把字符串转换为相应的USD金额567

15.0.4 如何检查两个USD金额是否相等569

15.0.5 如何检查一个USD是否大于另一个USD569

15.0.6 如何检查一个USD是否小于另一个USD570

15.0.7 如何用结构建立GBP货币模型570

15.0.8 如何用结构建立欧元货币模型570

15.0.9 如何从提供的一系列金额中得到最大USD金额571

15.0.10 如何从提供的一系列金额中得到最小USD金额571

15.1 实际应用:得到最低投标金额572

15.2 如何把USD转换为GBP,或进行相反转换573

15.3 如何按日将USD转换为GBP,或进行相反的转换574

练习题575

编程题575

第16章 文件处理576

16.0 引言576

16.1 什么是文件576

16.2 函数rewind()干什么580

16.2.1 如何编写函数wcl()计算文件的行数580

16.2.2 如何编写函数wcw()计算文件的单词个数581

16.2.3 如何编写函数wcc()计算文件的字符个数581

16.2.4 如何编写一个使用这三个函数的客户端代码函数582

16.2.5 如何模拟UNIX head命令582

16.2.6 如何模拟UNIX tail命令583

16.3 如何模拟UNIX cat命令585

16.4 如何模拟精确匹配的UNIX grep命令586

16.5 如何模拟UNIX Grep命令的-V开关587

16.5.1 如何输出文本文件中包含以给定前缀开始的单词的那些文本行588

16.5.2 如何输出文本文件中包含以给定后缀结束的单词的那些文本行589

16.5.3 如何输出文本文件中不包含以给定前缀开始的单词的那些文本行590

16.5.4 如何输出文本文件中不包含以给定后缀结束的单词的那些文本行591

16.5.5 如何输出文本中的这些行,它包含了匹配使用星号通配符表示的特定模式的单词或短语591

16.6 如何输出文件中的那些行,它包含了发音类似于给定单词的单词593

16.7 如何使用一个字符取代文件中的另一个字符593

16.8 如何使用一个单词替换文件中的另一个单词595

16.9 如何逐行比较两个文本文件596

16.10 如何输出两个文件的相同行597

16.11 如何把文件从源复制到目标598

16.12 控制台游戏中的文件处理621

16.13 函数定义632

练习题637

编程题638

附录A 项目概念640

概念#1:确定一个集合640

概念#2:ATM640

概念#3:行编辑器640

概念#4:POS机完全定制化641

概念#5:使用少量的SQL支持定制地址本641

概念#6:创建幻方641

概念#7:剽窃探测642

概念#8:动态自适应测验系统(DAQS)643

概念#9:简单英语到C代码生成器(SETCOGEN)643

概念#10:检测作者的性别(DAG)643

附录B 参考文献645

热门推荐