基本信息
- 原书名:Practical Algorithms for Programmers
- 原出版社: Addison-Wesley Professional
- 作者: (美)Andrew Binstock John Rex
- 译者: 陈宗斌
- 丛书名: 华章程序员书库
- 出版社:机械工业出版社
- ISBN:9787111272960
- 上架时间:2011-5-20
- 出版日期:2009 年9月
- 开本:16开
- 页码:437
- 版次:1-1
- 所属分类:计算机 > 计算机科学理论与基础知识 > 计算理论 > 算法

内容简介
计算机书籍
如今大多数关于算法的图书都是大学教科书,或者是令人厌倦的相同算法集合改头换面后的作品。本书是给出所有算法的完整代码实现的第一本书,这些算法在开发人员的日常工作中非常有用。.
本书重点关注的是实用,立即可用的代码,并且广泛讨论了可移植性和特定于实现的细节。本书作者介绍了一些有用但很少被讨论的算法,它们可用于语音查找。日期和时间例程(直到公元1年)、B树和索引文件、数据压缩、任意精度的算术,校验和与数据验证,并且全面地介绍了查找例程、排序算法和数据结构。..
本书只要求读者具有C语言的初级知识以及基本代数的相关知识。源代码经过测试符合ANSI标准,可以运行在UNIX下,以及Borland、Microsoft和Watcom的编译器上。
本书结构清晰,示例丰富,可作为广大程序员的参考用书。...
作译者
John Rex是一位计算机顾问,专攻C和C++。他是《C Gazette》的前任技术编辑,并且为许多杂志撰写文章。...
目录
前言
致谢
第1章绪论
1.1评估算法
1.2修改算法
1.2.1主要的优化:I/O
1.2.2主要的优化:函数调用
1.3资源和参考资料
第2章基本数据结构
2.1链表
2.1.1双向链表
2.1.2链表的其他特征
2.2栈和队列
2.2.1栈的特征
2.2.2队列的特征
第3章散列
3.1散列的概念
3.2散列函数
3.3冲突解决方法
译者序
本书介绍了关于算法的基础知识、基本数据结构、散列、查找、排序、树、日期和时间、任意精度的算术运算、数据压缩以及数据完整性和验证等内容。本书的目的是为在应用程序中使用的算法提供一个实用的纲要。与关于算法的大多数著作不同的是,本书不是一本教材:书中没有提供实现细节,把它作为练习留给读者完成;也没有利用较小的代码段对算法进行高度理论化的讨论,以说明如何进行实现。相反,本书完全用C语言实现了各种算法,并且讨论了如何在各种应用程序中最佳地使用它们。..
本书只要求读者具有C语言的初级知识以及不超出基本代数之外的数学知识。源代码是符合ANSI标准的,并且对它们进行了测试,它们都可以运行在UNIX下以及Borland、Microsoft和Watcom的编译器上。
本书非常适合于高等院校计算机专业的学生阅读,对于从事计算机软件开发的人员,也将从本书中受益匪浅。
参加本书翻译的人员有:陈宗斌、张景友、易小丽、陈婷、管学岗、王新彦、金惠敏、张海峰、徐晔、戴锋。
由于时间紧迫,加之译者水平有限,错误在所难免,恳请广大读者批评指正。...
译者
2009年6月
前言
关于代码
虽然C++日益普及,但是由于以下几个原因我们仍然使用C。首先,C仍是一种被广泛了解和使用的通用程序设计语言。其次,对于C代码,C++编译器的编译结果与C编译器的结果几乎完全一致。最后,从C移植到C++并不困难,但是反过来却很困难。因而,使用C代码可以兼顾尽可能多的读者。
在开发本书中的代码时主要考虑了两个目标:可读性和可移植性。本书中的全部代码都在Borland、Microsoft和Watcom for MSDOS几种编译器下进行了测试,以确保可移植性。我们在扩展DOS下测试了Watcom编译器的编译结果,该扩展DOS使用PharLap或Rational Systems的DOS扩展器(DOS extender)。此外,除了第1章中的一个例外之外,所有的代码在UNIX下都进行了移植和重新编译。确切地讲,将其移植到SVR4的UnixWare实现。对其他UNIX平台和其他操作系统的移植工作也在进行中。
ANSI Extern
在我们的移植工作中,涉及一个很少讨论的移植问题。ANSI C标准提供了几种不同的方式,其中可以将在多个模块中声明为extern的项链接在一起。今天的许多先进编译器不要求将变量的任何局部定义声明为extern:链接器将简单地在连接的程序中定义一个extern变量并将所有的声明指向它。不过,ANSI标准不保证这种行为可以正常工作。
在ANSI下保证行为能正常工作的唯一方法是,将所有的变量声明为extern,使得至少在一个源模块中实际地定义了该变量(也就是说,没有extern指示符)。在实现这种效果时,仍然可以在一个公共的头文件中维持所有的extern变量的声明。这种技术是如下所示在头文件中声明变量,并在所有模块中包括该头文件:
Extern int Globalvariablel;
Extern int Globalvariable2;
然后在某些模块中,比如在一个包含main()函数的模块中,添加下面一行代码:
#define Extern
这具有取消定义Extern并把声明转换为定义的作用。在其他所有的模块中,将具有下面一行代码:
#define Extern extern
这意味着在所有其他的模块头都声明了extern变量。..
这种方法具有一定的局限性。主要是,它要求在所有的模块中都适当地定义(#defined)了Extern。一个更简单的方法是:具有一个局部模块,它利用一个明示常量(manifest constant)标识它自身。在我们的示例中,main()模块可以通过以下明示常量通告它自身:
#define IN_MAIN_MODULE
然后,带有Extern声明的头文件仅需要包含以下代码:
#ifdef IN_MAIN_MODULE
#define Extern
#else