内容简介
本书是“十二五”普通高等教育本科规划教材,是根据高等学校计算机类专业教学指导委员会制定的“数据结构与算法”课程大纲和《全国硕士研究生入学统一考试计算机专业基础综合考试大纲》的要求编写而成。 本书共10章,内括基本概念、基本结构(线表、栈与队列、串、数组与广义表、树、图)和基本技术(查找与排序)三大部分,每章均附小结与典型题例,并配有大量的例题、实连贯强。本书配套的教学资源丰富,按章节知识树的结构构成括教学、部分扩展内容、课程设计与课程实、电子教案、算法源码等,适合学生自使用。 本书可作为高等学校计算机及相关专业数据结构课程的教材,也可供从事计算机应用开发的工程技术人员参考。
目录
第1章 绪论 1.1 数据结构的基础概念 1.2 数据结构的内容 1.3 算法 1.4 算法描述 1.5 算法能评价 1.5.1 算法的时间能分析 1.5.2 算法的空间能分析 1.5.3 算法能选择 1.6 数据结构与C语言表示 1.6.1 数据结构与程序设计的关联 1.6.2 结构化程序设计与函数的模块化 1.6.3 面向对象与抽象数据类型 1.6.4 算法描述规范与设计风格 1.7 关于学结构 1.8 结与提高 实第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.3.3 循环链表 2.3.4 双向链表 2.3.5 静态链表 2.4 线表应用——一元多项式的表示及相加 2.5 顺序表与链表的综合比较 2.5.1 顺序表和链表的比较 2.5.2 线表链式存储方式的比较 2.6 结与提高 2.6.1 主要知识点 2.6.2 典型题例 实第3章 限定线表——栈与队列 3.1 栈 3.1.1 栈的定义 3.1.2 栈的表示和实现 3.1.3 栈的应用举例 3.1.4 栈与递归的实现 3.2 队列 3.2.1 队列的定义 3.2.2 队列的表示和实现 3.2.3 队列的应用举例 3.3 结与提高 3.3.1 主要知识点 3.3.2 典型题例 实第4章 串 4.1 串的基本概念 4.2 串的存储实现 4.2.1 定长顺序串 4.2.2 堆串 4.2.3 块链串 4.3 串的应用举例:简单的行编辑器 4.4 结与提高 4.4.1 主要知识点 4.4.2 典型题例 实第5章 数组与广义表 5.1 数组的定义与运算 5.2 数组的顺序存储与实现 5.3 特殊矩阵的压缩存储 5.3.1 规律分布的特殊矩阵 5.3.2 稀疏矩阵 5.4 广义表 5.4.1 广义表的概念 5.4.2 广义表的存储结构 5.4.3 广义表的操作实现 5.5 结与提高 5.5.1 主要知识点 5.5.2 典型题例 实第6章 树与二r/> 6.1 树的定义与基本术语 6.2 二r/> 6.2.1 二叉树的定义与基本r/> 6.2.2 二叉树的质 6.2.3 二叉树的存储结构 6.3 二叉树的遍历与线索化 6.3.1 二叉树的遍历 6.3.2 遍历算法应用 6.3.3 基于栈的递归消除 6.3.4 线索二r/> 6.3.5 由遍历序列确定二r/> 6.4 树、森林和二叉树的关系 6.4.1 树的存储结构 6.4.2 树、森林与二叉树的相互转换 6.4.3 树与森林的遍历 6.5 哈夫曼树及其应用 6.5.1 哈夫曼树 6.5.2 哈夫曼编码 6.6 并查集 6.6.1 并查集定义 6.6.2 并查集存储与基本操作实现 6.6.3 应用举例:等价类划分 6.7 结与提高 6.7.1 主要知识点 6.7.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.4.3 短路径问题 7.5 结与提高 7.5.1 主要知识点 7.5.2 典型题例 实第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.4 计算式查找法——哈希法 8.4.1 哈希函数的构造方法 8.4.2 处理冲突的方法 8.4.3 哈希表的查找过程 8.4.4 哈希法能分析 8.5 结与提高 8.5.1 主要知识点 8.5.2 典型题例 实第9章 内部排序 9.1 排序的基本概念 9.2 插入类排序 9.2.1 直接插入排序 9.2.2 折半插入排序 9.2.3 希尔排序 9.2.4 小结 9.3 交换类排序 9.3.1 冒泡排序 9.3.2 快速排序 9.3.3 小结 9.4 选择类排序 9.4.1 简单选择排序 9.4.2 树形选择排序 9.4.3 堆排序 9.4.4 小结 9.5 归并排序 9.6 分配类排序 9.6.1 多关键字排序 9.6.2 链式基数排序 9.6.3 基数排序的顺序表实现 9.7 各种排序方法的综合比较 9.8 结与提高 9.8.1 主要知识点 9.8.2 典型题例 实第10章 外部排序 10.1 外排序的基本方法 10.1.1 磁盘排序 10.1.2 磁带排序 10.2 结与提高 0参考文献
摘要与插图
数据结构和算法是计算机求解问题过程的两大基石。著若的计照机科学家P下osnor 围出:在工业中起核心作用的是能量,而在计中起核心作用的是信息。计算我纤学露是“一种关于信息结构转换的科学”。信息结构(数服结构)是计算机科学研究的基本课题,数国结构又是算法研究的基础关于数据结构理论的研究,可以追衡到1972年C.A.R.HHoare览基的论文”数据结构笔记”,而现代计算机所采用的各类数据结构,早的系统论述应归于D.E.Kauil.的备着《计算福程序设计技巧》。随着计算机科学的飞速发展,数据结构的基确研究也逐海走间或热在开始介绍数据结构相关内容之前,首先需要回答识下问题①什么是数据结构?(定义)②)数据结构研究什么?(内容)(③采用什么方行研究?(方法)④采用什么工具对算法规行福述?(描述)⑤)如何对算法做能评价?(评价)⑥数据结构和C语言的关系是什么?(工具要点、现范要求)(7学结构有什么作用?(重要)本章将通过对这些问题与概念的简要介超,描述数图结构的基本照念、主要内容与插道现范,作为本门课程的梗概之序1.1数据结构的基础概念首先介绍数据结构的相关术语1.数据(data)数据是描述客观事物的数值、字符以及能输入计算机且能被处理的各种符号集合。换句活说,数据是对客观事物采用计算机能够识别、存储和处理的形式行的孩述。简而自之,数能是计算机化的信息数据的概念经历了与计算机发展相类似的发展过程。计算机一间世,数据作为源序的处理对象随之产生。早期计算机主要应用于数值计算、数据量小且结构简单、数据仅行算术通算与逻辑运算的需求、数据类型只有整型、实型、布尔型。当时的程序员把主要精力放在程序设计的技巧上,并不重视如何在计算机中组织数据。随着计算机软硬件的发展与应用领域的不断扩大,计算机应用领域发生了战略转移,非数值运算与处理所占的比例越来越高,数据的概念也得到极大的拓展。数含数值、字符、声音、图像等一切可以输人计算机中的符号集合,各种信息通过编码被划归到数据的范畴,大量复杂的非数值数据处理需求使数据的有效组织显得越来越重要。20世纪70年代后,微型计算机的普及以及数据库、人工智能等研一步推动了计算机技术的发展,人们越来越重视运用科学工具来探索数据和程序的内部关系及其之间的关系,采用新的观点来设计计算机体系,使计算技术发展为一门科学。数据的概念不再是狭义的,已由纯粹的数值概念发展为图像、字符、声音等各种符号。例如,对于C语言的编译程序来说,它加工的数据是字符流的源程序(.c),输出的结果是目标程序(.obj);对于C语言的连接程序来说,它加工的数据是目标程序(.obj),输出的结果是可执行程序(.exe),如图1.1所示。而对于整个C编译过程而言,由于它在操作系统控制下接受操作系统的调度,因此相对操作系统来说它又是数据。2.数据元素(data element)数据元素是组成数据的基本单位,是数据集合的个体,在计算机中通常作为一个整行考虑和处理。一个数据元素可由一个或多个数据项组成,数据项(data item)是有独立含义的小单位,此时的数据元素通常称为记录(record)。如表1.1所示,学籍表是数据,每一个学生的记录是一个数据元素,而每一个数据元素又由“学号”“姓名”“别”等数据项组成。3.数据对象(data object)数据对象是质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象是集合\=),±1,±2,…|,字母字符数据对象是集合C=|A,B,…,Z|,表1.1中所示的学籍表也可看作一数据对象。由此可看出,不论数据元素集合是无限集(如整数集)、有限集(如字符集),还是由个数据项组成的复合数据元素(如学籍表),只要质相同,都属于同一个数据对象……




