标题：数据结构
基本简介
名词定义数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。记为：
Data-Structure=(D,R)
其中D是数据元素的集合，R是该集合中所有元素之间的关系的有限集合。[1]其它定义Sartaj Sahni在他的《数据结构、算法与应用》一书中称：“数据结构是数据对象，以及存在于该对象的实例和组成实 例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象（data object）定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是：“数据结构是 ADT（抽象数据类型Abstract Data Type） 的物理实现。”
Lobert L.Kruse在《数据结构与程序设计》一书中，将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中，抽象层是指抽象数据类型层，它讨论数据的逻辑结构及其运算，数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。
数据结构具体指同一类数据元素中，各元素之间的相互关系，包括三个组成成分，数据的逻辑结构，数据的存储结构和数据运算结构。
研究对象
一，数据的逻辑结构：指反应数据元素之间的逻辑关系的数据结构，其中的逻辑关系是指数据元素之间的前后件关系，而与他们在计算机中的存储位置无关。逻辑结构包括：
1，集合
2，线性结构
3，树形结构
4，图形结构
二，数据的物理结构：指数据的逻辑结构在计算机存储空间的存放形式。
三，数据结构的运算。[1]
重要意义
一般认为，一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构；数据必须在计算机内存储，数据的存储结构是数据结构的实现形式，是其在计算机内的表示；此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构，且各种存储结构影响数据处理的效率。
在许多类型的程序的设计中，数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明，系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候，确定了数据结构后，算法就容易得到了。有些时候事情也会反过来，我们根据特定算法来选择数据结构与之适应。不论哪种情况，选择合适的数据结构都是非常重要的。 
选择了数据结构，算法也随之确定，是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现，面向对象的程序设计语言就是其中之一。
研究内容
在计算机科学中，数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象（数据元素）以及它们之间的关系和运算等的学科，而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。 
“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐·欧·克努特教授开创了数据结构的最初体系，他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课，数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计（特别是非数值性程序设计）的基础，而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。 
计算机科学是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题：信息的表示，信息的处理 。
而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及，信息量的增加，信息范围的拓宽，使许多系统程序和应用程序的规模很大，结构又相当复杂。因此，为了编写出一个“好”的程序，必须分析待处理的对象的特征及各对象之间存在的关系，这就是数据结构这门课所要研究的问题。众所周知，计算机的程序是对信息进行加工处理。在大多数情况下，这些信息并不是没有组织，信息（数据）之间往往具有重要的结构关系，这就是数据结构的内容。数据的结构，直接影响算法的选择和效率。 
计算机解决一个具体问题时，大致需要经过下列几个步骤：首先要从具体问题中抽象出一个适当的数学模型，然后设计一个解此数学模型的算法（Algorithm），最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题，从中提取操作的对象，并找出这些操作对象之间含有的关系，然后用数学的语言加以描述。计算机算法与数据的结构密切相关，算法无不依附于具体的数据结构，数据结构直接关系到算法的选择和效率。运算是由计算机来完成，这就要设计相应的插入、删除和修改的算法 。也就是说，数据结构还需要给出每种结构类型所定义的各种运算的算法。 
数据是对客观事物的符号表示，在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。 
数据元素是数据的基本单位，在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素：一类是不可分割的原子型数据元素，如：整数"5"，字符 "N" 等；另一类是由多个款项构成的数据元素，其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数据项组成。其中的出生日期又可以由三个数据项："年"、"月"和"日"组成，则称"出生日期"为组合项，而其它不可分割的数据项为原子项。 
关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用，则称之为 "主" 关键字，否则称之为 "次" 关键字。 
数据对象是性质相同的数据元素的集合，是数据的一个子集。数据对象可以是有限的，也可以是无限的。 
数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期，计算机主要用于科学和工程计算，进入八十年代以后，计算机主要用于数据处理。据有关统计资料表明，现在计算机用于数据处理的时间比例达到80%以上，随着时间的推移和计算机应用的进一步普及，计算机用于数据处理的时间比例必将进一步增大。
结构分类
数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构（物理结构）和数据的运算。数据的逻辑结构是对数据之间关系的描述，有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为（K，R）（或（D，S）），其中，K是数据元素的有限集，R是K上的关系的有限集。 　
根据数据元素间关系的不同特性，通常有下列四类基本的结构： ⑴集合结构。该结构的数据元素间的关系是“属于同一个集合”。 ⑵线性结构。该结构的数据元素之间存在着一对一的关系。 ⑶树型结构。该结构的数据元素之间存在着一对多的关系。 ⑷图形结构。该结构的数据元素之间存在着多对多的关系，也称网状结构。 从上面所介绍的数据结构的概念中可以知道，一个数据结构有两个要素。一个是数据元素的集合，另一个是关系的集合。在形式上，数据结构通常可以采用一个二元组来表示。 
数据结构的形式定义为：数据结构是一个二元组 ：Data_Structure =（D，R），其中，D是数据元素的有限集，R是D上关系的有限集。 线性结构的特点是数据元素之间是一种线性关系，数据元素“一个接一个的排列”。在一个线性表中数据元素的类型是相同的，或者说线性表是由同一类型的数据元素构成的线性结构。在实际问题中线性表的例子是很多的，如学生情况信息表是一个线性表：表中数据元素的类型为学生类型; 一个字符串也是一个线性表：表中数据元素的类型为字符型，等等。 
线性表是最简单、最基本、也是最常用的一种线性结构。 线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列，通常记为： (a1，a2，… ai-1，ai，ai+1，…an) ，其中n为表长， n=0 时称为空表。 它有两种存储方法：顺序存储和链式存储，它的主要基本操作是插入、删除和检索等。
数据结构在计算机中的表示（映像）称为数据的物理（存储）结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法：顺序映象和非顺序映象，并由此得到两种不同的存储结构：顺序存储结构和链式存储结构。
顺序存储方法：它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里，结点间的逻辑关系由存储单元的邻接关系来体现，由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法，通常借助于程序设计语言中的数组来实现。
链接存储方法：它不要求逻辑上相邻的结点在物理位置上亦相邻，结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构，链式存储结构通常借助于程序设计语言中的指针类型来实现
索引存储方法：除建立存储结点信息外，还建立附加的索引表来标识结点的地址。
散列存储方法：就是根据结点的关键字直接计算出该结点的存储地址。 
数据结构中，逻辑上（逻辑结构：数据元素之间的逻辑关系）可以把数据结构分成线性结构和非线性结构。线性结构的顺序存储结构是一种随机存取的存储结构，线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。
结构算法
算法的设计取决于数据（逻辑）结构，而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现，为了全面的反映一个数据的逻辑结构，它在存储器中的映象包括两方面内容，即数据元素之间的信息和数据元素之间的关系。不同数据结构有其相应的若干运算。数据的运算是在数据的逻辑结构上定义的操作算法，如检索、插入、删除、更新和排序等。 
数据的运算是数据结构的一个重要方面，讨论任一种数据结构时都离不开对该结构上的数据运算及其实现算法的讨论。
数据结构不同于数据类型，也不同于数据对象，它不仅要描述数据类型的数据对象，而且要描述数据对象各元素之间的相互关系。 
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。数据类型可分为两类：原子类型、结构类型。一方面，在程序设计语言中，每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。可以认为，数据类型是在程序设计中已经实现了的数据结构。另一方面，在程序设计过程中，当需要引入某种新的数据结构时，总是借助编程语言所提供的数据类型来描述数据的存储结构。 
计算机中表示数据的最小单位是二进制数的一位，叫做位。我们用一个由若干位组合起来形成的一个位串表示一个数据元素，通常称这个位串为元素或结点。当数据元素由若干数据项组成时，位串中对应于各个数据项的子位串称为数据域。元素或结点可看成是数据元素在计算机中的映象。 
一个软件系统框架应建立在数据之上，而不是建立在操作之上。一个含抽象数据类型的软件模块应包含定义、表示、实现三个部分。 
对每一个数据结构而言，必定存在与它密切相关的一组操作。若操作的种类和数目不同，即使逻辑结构相同，数据结构能起的作用也不同。 
不同的数据结构其操作集不同，但下列操作必不可缺： 
1,结构的生成； 
2.结构的销毁； 
3,在结构中查找满足规定条件的数据元素； 
4,在结构中插入新的数据元素； 
5,删除结构中已经存在的数据元素； 
6,遍历。 
抽象数据类型：一个数学模型以及定义在该模型上的一组操作。抽象数据类型实际上就是对该数据结构的定义。因为它定义了一个数据的逻辑结构以及在此结构上的一组算法。抽象数据类型可用以下三元组表示：（D，S，P）。D是数据对象，S是D上的关系集，P是对D的基本操作集。ADT的定义为： 
ADT 抽象数据类型名：{数据对象：（数据元素集合），数据关系：（数据关系二元组结合），基本操作：（操作函数的罗列）}； ADT 抽象数据类型名;抽象数据类型有两个重要特性： 
数据抽象
用ADT描述程序处理的实体时，强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口（即外界使用它的方法）。 
数据封装
将实体的外部特性和其内部实现细节分离，并且对外部用户隐藏其内部实现细节。
数据（Data）是信息的载体，它能够被计算机识别、存储和加工处理。它是计算机程序加工的原料，应用程序处理各种各样的数据。计算机科学中，所谓数据就是计算机加工处理的对象，它可以是数值数据，也可以是非数值数据。数值数据是一些整数、实数或复数，主要用于工程计算、科学计算和商务处理等；非数值数据包括字符、文字、图形、图像、语音等。数据元素（Data Element）是数据的基本单位。在不同的条件下，数据元素又可称为元素、结点、顶点、记录等。例如，学生信息检索系统中学生信息表中的一个记录等，都被称为一个数据元素。 
有时，一个数据元素可由若干个数据项（Data Item）组成，例如，学籍管理系统中学生信息表的每一个数据元素就是一个学生记录。它包括学生的学号、姓名、性别、籍贯、出生年月、成绩等数据项。这些数据项可以分为两种：一种叫做初等项，如学生的性别、籍贯等，这些数据项是在数据处理时不能再分割的最小单位；另一种叫做组合项，如学生的成绩，它可以再划分为数学、物理、化学等更小的项。通常，在解决实际应用问题时是把每个学生记录当作一个基本单位进行访问和处理的。 
数据对象（Data Object）或数据元素类（Data Element Class）是具有相同性质的数据元素的集合。在某个具体问题中，数据元素都具有相同的性质（元素值不一定相等），属于同一数据对象（数据元素类），数据元素是数据元素类的一个实例。例如，在交通咨询系统的交通网中，所有的顶点是一个数据元素类，顶点A和顶点B各自代表一个城市，是该数据元素类中的两个实例，其数据元素的值分别为A和B。 数据结构（Data Structure）是指互相之间存在着一种或多种关系的数据元素的集合。在任何问题中，数据元素之间都不会是孤立的，在它们之间都存在着这样或那样的关系，这种数据元素之间的关系称为结构。
常用结构
数组 (Array)在程序设计中，为了处理方便， 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中， 数组属于构造数据类型。一个数组可以分解为多个数组元素，这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同，数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。栈 (Stack)是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据，先进入的数据被压入栈底，最后的数据在栈顶，需要读数据的时候从栈顶开始弹出数据（最后一个数据被第一个读出来）。队列 (Queue)一种特殊的线性表，它只允许在表的前端（front）进行删除操作，而在表的后端（rear）进行插入操作。进行插入操作的端称为队尾，进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时，称为空队列。链表 (Linked List)是一种物理存储单元上非连续、非顺序的存储结构，它既可以表示线性结构，也可以用于表示非线性结构，数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点（链表中每一个元素称为结点）组成，结点可以在运行时动态生成。每个结点包括两个部分：一个是存储数据元素的数据域，另一个是存储下一个结点地址的指针域。树 (Tree)是包含n（n>0）个结点的有穷集合K，且在K中定义了一个关系N，N满足 以下条件：
（1）有且仅有一个结点 K0，他对于关系N来说没有前驱，称K0为树的根结点。简称为根（root）。　 （2）除K0外，K中的每个结点，对于关系N来说有且仅有一个前驱。
（3）K中各结点，对关系N来说可以有m个后继（m>=0）。图 (Graph)图是由结点的有穷集合V和边的集合E组成。其中，为了与树形结构加以区别，在图结构中常常将结点称为顶点，边是顶点的有序偶对，若两个顶点之间存在一条边，就表示这两个顶点具有相邻关系。堆 (Heap)在计算机科学中，堆是一种特殊的树形数据结构，每个结点都有一个值。通常我们所说的堆的数据结构，是指二叉堆。堆的特点是根结点的值最小（或最大），且根结点的两个子树也是一个堆。散列表 (Hash)若结构中存在关键字和K相等的记录，则必定在f(K)的存储位置上。由此，不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function)，按这个思想建立的表为散列表。
排序算法
稳定算法[2]　冒泡排序（bubble sort）
鸡尾酒排序 (Cocktail sort, 双向的冒泡排序)
插入排序 （insertion sort）
桶排序 （bucket sort）
计数排序 (counting sort) 
合并排序 （merge sort）
原地合并排序 
二叉排序树排序 （Binary tree sort）
鸽巢排序 (Pigeonhole sort)
基数排序 （radix sort）
Gnome 排序 
图书馆排序 不稳定算法选择排序（selection sort）
希尔排序（shell sort）
组合排序 
堆排序 （heapsort）
平滑排序 
快速排序（quicksort）
内省排序 （Introsort） 
Patience sorting不实用算法Bogo排序 
Stupid sort
珠排序（Bead sort）
Pancake sorting

基本信息
  书 名: 数据结构
作　者：汪沁，奚李峰
出版社： 清华大学出版社
出版时间： 2009-9-1
ISBN: 9787302208044
开本： 16开
定价: 25.00元
内容简介
本书系统地介绍了各种数据结构的特点、存储结构及相关算法。书中采用c语言描述算法。主要内容包括：数据结构的基本概念、算法描述和算法分析；线性表、堆栈、队列、串、数组、树、图等结构；查找、排序等。每章后面配有小结、习题和讨论题。最后一章附有完整的实验指导书，每节给出了完整的C语言源程序示例。
本书叙述清晰、深入浅出、注重实践环节，便于教学与实践。
本书可作为高等院校计算机专业的教材，也可供从事计算机应用与工程工作的科技工作者作为自学参考图书。
图书目录
第1章 绪论
1.1 数据结构的概念
1.1.1 引言
1.1.2 数据结构有关概念与术语
1.2 抽象数据类型
1.3 算法描述与分析
1.3.1 什么是算法
1.3.2 算法分析技术
1.4 小结
讨论小课堂
习题
第2章 线性表
2.1 线性表的定义及其运算
2.1.1 线性表的定义
2.1.2 线性表的基本操作
2.2 线性表的顺序存储结构及实现
2.2.1 顺序存储结构
2.2.2 线性表在向量中基本运算的实现
2.3 线性表的链表存储结构
2.3.1 单链表
2.3.2 线性链表基本运算的实现
2.4 循环链表和双向链表
2.4.1 循环链表
2.4.2 双向链表
2.4.3 顺序存储结构与链表存储结构的综合分析与比较
2.5 单链表的应用
2.5.1 多项式相加的链表存储结构
2.5.2 多项式相加的算法实现
2.6 小结
讨论小课堂
习题
第 3章 栈和队列
3.1 栈
3.1.1 栈的定义
3.1.2 栈的基本操作
3.2 栈的顺序存储结构及实现
3.2.1 栈的顺序存储结构
3.2.2 顺序栈的类定义
3.3 栈的链表存储结构及实现
3.4 栈的应用
3.4.1 表达式的计算
3.4.2 子程序的嵌套调用
3.4.3 递归调用
3.4.4 n阶Hanoi塔问题
3.5 队列
3.5.1 队列的定义及运算
3.5.2 队列的抽象数据类型描述
3.6 队列的顺序存储结构及实现
3.7 队列的链表存储结构及实现
3.8 队列的应用
3.9 小结
讨论小课堂
习题
第4章 串
4.1 串的基本概念
4.1.1 串的定义
4.1.2 串的基本操作
4.2 串的存储与基本操作的实现
4.2.1 定长顺序串
4.2.2 堆串
4.2.3 块链串
4.2.4 串操作的实现
4.3 串的模式匹配
4.3.1 朴素模式匹配算法
4.3.2 模式匹配的KMP算法
4.4 串的应用举例：文本编辑
4.5 小结
讨论小课堂
习题
第5章 数组和广义表
第6章 树与二叉树
第7章 图
第8章 查找
第9章 排序
第 10章 索引结构与散列
附录 上机实验指导
参考文献

基本信息
作   者： 陈锐 
丛书名： 零基础学编程 
出版社：机械工业出版社 
ISBN：9787111291367 
出版日期：2010 年1月 开本：16开 页码：453 版次：1-1 
所属分类： 计算机 > 计算机科学理论与基础知识 > 数据结构
  月畅销榜第11，周畅销榜第2。
零基础学系列是机械工业出版社的经典系列，其中零基础学数据结构是非常有特色排名最为靠前的一个。
本书作者系CCF会员，高级程序员，专家讲师。
编辑推荐
内容全面：本书涵盖了数据结构中几乎所有知识点
图文并茂：用通俗易懂的文字描述，并绘制了多幅示意图帮助读者理解
实例丰富：全书提供了70余个典型实例帮助读者理解数据结构与算法思想
C语言描述：书中的算法采用C语言描述，适合众多读者学习
视频教学：配有19.5小时多媒体视频进行讲解，学习效果好 
关于作者：陈锐是著名的计算机科技作者，工程师，研究生学历，硕士学位。CCF会员，编写了大量的科技图书。
内容简介
《数据结构》是计算机专业的专业基础课和核心课程。本书内容全面，所有算法都是用C语言描述，能够直接运行，在每一章的所有知识点都给出了算法的具体使用。本书内容包括数据结构概述、C语言程序设计基础、线性表、栈、队列、串、数组、广义表、树和二叉树、图、查找、内排序和外排序。为了便于读者学习，在讲解每一个知识点时，都结合图和具体实例进行分析，在每个知识点的最后都给出算法的具体应用，每一个例子都比较典型且知识点覆盖完整。
本书可作为大中专院校的计算机相关专业数据结构的教材，也可作为计算机软件开发、考验和软件等级考试相关人员的参考书。
图书目录
出版说明
前言
第一篇  基础篇
第1章  数据结构概述 
1.1  数据结构的基本概念 
1.2  抽象数据类型及其描述 
1.2.1  抽象数据类型的定义 
1.2.2  抽象数据类型的描述
1.3  数据结构的逻辑结构与物理结构
1.3.1  逻辑结构 
1.3.2  物理结构 
1.4  算法的特性与算法的描述 
1.4.1  算法的定义 
1.4.2  算法的特性 
1.4.3  算法的描述 
1.5  算法分析
1.5.1  算法设计的要求 
1.5.2  算法效率评价 
1.5.3  算法时间复杂度 
1.5.4  算法空间复杂度 
1.6  小结
第2章  C语言基础
2.1　开发环境介绍
2.1.1　Turbo C 2.0开发环境介绍
2.1.2　Visual C++6.0开发环境介绍
2.2　递归与非递归
2.2.1　函数的递归调用
2.2.2　递归应用举例
2.2.3　一般递归转化为非递归
2.3　指针
2.3.1　指针变量 
2.3.2　指针变量的引用 
2.3.3　指针与数组 
2.3.4　函数指针与指针函数 
2.4　参数传递 
2.4.1　传值调用 
2.4.2　传地址调用 
2.5　结构体与联合体 
2.5.1　结构体的定义 
2.5.2　指向结构体的指针 
2.5.3　联合体及应用 
2.6　动态内存分配与释放 
2.6.1　内存动态分配与释放 
2.6.2　链表 
2.7　小结 
2.8　习题 
第二篇　线性数据结构 
第3章　线性表 
3.1　线性表的概念及运算 
3.1.1　线性表的逻辑结构 
3.1.2　线性表的抽象数据类型 
3.2　线性表的顺序表示与实现 
3.2.1　线性表的顺序存储结构 
3.2.2　顺序表的基本运算 
3.2.3　顺序表的实现算法分析 
3.3　顺序表的应用举例 
3.4　线性表的链式表示与实现 
3.4.1　单链表的存储结构 
3.4.2　单链表的基本运算 
3.5　单链表应用举例 
3.6　循环单链表 
3.6.1　循环单链表的链式存储 
3.6.2　循环单链表的应用 
3.7　双向链表 
3.7.1　双向链表的存储结构 
3.7.2　双向链表的插入操作和删除操作 
3.8　双向链表的应用举例 
3.9　静态链表
……
第4章  栈 
第5章  队列 
第6章  串 
第7章  数组 
第8章  广义表 
第三篇  非线性数据结构
第9章  树 
第10章  图 
第四篇  查找和排序
第11章  查找 
第12章  内排序 
第13章  外排序

基本信息
  作　者： 严蔚敏，吴伟民 编著
出版时间： 2004-2-1
页　数： 334
ISBN ： 9787900643223
包　装： 平装
所属分类： 图书 >> 计算机/网络 >> 程序设计 >> C C++ C# VC VC++
编辑推荐
“数据结构”是计算机程序设计的重要理论技术基础，它不仅是计算机学科的核心课程，而且已成为其他理工专业的热门选修课。本书是为“数据结构”课程编写的教材，其内容选取符合教学大纲要求，并兼顾学科的广度和深度，适用面广。 
本书可作为计算机类专业的本科或专科教材，也可以作为信息类相关专业的选修教材，讲授学时可为50至80。教师可根据学时、专业和学生的实际情况，选讲或不讲目录页中带**的章节，甚至删去第5，8，11和12章。本书文字通俗、简明易懂、便于自学，也可供从事计算机应用等工作的科技人员参考。只需掌握程序设计基本技术便可学习本书。若具有离散数学和概率论的知识，则对书中某些内容更易理解。如果将本书《数据结构》（C语言版）和《数据结构》（第二版）作为关于数据结构及其箩法的C和Pascal程序设计的对照教材，则有助于快速且深刻地掌握这两种语言。
内容简介
《数据结构》（C语言版）是为“数据结构”课程编写的教材，也可作为学习数据结构及其算法的C程序设计的参考教材。 
本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用；后半部分主要讨论查找和排序的各种实现方法及其综合分析比较。其内容和章节编排与1992年4月出版的《数据结构》（第二版）基本一致，但在本书中更突出了抽象数据类型的概念。全书采用类C语言作为数据结构和算法的描述语言。 
本书概念表述严谨，逻辑推理严密，语言精炼，用词达意。并有配套出版的《数据结构题集）（C语言版）。既便于教学，又便于自学。 
本书后附有光盘，光盘中含有可在DOS环境下运行的以类C语言描述的“数据结构算法动态模拟辅助教学软件，以及在Windows环境下运行的以类PASCAL或类C两种语言描述的“数据结构算法动态模拟辅助教学软件”。 
本书可作为计算机类专业或信息类相关专业的本科或专科教材，也可供从事计算机工程与应用工作的科技工作者参考。
图书目录
第1章 绪论
第2章 线性表
第3章 栈和队列
第4章 串
第5章 数组和广义表
第6章 树和二叉树
第7章 图
第8章 动态存储管理
第9章 查找
第10章 内部排序
第11章 外部排序
第12章 文件
附录
参考书目

内容简介
“数据结构”是计算机及相关专业必修的核心基础课程。本书采用C和C#两种语言作为算法描述的语言，对常用的数据结构与算法作了系统的介绍，力求概念清晰简单，注重实际应用。本书通过两种语言对数据结构与算法的不同描述来揭示面向过程和面向对象两种不同的思想。全书共分为8章，依次介绍了数据结构与算法及本书用到的数学、C和C#知识、线性表、栈和队列、串和数组、树型结构和图结构，以及排序和查找等基本运算。
本书主要面向高职高专院校计算机专业的学生，也可作为非计算机专业学生的选修教材及计算机应用技术人员的自学参考书。　　
图书目录
第1章 绪论 1
1.1 数据结构 1
1.1.1 学习数据结构的必要性 1
1.1.2 基本概念和术语 2
1.2 算法 7
1.2.1 算法的特性 7
1.2.2 算法的评价标准 8
1.2.3 算法的时间复杂度 9
1.3 数学预备知识 11
1.3.1 集合 11
1.3.2 常用的数学术语 11
1.3.3 对数 12
1.3.4 递归 12
1.4 C预备知识 13
1.4.1 指针 13
1.4.2 结构体 14
1.5 C#预备知识 15
1.5.1 接口 15
1.5.2 泛型编程 19
本章小结 24
习题 25
第2章 线性表 27
2.1 线性表的逻辑结构 27
2.1.1 线性表的定义 27
2.1.2 线性表的基本操作 28
2.2 顺序表 30
2.2.1 顺序表的定义 30
2.2.2 顺序表数据关系的语言描述 31
2.2.3 顺序表数据操作的语言描述 32
2.2.4 顺序表应用举例 42
2.3 单链表 46
2.3.1 单链表的定义 47
2.3.2 单链表数据关系的语言描述 48
2.3.3 单链表数据操作的语言描述 50
2.3.4 单链表应用举例 65
2.4 其他链表 73
2.4.1 双向链表 73
2.4.2 循环链表 76
本章小结 76
习题 77
第3章 栈和队列 78
3.1 栈 78
3.1.1 栈的定义及基本运算 78
3.1.2 顺序栈的存储和运算实现 80
3.1.3 链栈的存储和运算实现 85
3.1.4 栈的应用举例 90
3.2 队列 96
3.2.1 队列的定义及基本运算 96
3.2.2 循环顺序队列的存储和运算实现 98
3.2.3 链队列的存储和运算实现 106
3.2.4 队列的应用举例 111
本章小结 113
习题 113
第4章 串和数组 115
4.1 串 115
4.1.1 串的基本概念及基本运算 115
4.1.2 串存储及基本运算实现 116
4.1.3 串的基本操作的实现 120
4.1.4 模式匹配 125
4.2 数组 131
4.2.1 数组的逻辑结构 131
4.2.2 数组的内存映像 132
本章小结 133
习题 133
第5章 树和二叉树 134
5.1 树 134
5.1.1 树的定义 134
5.1.2 树的相关术语 135
5.1.3 树的逻辑表示 136
5.1.4 树的基本操作 137
5.2 二叉树 138
5.2.1 二叉树的定义 138
5.2.2 二叉树的性质 139
5.2.3 二叉树的存储结构 141
5.2.4 二叉链表存储结构的语言描述 143
5.2.5 二叉树的遍历 146
5.2.6 线索二叉树 150
5.3 树与森林 153
5.3.1 树的存储 153
5.3.2 树、森林与二叉树的转换 157
5.3.3 树和森林的遍历 160
5.4 哈夫曼树 160
5.4.1 哈夫曼树的基本概念 160
5.4.2 哈夫曼树的实现 162
5.4.3 哈夫曼编码 166
5.5 二叉树的应用举例 167
本章小结 171
习题 172
第6章 图 174
6.1 图的基本概念 174
6.1.1 图的定义 174
6.1.2 图的基本术语 175
6.1.3 图的基本操作 178
6.2 图的存储结构 179
6.2.1 邻接矩阵 179
6.2.2 邻接表 187
6.3 图的遍历 199
6.3.1 深度优先遍历 199
6.3.2 广度优先遍历 202
6.4 图的应用 205
6.4.1 最小生成树 205
6.4.2 最短路径 210
6.4.3 拓扑排序 216
本章小结 218
习题 219
第7章 排序 221
7.1 基本概念 221
7.2 简单排序方法 222
7.2.1 直接插入排序 222
7.2.2 冒泡排序 225
7.2.3 简单选择排序 226
7.3 快速排序 229
7.4 堆排序 233
7.5 希尔排序 240
7.6 表插入排序 242
7.7 归并排序 247
7.8 树型选择排序 251
7.9 基数排序 252
7.9.1 多关键码排序 252
7.9.2 链式基数排序 253
7.10 各种排序方法的比较与讨论 255
本章小结 256
习题 257
第8章 查找 259
8.1 基本概念和术语 259
8.2 静态查找表 259
8.2.1 顺序查找 260
8.2.2 有序表的折半查找 261
8.2.3 索引查找 265
8.3 动态查找表 266
8.3.1 二叉排序树 266
8.3.2 平衡二叉树 276
8.3.3 B-树和B+树 278
8.4 哈希表 285
8.4.1 哈希表的基本概念 286
8.4.2 常用的哈希函数构造方法 286
8.4.3 处理冲突的方法 288
本章小结 290
习题 290
参考文献 292

图书信息
书 名: 数据  结构
作　者：熊回香
出版社： 清华大学出版社，北京交通大学出版社
出版时间： 2010年5月1日
ISBN: 9787512100824
开本： 16开
定价: 39.00元
内容简介
《数据结构(C/C++版)》主要内容分为两大部分，前半部分从抽象数据类型的角度讨论三大数据结构，即线性结构、层次结构和网状结构的逻辑特性、存储表示、基本操作及其应用；后半部分主要讨论查找和排序的各种实现方法和综合分析比较。
《数据结构(C/C++版)》共分为10章和1个附录，第1章为绪论，介绍数据结构的基本概念、算法分析的方法及与算法描述有关的C++知识；第2章为线性表，主要介绍线性表的两种存储结构——顺序表和链表及其基本操作的算法实现；第3章为堆栈和队列，介绍这两种特殊线性结构的概念、操作与应用；第4章为串，介绍串的概念、串的基本操作与串的模式匹配算法；第5章为数组和广义表，介绍数组、稀疏矩阵和广义表的概念与相关操作的算法实现；第6章为树形结构，介绍树和二叉树的概念与各种操作的算法实现，其中特别突出二叉树的各种递归算法方法；第7章为图，介绍图的概念、图的各种操作算法实现以及图的典型应用；第8章为查找，介绍各种查找算法的算法思想及其实现过程；第9章为排序，介绍各种内排序和外排序算法的实现过程；第10章为文件，介绍各类文件的组织结构及其操作；附录A中介绍了一个用C++描述的顺序表类。
《数据结构(C/C++版)》既适于作计算机及其相关专业的教材，又特别适合作信息管理与信息系统专业的教材；同时《数据结构(C/C++版)》的编写既考虑到了庞大的C语言读者群，又充分利用了C++对描述数据结构的独特优势(如数据传递、抽象性等)，使得《数据结构(C/C++版)》的读者群更加广泛。
图书目录
第1章 绪论
1.1 数据结构的产生和发展
1.1.1 数据结构的产生
1.1.2 数据结构的发展
1.2 数据结构的研究对象
1.3 基本概念和术语
1.4 数据结构与算法的关系
1.5 算法与算法分析
1.5.1 算法
1.5.2 算法的描述方法
1.5.3 算法设计目标
1.5.4 算法效率的度量
1.6 与算法描述有关的C++知识
1.6.1 C++的输入和输出
1.6.2 函数
1.6.3 类和对象
1.6.4 变量的引用类型
1.6.5 运算符重载
1.6.6 数据类型相关说明
1.6.7 两个相关的头文件
本章小结
习题一
第2章 线性表
2.1 线性表的基本概念
2.1.1 线性表的定义
2.1.2 线性表的抽象数据类型
2.2 线性表的顺序存储和基本操作
2.2.1 线性表的顺序存储——顺序表
2.2.2 顺序表的基本操作
2.2.3 顺序表基本操作的算法分析
2.3 线性表的链式存储和基本操作
2.3.1 链式存储的概念
2.3.2 单链表
2.3.3 单链表的基本操作
2.3.4 单链表基本操作的算法分析
2.3.5 双向链表
2.3.6 循环链表
*2.4 顺序表和链表的综合比较
*2.5 静态链表
*2.6 线性表算法设计举例
2.6.1 顺序表算法设计举例
2.6.2 单链表算法设计举例
本章小结
习题二
第3章 堆栈与队列
3.1 堆栈
3.1.1 堆栈的基本概念
3.1.2 堆栈的顺序存储和基本操作
3.1.3 堆栈的链式存储和基本操作
3.2 堆栈的应用举例
3.3 队列
3.3.1 队列的基本概念
3.3.2 队列的顺序存储和基本操作
3.3.3 队列的链式存储和基本操作
3.3.4 其他队列
*3.4 队列的应用举例
本章小结
习题三
第4章 串
4.1 串的基本概念
4.1.1 串的定义
4.1.2 串的抽象数据类型
4.2 串的顺序存储和基本操作
4.2.1 串的顺序存储——顺序串
4.2.2 顺序串的基本操作
4.3 串的链式存储和基本操作
4.3.1 串的链式存储——链式串
4.3.2 链式串的基本操作
4.4 串的模式匹配算法
4.4.1 Brute-Force算法
*4.4.2 KMP算法
4.5 串的应用举例
本章小结
习题四
第5章 数组和广义表
5.1 数组的基本概念
5.1.1 数组的定义
5.1.2 数组的抽象数据类型
5.2 数组的存储结构
5.2.1 一维数组的存储
5.2.2 多维数组的存储
5.3 数组的顺序存储表示和基本操作
5.3.1 数组的顺序存储表示
5.3.2 数组的基本操作
*5.3.3 数组的应用举例
5.4 矩阵的压缩存储
5.4.1 特殊矩阵的压缩存储
5.4.2 稀疏矩阵的压缩存储
*5.5 广义表
5.5.1 广义表的基本概念
5.5.2 广义表的存储结构
5.5.3 广义表的基本操作
本章小结
习题五
第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.3 线索二叉树
6.3.1 线索二叉树的基本概念
6.3.2 线索二叉树的存储结构
6.3.3 二叉树的线索化
6.3.4 线索二叉树的基本操作
6.4 哈夫曼树
6.4.1 哈夫曼树的基本概念
6.4.2 构造哈夫曼树
6.4.3 哈夫曼编码
6.5 树、森林与二叉树的转换
6.5.1 树与二叉树的转换
6.5.2 森林与二叉树的转换
*6.6 树的应用举例——PATRICIA tree
本章小结
习题六
第7章 图
7.1 图的基本概念
7.1.1 图的定义
7.1.2 图的基本术语
7.1.3 图的抽象数据类型
7.2 图的存储结构
7.2.1 邻接矩阵
7.2.2 邻接表
7.2.3 十字邻接表
7.2.4 邻接多重表
7.2.5 边集数组
7.3 图的实现
7.3.1 邻接矩阵存储结构下图基本操作的实现
7.3.2 邻接表存储结构下图基本操作的实现
7.4 图的遍历
7.4.1 深度优先遍历
7.4.2 广度优先遍历
7.5 最小生成树
7.5.1 最小生成树的概念
7.5.2 普里姆算法
7.5.3 克鲁斯卡尔算法
7.6 最短路径
7.6.1 最短路径的概念
7.6.2 从一顶点到其余各顶点的最短路径
7.6.3 每对顶点之间的最短路径
7.7 拓扑排序
7.7.1 拓扑排序的概念
7.7.2 拓扑排序的算法
7.8 关键路径
7.8.1 关键路径的概念
7.8.2 顶点事件的发生时间
7.8.3 求关键路径的算法
7.8.4 求关键路径的算法描述
本章小结
习题七
第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_树和B+树
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.3 选择排序
9.3.1 直接选择排序
9.3.2 堆排序
9.4 交换排序
9.4.1 冒泡排序
9.4.2 快速排序
9.5 归并排序
9.6 基数排序
*9.7 各种内排序方法的性能比较
*9.8 外排序
9.8.1 外存信息的存取
9.8.2 外排序的过程
9.8.3 多路平衡归并
9.8.4 初始归并段的生成
9.8.5 最佳归并树
本章小结
习题九
第10章 文件
10.1 文件概述
10.1.1 文件的存储介质
10.1.2 文件的基本概念
10.2 顺序文件
10.3 索引文件
10.4 ISAM文件
10.5 VSAM文件
10.6 哈希文件
10.7 多关键字文件
10.7.1 多重表文件
10.7.2 倒排文件
*10.8 文件的应用举例
本章小结
习题十
附录A用面向对象的方法(C++的类)描述顺序表类
参考文献 

图书信息
计算机应用专业系列教材  图书封面主编 ：许卓群
出版，发行：中央广播电视大学出版社
地址：北京市海淀区西四环中路45号
邮编：100039
经销：新华书店北京发行所
策划编辑：何勇军
印刷：北京德美印刷厂
印数：166501-199500
版本：2001年1月第1版
开本：787X1092 1/16
印张：21.25
字数：487千字
书号：ISBN 7-304-01976-X/TP.147
定价：28.00元
策划：钱辉镜
设计：沈雅芬，徐孝凯，何晓新
顾问：许卓群，任为民
课程建设指导小组：陈明（石油大学教授），郑纪蛟（浙江大学教授），侯炳辉（清华大学教授），高金源（北京航空航天大学教授）
图书介绍
数据结构课程是全国电大系统计算机应用专业的一门专业基础课和骨干课，本书就是根据该课程教学大纲的要求编写的。
图书目录
第一章 绪论
第二章 线性表
第三章 稀疏矩阵和广义表
第四章 栈和队列
第五章 树和二叉树
第六章 二叉树的应用
第七章 图
第八章 查找
第九章 排序
附录
参考书目 

图书信息
清华大学计算机系列教材  [1]书名：数据结构（用面向对象方法与C++描述）
出版者：清华大学出版社（北京清华大学学研楼，邮编100084）
印刷者：清华园胶印厂
发行者：新华书店总店北京发行所
开本：787X1092 1/16 
印张：26
字数：646千字
版次：1999年7月第1版
书号：ISBN 7-320-03405-2/TP.1845
印数：14001-20000
定价：26.00元
作者：殷人昆，陶永雷，谢若阳，盛绚华编著
图书介绍
[2]本书采用面向对象的观点讨论数据结构技术，并以兼有面向过程和面向对象双重特色的C++语言作为算法的描述工具，强化基本知识和基本能力的双基训练。全书条理清晰，通俗易懂，图文并茂，适于自学。
图书目录
第一章 绪论
第二章 数组
第三章 链表
第四章 栈和队列
第五章 递归（RECURVE） 
第六章 树与森林
第七章 集合与搜索
第八章 图
第九章 排序
第十章 索引结构与散列
附录

基本信息
书名：  数据结构数据结构
书号：7-113-13032
作者：赵敏媛 等
定价：20.00元
出版日期：2011年8月
页码：184页
策划编辑：严晓舟
适用专业：计算机专业
课程分类：数据结构与算法
出版单位：中国铁道出版社
内容简介
本书前半部分从抽象数据类型的角度讨论各种常用的数据结构及其应用，包括线性表、栈、队列、数组、树和二叉树、图等，阐述各种数据结构的逻辑结构，讨论它们在计算机中的存储表示，以及在不同存储结构下运算算法的实现，并对算法的效率进行了简要分析。本书后半部分主要讨论查找和排序的各种实现方法及其综合分析比较。全书采用C语言作为数据结构和算法的描述工具。为了帮助读者进一步深入理解教材内容，巩固概念，各章配有难易适当的习题，以适应不同程度读者练习的需要。
本书结构清晰、语言精练、注重应用，强调系统性和实用性的结合，适合作为高等学校计算机及相关专业的本科教材或参考书，也可作为计算机爱好者的自学参考书。[1]
图书目录
第1章  绪论 1
1.1  数据结构的概念 1
1.1.1  基本概念和术语 1
1.1.2  逻辑结构 2
1.1.3  存储结构 4
1.1.4  抽象数据类型 5
1.2  算法 7
1.2.1  算法的描述 7
1.2.2  算法设计的要求 7
1.2.3  算法分析 7
第2章  线性表 12
2.1  线性表的抽象数据类型 12
2.2  线性表的顺序存储结构 14
2.2.1  顺序表的类型定义 15
2.2.2  线性表基本运算在顺序表上的实现 15
2.2.3  顺序实现的算法分析 17
2.2.4  顺序表的应用举例 17
2.3  线性表的链式存储结构 19
2.3.1  单链表 19
2.3.2  单循环链表 26
2.3.3  双向链表 27
第3章  栈 31
3.1  栈的抽象数据类型 31
3.2  栈的顺序存储结构 33
3.2.1  顺序栈的类型定义 33
3.2.2  栈基本运算在顺序栈上的实现 34
3.2.3  顺序栈的应用举例 35
3.3  栈的链式存储结构 36
3.3.1  链栈的类型定义 37
3.3.2  栈基本运算在链栈上的实现 37
3.3.3  链栈的应用举例 38
3.4  栈与递归的实现 39
第4章  队列 42
4.1  队列的抽象数据类型 42
4.2  队列的顺序存储结构 44
4.2.1  循环队列的类型定义 45
4.2.2  队列基本运算在循环队列上的实现 45
4.2.3  循环队列的应用举例 46
4.3  队列的链式存储结构 47
4.3.1  链队列的类型定义 47
4.3.2  队列基本运算在链队列上的实现 48
4.3.3  链队列的应用举例 49
第5章  数组和稀疏矩阵 52
5.1  数组的概念与表示 52
5.1.1  数组的概念 52
5.1.2  数组的顺序表示 54
5.1.3  特殊矩阵的压缩存储 56
5.2  稀疏矩阵 57
5.2.1  稀疏矩阵的三元组表示 58
5.2.2  稀疏矩阵的十字链表表示 65
第6章  树和二叉树 69
6.1  树 69
6.1.1  树的定义和表示 69
6.1.2  树的基本术语和操作 71
6.1.3  树的存储结构 73
6.2  二叉树 76
6.2.1  二叉树的定义 76
6.2.2  二叉树的性质 79
6.2.3  二叉树的存储结构 81
6.3  二叉树的遍历 83
6.3.1  常用的二叉树遍历算法 83
6.3.2  遍历算法的应用 90
6.4  树和森林 92
6.4.1  森林转换为二叉树 92
6.4.2  二叉树转换为森林 93
6.4.3  树的遍历 94
6.4.4  森林的遍历 95
6.5  哈夫曼树及其应用 96
6.5.1  哈夫曼树 96
6.5.2  哈夫曼算法 97
6.5.3  哈夫曼编码 99
第7章  图 104
7.1  图的基本概念 104
7.1.1  图的抽象数据类型的定义 104
7.1.2  图的基本术语 106
7.2  图的存储结构 108
7.2.1  邻接矩阵 108
7.2.2  邻接表 110
7.3  图的遍历 112
7.3.1  深度优先搜索 112
7.3.2  广度优先搜索 114
7.4  最小生成树 115
7.4.1  普里姆算法 116
7.4.2  克鲁斯卡尔算法 119
7.5  拓扑排序 121
7.6  关键路径 124
7.7  最短路径 129
7.7.1  单源点最短路径 129
7.7.2  每对顶点之间的最短路径 131
第8章  查找 135
8.1  查找表 135
8.2  静态查找表 136
8.2.1  顺序查找 136
8.2.2  折半查找 137
8.2.3  分块查找 138
8.3  动态查找表 139
8.3.1  二叉排序树 139
8.3.2  平衡二叉树 143
8.4  哈希表 146
8.4.1  哈希函数的构造方法 146
8.4.2  哈希冲突的解决方法 147
第9章  排序 152
9.1  排序的基本概念 152
9.2  插入排序 153
9.2.1  直接插入排序 153
9.2.2  希尔排序 154
9.3  交换排序 156
9.3.1  冒泡排序 156
9.3.2  快速排序 157
9.4  选择排序 159
9.4.1  直接选择排序 159
9.4.2  堆排序 159
9.5  归并排序 161
9.6  基数排序 162
附录A  实验安排 167
附录B  中英名词对照表 169
参考文献

基本信息
作　者：严蔚敏 李冬梅 吴伟民
出版时间：2011-2-1 0:00:00  [1]
字　数：398千字
责任编辑：蒋亮
页　数：236页
开　本：16
ISBN书号：978-7-115-23490-2
所属分类：本科 >> 计算机类 >> 数据结构与算法
所属丛书：21世纪高等学校计算机规划教材——名家系列
定　价：￥28.00元
配套资源
本书包含如下可供下载的配套资源：
[ 电子教案 ] [ 习题答案 ] [ 勘误文档 ] [ 教学大纲 ] [ 案例代码 ]
编辑推荐
《数据结构(C语言版)》在选材与编排上，贴近当前普通高等院校“数据结构”课程的现状和发展趋势，符合最新研究生考试大纲，内容难度适度，突出实用性和应用性。全书共8章，内容包括绪论，线性表，栈和队列，串、数组和广义表，树和二又树，图，查找和排序：全书采用类C语言作为数据结构和算法的描述语言。《数据结构(C语言版)》可作为普通高等院校计算机和信息技术相关专业“数据结构”课程的教材使用，也可供从事计算机工程与应用工作的科技工作者参考。
精选内容，贴近普通高校课程现状
顺应发展，符合最新考研大纲要求
类C描述，培养算法设计应用能力
内容提要
本书在选材与编排上，贴近当前普通高等院校“数据结构”课程的现状和发展趋势，符合最新研究生考试大纲，内容难度适度，突出实用性和应用性。全书共8章，内容包括绪论，线性表，栈和队列，串、数组和广义表，树和二叉树，图，查找和排序。全书采用类C语言作为数据结构和算法的描述语言。
本书可作为普通高等院校计算机和信息技术相关专业“数据结构”课程的教材使用，也可供从事计算机工程与应用工作的科技工作者参考。
目　录

第1章　绪论　1
1.1　数据结构的研究内容　1
1.2　基本概念和术语　3
1.2.1　数据、数据元素、数据项和数据对象　3
1.2.2　数据结构　4
1.2.3　数据类型和抽象数据类型　6
1.3　抽象数据类型的表示与实现　7
1.4　算法和算法分析　11
1.4.1　算法的定义及特性　11
1.4.2　评价算法优劣的基本标准　11
1.4.3　算法的时间复杂度　12
1.4.4　算法的空间复杂度　14
1.5　小结　15
习题　16
第2章　线性表　18
2.1　线性表的类型定义　18
2.1.1　线性表的定义和特点　18
2.1.2　线性表的抽象数据类型定义　18
2.2　线性表的顺序表示和实现　19
2.2.1　线性表的顺序存储表示　19
2.2.2　顺序表中基本操作的实现　20
2.3　线性表的链式表示和实现　24
2.3.1　单链表的定义和表示　24
2.3.2　单链表基本操作的实现　26
2.3.3　循环链表　31
2.3.4　双向链表　32
2.4　线性表的应用　34
2.4.1　一般线性表的合并　34
2.4.2　有序表的合并　35
2.4.3　一元多项式的表示及相加　37
2.5　小结　40
习题　41
第3章　栈和队列　44
3.1　栈　44
3.1.1　栈的类型定义　44
3.1.2　顺序栈的表示和实现　45
3.1.3　链栈的表示和实现　47
3.2　栈的应用　48
3.2.1　数制转换　49
3.2.2　括号匹配的检验　49
3.2.3　表达式求值　51
3.3　栈与递归　54
3.3.1　采用递归算法解决的问题　54
3.3.2　递归过程与递归工作栈　57
3.3.3　递归算法的效率分析　59
3.3.4　将递归转换为非递归的方法　60
3.4　队列　61
3.4.1　队列的类型定义　61
3.4.2　循环队列——队列的顺序表示和实现　62
3.4.3　链队——队列的链式表示和实现　65
3.5　队列的应用　67
3.6　小结　69
习题　69
第4章　串、数组和广义表　73
4.1　串　73
4.1.1　串的类型定义　73
4.1.2　串的存储结构　75
4.1.3　串的模式匹配算法　76
4.2　数组　83
4.2.1　数组的类型定义　83
4.2.2　数组的顺序存储　84
4.2.3　特殊矩阵的压缩存储　85
4.3　广义表　87
4.3.1　广义表的定义　87
4.3.2　广义表的存储结构　88
4.4　小结　90
习题　91
第5章　树和二叉树　94
5.1　树的定义和基本术语　94
5.1.1　树的定义　94
5.1.2　树的基本术语　96
5.2　二叉树　97
5.2.1　二叉树的定义　97
5.2.2　二叉树的性质　100
5.2.3　二叉树的存储结构　102
5.3　遍历二叉树和线索二叉树　103
5.3.1　遍历二叉树　103
5.3.2　线索二叉树　109
5.4　树和森林　114
5.4.1　树的存储结构　114
5.4.2　森林与二叉树的转换　116
5.4.3　树和森林的遍历　116
5.5　赫夫曼树及其应用　117
5.5.1　赫夫曼树的基本概念　117
5.5.2　赫夫曼树的构造算法　118
5.5.3　赫夫曼编码　121
5.6　小结　123
习题　123
第6章　图　126
6.1　图的定义和基本术语　126
6.1.1　图的定义　126
6.1.2　图的基本术语　128
6.2　图的存储结构　129
6.2.1　邻接矩阵　130
6.2.2　邻接表　132
6.3　图的遍历　135
6.3.1　深度优先搜索　135
6.3.2　广度优先搜索　138
6.4　图的应用　139
6.4.1　最小生成树　139
6.4.2　最短路径　144
6.4.3　拓扑排序　150
6.4.4　关键路径　153
6.5　小结　158
习题　160
第7章　查找　164
7.1　查找的基本概念　164
7.2　线性表的查找　165
7.2.1　顺序查找　165
7.2.2　折半查找　166
7.3　树表的查找　169
7.3.1　二叉排序树　170
7.3.2　平衡二叉树　176
7.3.3　B-树　182
7.3.4　B+树　190
7.4　散列表的查找　192
7.4.1　散列表的基本概念　192
7.4.2　散列函数的构造方法　193
7.4.3　处理冲突的方法　195
7.4.4　散列表的查找　198
7.5　小结　201
习题　203
第8章　排序　207
8.1　基本概念和排序方法概述　207
8.1.1　排序的基本概念　207
8.1.2　排序方法的分类　208
8.1.3　待排序记录的存储方式　208
8.1.4　排序算法效率的评价指标　209
8.2　插入排序　209
8.2.1　直接插入排序　209
8.2.2　折半插入排序　211
8.2.3　希尔排序　212
8.3　交换排序　214
8.3.1　冒泡排序　215
8.3.2　快速排序　216
8.4　选择排序　219
8.4.1　简单选择排序　219
8.4.2　堆排序　221
8.5　归并排序　226
8.6　基数排序　228
8.6.1　多关键字的排序　228
8.6.2　链式基数排序　228
8.7　小结　232
习题　233