本书重点关注的是实用、立即可用的代码,并且广泛讨论了可移植性和特定于实现的细节。本书作者介绍了一些有用但很少被讨论的算法,它们可用于语音查找、日期和时间例程(直到公元1年)、B树和索引文件、数据压缩、任意精度的算术、校验和与数据验证,并且还最全面地介绍了查找例程、排序算法和数据结构。
数据结构与算法是计算机专业的核心课程,是计算机软件开发和应用人员必备的专业基础。今天的大多数关于算法的图书都是大学教科书,或者是令人厌倦的相同算法集合改头换面后的作品。本书是给出所有算法的完整代码实现的第一本书,这些算法对于开发人员在其日常工作中是有用的。
本书介绍了关于算法的基础知识、基本数据结构、散列、查找、排序、树、日期和时间、任意精度的算术运算、数据压缩以及数据完整性和验证等内容。本书的目的是为在应用程序中使用的算法提供一个实用的纲要。与关于算法的大多数著作不同的是,本书不是一本教材:书中没有提供实现细节,把它作为练习留给读者完成;也没有利用较小的代码段对算法进行高度理论化的讨论,以说明如何进行实现。相反,本书完全用C语言实现了各种算法,并且讨论了如何在各种应用程序中最佳地使用它们。
本书只要求读者具有C语言的初级知识以及不超出基本代数之外的数学知识。源代码是符合ANSI标准的,并且对它们进行了测试,它们都可以运行在UNIX下以及Borland、Microsoft和Watcom的编译器上。
封面图
目录
- 译者序
- 前言
- 致谢
- 第1章绪论
- 11评估算法
- 12修改算法
- 121主要的优化:I/O
- 122主要的优化:函数调用
- 13资源和参考资料
- 第2章基本数据结构
- 21链表
- 211双向链表
- 212链表的其他特征
- 22栈和队列
- 221栈的特征
- 222队列的特征
- 第3章散列
- 31散列的概念
- 32散列函数
- 33冲突解决方法
- 331线性再散列法
- 332非线性再散列法
- 333外部拉链法
- 34性能问题
- 35资源和参考资料
- 第4章查找
- 41查找的特征
- 411准备时间
- 412运行时间
- 413回溯的需要
- 42蛮力查找
- 43BoyerMoore查找
- 431启发式方法#1:跳过字符
- 432启发式方法#2:重复模式
- 44多字符串查找
- 45用于正则表达式的字符串
- 查找:grep
- 46近似字符串匹配技术
- 47语音比较:Soundex算法
- 48Metaphone:现代的Soundex
- 49选择技术
- 410资源和参考资料
- 4101通用参考资料
- 4102BoyerMoore
- 4103多字符串查找
- 4104正则表达式查找
- 4105近似字符串匹配
- 4106Soundex算法和Metaphone
- 算法
- 第5章排序
- 51排序的基本特征
- 511稳定性
- 512对哨兵的需求
- 513对链表进行排序的能力
- 514输入的阶的相关性
- 515对额外存储空间的需求
- 516内部排序技术与外部排序
- 技术
- 52排序模型
- 521冒泡排序
- 522插入排序
- 523希尔排序
- 524快速排序
- 525堆排序
- 53对链表进行插入排序
- 54对链表进行快速排序
- 55对多个键进行排序——不稳定
- 排序的修正方法
- 56网络排序
- 57小结:选择一种排序算法
- 58资源和参考资料
- 第6章树
- 61二叉树
- 611树查找
- 612节点插入
- 613节点删除
- 614二叉查找树的性能
- 615AVL树
- 62红黑树
- 63伸展树
- 64B树
- 641保持B树平衡
- 642实现B树算法
- 643B树实现的代码
- 65可以看见森林吗
- 66资源和参考资料
- 第7章日期和时间
- 71日期例程的库
- 72时间例程
- 73用于日期和时间数据的格式
- 74最后的提醒
- 75资源和参考资料
- 第8章任意精度的算术
- 81构建计算器82表示数字
- 83计算
- 84加法
- 85减法
- 86乘法
- 87除法
- 88关于计算器要注意的最后几点
- 89用于计算平方根的牛顿算法
- 810分期付款表
- 811资源和参考资料
- 第9章数据压缩
- 91行程编码
- 92霍夫曼压缩
- 921代码
- 922其他问题
- 93滑动窗口压缩
- 94基于字典的压缩(LZW)
- 941LZW算法的伪代码
- 942LZW压缩的实现
- 943填满字典
- 95使用哪种压缩方法
- 96资源和参考资料
- 第10章数据完整性和验证
- 101简单的校验和
- 102加权校验和
- 103循环冗余校验
- 1031CRCCCITT
- 1032CRC16
- 1033CRC32
- 104资源和参考资料