数据结构基础(C语言版)(第2版)【作者】[美] Ellis Horowitz; Sartaj Sahni; SusanAnderson-Freed 著朱仲涛译【从书名】世界著名计算机教材精选【出版社】清华大学出版社【出版时间】2009年03月【关注人次】3596内容简介本书是最经典数据结构教材的最新版本,国内外大多数的同类教材都是以本书为蓝本编写而来的。
本书用C作为描述语言,全面而生动地介绍了数据结构的有关知识,如数组、栈、队列、链表、树和图,以及构成所有软件基础的排序散列技术。
此外,本书还介绍了各种高级或特殊数据结构,如优先级队列、高效二叉查找树、多路查找树等。
本书对大多数算法都给出了计算时间在最优、最差情形下的复杂度分析。
本书不仅可以作为计算机及相关专业本科生“数据结构”课程的教材,也可以作为研究生第一学年的“高等数据结构”课程的教材,同时,本书所介绍的各种算法的C语言实现,对有关专业人员也具有很好的参考价值。
作者简介Ellis Horowitz,是南加州大学计算机与电子工程系的教授。
Horowitz博士已编著了10多本教材,并发表了大量学术论文。
Sartaj Sahni是佛罗里达大学计算机与信息科学系的杰出教授和讲座教授。
Sahni博士已发表300多篇学术研究论文,编著了15本教材。
Susan Anderson-Freed是伊利诺伊卫斯理大学计算机教授。
她的研究领域是数据库管理系统、Web设计与开发。
她毕业于诺伯特大学,并在印第安纳大学获得硕士和博士学位,以及在Bradley大学获得计算机理学地硕士学位。
她从1977年起就供职于伊利诺伊卫斯理大学。
目录第1章基本概念§1.1 概观:系统生命周期§1.2 指针和动态存储分配§1.2.1 指针§1.2.2 动态存储分配§1.2.3 指针隐患§1.3 算法形式规范§1.3.1 综论§1.3.2 递归算法§1.4 数据抽象§1.5 性能分析§1.5.1 空间复杂度§1.5.2 时间复杂度§1.5.3 渐近记号(O,Q,) §1.5.4 实际复杂度§1.6 性能度量§1.6.1 定时§1.6.2 生成测试数据§1.7 参考文献和选读材料第2章数组和结构§2.1 数组§2.1.1 数组的抽象数据类型§2.1.2 c语言的数组§2.2 数组的动态存储分配§2.2.1 一维数组§2.2.2 二维数组§2.3 结构体和联合体§2.3.1 结构体§2.3.2 联合体§2.3.3 结构的内部实现§2.3.4 自引用结构§2.4 多项式§2.4.1 多项式的抽象数据类型§2.4.2 多项式的表示§2.4.3 多项式加法§2.5 稀疏矩阵§2.5.1 稀疏矩阵的抽象数据类型§2.5.2 稀疏矩阵的表示§2.5.3 矩阵转置§2.5.4 矩阵相乘§2.6 多维数组的表示§2.7 字符串§2.7.1 字符串的抽象数据类型§2.7.2 C语言的字符串§2.7.3 模式匹配§2.8 参考文献和选读材料§2.9 补充习题第3章栈与队列§3.1 栈§3.2 动态栈§3.3 队列§3.4 动态循环队列§3.5 迷宫问题§3.6 表达式求值§3.6.1 表达式§3.6.2 后缀表达式求值§3.6.3 中缀表达式转换成后缀表达式§3.7 多重栈与多重队列§3.8 补充习题第4章链表§4.1 单向链表§4.2 用C语言表示单向链表§4.3 链式栈与链式队列§4.4 多项式§4.4.1 多项式表示§4.4.2 多项式加法§4.4.3 销毁多项式§4.4.4 循环链表与多项式§4.4.5 小结§4.5 其它链表操作§4.5.1 单向链表操作§4.5.2 循环链表操作§4.6 等价类§4.7 稀疏矩阵§4.7.1 稀疏矩阵表示§4.7.2 输入稀疏矩阵§4.7.3 输出稀疏矩阵§4.7.4 销毁稀疏矩阵§4.8 双向链表第5章树§5.1 引论§5.1.1 术语§5.1.2 树的表示§5.2 二叉树§5.2.1 二叉树的抽象数据类型§5.2.2 二叉树的性质§5.2.3 二叉树的表示§5.3 遍历二叉树§5.3.1 中序遍历§5.3.2 先序遍历§5.3.3 后序遍历§5.3.4 非递归(循环)中序遍历§5.3.5 层序遍历§5.3.6 不设栈遍历二叉树§5.4 其它二叉树操作§5.4.1 复制二叉树§5.4.2 判断两个二叉树全等§5.4.3 可满足性问题§5.5 线索二叉树§5.5.1 线索§5.5.2 中序遍历线索二叉树§5.5.3 线索二叉树插入结点§5.6 堆§5.6.1 优先级队列§5.6.2 大根堆定义§5.6.3 大根堆插入操作§5.6.4 大根堆删除操作§5.7 二叉查找树§5.7.1 定义§5.7.2 二叉查找树的查找§5.7.3 二叉查找树的插入§5.7.4 二叉查找树的删除§5.7.5 二叉查找树的合并与分裂§5.7.6 二叉查找树的高度§5.8 选拔树§5.8.1 引子§5.8.2 优胜树§5.8.3 淘汰树§5.9 森林§5.9.1 森林转换为二叉树§5.9.2 遍历森林§5.10 不相交集合的表示§5.10.1 引子§5.10.2 合并与查找操作§5.10.3 划分等价类§5.11 二叉树的计数§5.11.1 不同态二叉树§5.11.2 栈置换§5.11.3 矩阵乘法§5.11.4 不同二叉树的数目§5.12 参考文献和选读材料第6章图§6.1 图的抽象数据类型§6.1.1 引子§6.1.2 图的定义和术语§6.1.3 图的表示§6.2 图的基本操作§6.2.1 深度优先搜索§6.2.2 广度优先搜索§6.2.3 连通分量§6.2.4 生成树§6.2.5 重连通分量§6.3 最小代价生成树§6.3.1 Kruskal算法§6.3.2 Prim算法§6.3.3 SoUin算法§6.4 最短路径和迁移闭包§6.4.1 单源点至所有其它节点:边权值非负§6.4.2 单源点至所有其它节点:边权值正负无限制……第7章排序第8章Hash法第9章优先级队列第10章高效二叉查找树第11章多路查找树第12章数字查找结构索引序言《数据结构基础》是一本优秀的数据结构教材,取材全面,难易适中,内容组织合理,详略得当,深入浅出,而且论证逻辑性强,所以广为国内外高校计算机专业选用。
此外,这本英文教材对国内许多数据结构教材的编写也有显著影响。
此中译本是《数据结构基础》c语言版第2版的译本,与第1版相比,新版篇幅扩张很大,内容全面更新,全书覆盖①线性(序)数据类型、②树型数据类型、③网状数据类型,以及④排序算法与⑤查找算法。
基本数据结构包括线性表(数组与链表)、栈与队列、树、图等经典内容,特点为运用抽象数据类型(ADT)观点一一呈现。
另外,书中包含大量符合ANSIC标准的程序,实例丰富,习题众多,并有大量图表。
《数据结构基础(C语言版)第2版》最鲜明的特点是:用几乎一半篇幅,即第8~12章,详细讨论了各种查找表结构及其查找算法,而且内容组织很新颖。
这最后5章既包括查找法的经典内容,如Hash法和AVL树等;也包括数据结构研究的新进展,如分摊复杂度分析等;还包括当前数据结构研究的热点,即各种堆结构。
这部分内容特别适合数据结构提高课程,也特别适合学过基本数据结构的读者自学提高。
以下列出《数据结构基础(C语言版)第2版》有关查找的内容及其编排体系。
文摘第1章基本概念1.1 概观:系统生命周期本书读者应具备扎实的结构化程序设计技能。
要获得这些技能,读者通常应学过程序设计基础一类课程。
这类课程的培养目标就是传授结构化程序设计技能,但课程强调的是语言本身的语法形式与语句使用规则,学生在这个阶段通常只能编写很简单的程序,解决的问题不用说也是很简单的。
这类简单问题,一般而言,只要直接选用程序设计语言提供的某语句也许就能完成求解,例如,用数组存储数据,再利用while循环语句,可能就足以解决这一阶段的许多问题了。
本书要指导读者向前迈一大步,大幅度提高编程能力,因为以后编写的程序,其规模要大很多,功能也要复杂得多。
不用说,编写规模庞大而复杂的程序,不但需要更强有力的工具,还一定需要更高级的编程技术。
我们希望在随后的学习过程,读者应扎实掌握数据的抽象思维方法,同时必须熟练掌握算法的规范声明、算法的性能分析、算法的性能评价等诸多技能。
设置本章的目的就是要详细论述这些内容。
此外,递归程序设计方法同样至关重要,读者也必须熟练掌握,因此也是本章讨论的内容,但论述得较为简明而且篇幅不很大。
我们提请读者注意,如果读者以前对递归程序设计基础未给予足够重视,了解流于肤浅,那么必须仔细研读这方面内容,以后一定会深感大有益处。
然而,在讨论各种工具与各项技术之前,我们必须强凋,编程可不仅仅是写程序代码,即写完一条条程序语句就万事大吉了。
与之截然相反,优秀的程序员有完全不同的观点。
程序设计的首要问题,应该是首先把大规模程序系统分解成许许多多自成体系且相对独立的组成部件,然后再为各部分之间存在的相互调用,定义严格的调用格式。