内 容 简 介本书是高职高专精品课程规划教材,可供计算机类相关专业的教学使用。本书内容共分9章,系统地介绍了各种类型的数据结构,主要从算法的角度详细介绍了不同结构上算法的实现和排序及查找技术,并针对线性表、栈、队列、串、数组、二叉树、树、图等从物理角度讲解了每种逻辑结构的不同存储结构,以及相应操作的实现,还对结构特点进行了分析。本书理论与实际结合,配有相关的例题、习题、实验,使抽象的内容更易理解。书中各章的实验均有实现代码,且已调试通过。每章都有类型练习题,各习题都有电子答案。
前 言数据结构是一门研究如何存储和组织数据以及如何操作数据的科学。在许多程序设计领域中,数据结构的选择是一个基本的考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都依赖于是否选择了最优的数据结构。数据结构课程作为高校计算机及相关专业的核心基础课程,研究的对象是数据的逻辑结构、存储结构及相应的各种运算。从逻辑角度看,基本的数据结构可归结为集合、线性表、树和图4种;从计算机中存储的角度看,数据可分为顺序结构和非顺序结构(或称链式结构)。对每一种逻辑结构,可以根据实际需要采用顺序或链式存储结构存放到存储单元中,当然也可以采用两种不同存储结构相结合的方式。当数据的逻辑结构和存储结构确定后,就可以根据数据的某些操作要求去编写算法并写出程序,从而实现对数据的操作。本书使用类C语言作为算法描述语言,包括线性表、栈、队列、串、数组、树与二叉树、图、查找、排序共9章内容,对数据结构的讲解从逻辑结构、存储结构到在不同存储结构上算法的实现应有尽有。对算法的讲解力求从数据结构到算法再到程序的思路表现出来,使学习者能深入理解并学会应用。对数据结构的学习,能够使我们以问题求解方法、程序设计方法及一些典型的数据结构算法为研究对象,学会分析数据对象的特征,掌握数据组织的方法和在计算机中的表示方法,为数据选择适当的逻辑结构、存储结构以及相应的处理算法,初步掌握算法的时间、空间复杂度的分析技巧,培养良好的程序设计风格以及获得进行复杂程序设计的技能。本书列举了一些示例进行算法分析,将抽象的内容清晰地展现出来。再版后,本书目录结构保持不变,纠正了原书中的一些问题,并补充了一些新的算法。书中增加了典型例题,尤其增加了例题的分析过程,通过不同存储结构上同一问题的不同实现,使读者能够在解决实际问题时正确选择存储结构。例题的实现过程附上了C语言的实现代码。再版书的实验环节在原有基础上增加了实验内容,补充了原有实验结构上的不足,每个实验附加了调试过的代码。此外习题部分也做了少量的修改,各章习题均有电子版答案(习题答案可以与出版社或作者联系),这些都会给学习者提供很大的方便。本书作为高职高专的教材,参考学时为60学时,其中含48学时的理论课,12学时的实验课。本书作者多年从事计算机程序设计、数据结构以及计算机软件课程教学工作和计算机软件开发工作,有丰富的实践和教学经验。主编是沈阳理工大学李筠、姜学军,副主编是孙承福、虞闯,参编的还有王艳梅、张大伟、蒋强、苑擎飏、袁凤莲、李莹、王纪、马永轩、许亮、李芳、谭小波、徐志勇、付立冬、姚旭东、王海涛等。由于作者水平有限,书中难免存在错误之处,欢迎读者提出宝贵意见。
目 录
第1章 绪论1.1 数据结构简介1.2 基本术语1.3 数据的存储结构1.3.1 顺序存储结构1.3.2 链式存储结构1.4 算法及算法分析1.4.1 算法1.4.2 算法分析1.5 数据结构课程的地位1.5.1 数据结构与其他课程的关系1.5.2 数据结构课程学习的特点习题第2章 线性表2.1 线性表的逻辑结构2.2 线性表的顺序存储结构2.3 线性表的链式存储结构2.3.1 线性单链表2.3.2 静态单链表2.3.3 循环链表2.3.4 双向链表2.4 线性表的应用习题实验第3章 栈和队列3.1 栈3.1.1 栈的意义及抽象数据类型3.1.2 栈操作的实现3.2 队列3.2.1 队列及其抽象数据类型3.2.2 队列的链式存储结构3.2.3 队列的顺序存储结构——
循环队列3.3 栈和队列的应用习题实验第4章 串4.1 串的基本概念和存储结构4.1.1 串的基本概念4.1.2 串的存储结构4.2 串基本操作的实现4.3 模式匹配4.3.1 子串定位函数4.3.2 模式匹配的一种改进算法4.4 串操作应用习题实验第5章 数组5.1 数组的定义和运算5.2 数组的顺序存储结构5.3 矩阵的压缩存储5.3.1 特殊矩阵5.3.2 稀疏矩阵5.3.3 稀疏矩阵操作实例习题实验第6章 树与二叉树6.1 树的逻辑结构和基本操作6.2 二叉树6.2.1 二叉树的定义及逻辑结构6.2.2 二叉树的性质6.2.3 二叉树的存储结构6.3 遍历二叉树和线索二叉树6.3.1 遍历二叉树6.3.2 线索二叉树6.4 树和森林6.4.1 树的存储结构6.4.2 森林与二叉树的转换6.4.3 树的遍历6.5 哈夫曼树及其应用6.5.1 最优二叉树(哈夫曼树)6.5.2 哈夫曼编码习题实验第7章 图7.1 图的定义与基本术语7.1.1 图的定义7.1.2 图的基本术语7.2 图的存储7.2.1 邻接矩阵表示法7.2.2 邻接表表示法7.2.3 十字链表7.2.4 邻接多重表7.3 图的遍历7.3.1 深度优先搜索7.3.2 广度优先搜索7.4 图的连通性7.4.1 无向图的连通分量
与生成树7.4.2 最小生成树7.5 有向无环图及应用7.5.1 拓扑排序(Topological Sort)7.5.2 关键路径7.6 最短路径习题实验第8章 查找8.1 查找的基本概念8.2 基于线性表的查找8.2.1 顺序查找8.2.2 折半查找8.2.3 分块查找8.3 基于树的查找8.3.1 二叉排序树8.3.2 平衡二叉排序树8.3.3 B树8.3.4 静态树表的查找8.4 哈希表8.4.1 哈希表的概念8.4.2 哈希函数的构造方法8.4.3 处理冲突的方法8.4.4 哈希表的实现8.4.5 哈希表的查找分析习题实验第9章 排序9.1 概述9.2 插入排序9.2.1 直接插入排序9.2.2 折半插入排序9.2.3 二路插入排序9.2.4 表插入排序9.2.5 希尔排序9.3 交换排序9.3.1 冒泡排序9.3.2 快速排序9.4 选择排序9.4.1 简单选择排序9.4.2 堆排序9.5 归并排序9.6 基数排序9.6.1 多关键字排序9.6.2 基数排序9.7 外部排序9.7.1 二路归并排序9.7.2 多路归并排序9.7.3 初始顺串的生成习题实验参考文献