本书是普通高等教育“十一五”国家级规划教材,可作为普通高等学校计算机及相近专业本科的数据结构课程教材。
本书精选基础理论内容,重点是数据结构设计和算法设计,通过降低理论难度和抽象性,加强实践环节等措施,进一步增强学生的理解能力和应用能力,力求取得较好的教学效果。本书全面系统地介绍数据结构的基础理论和算法设计方法,阐明线性表、树、图等数据模型的逻辑结构,讨论它们在计算机中的存储结构,讨论每种数据结构所能进行的多种操作,以及这些操作的算法设计与实现;针对软件设计中应用频繁的查找和排序问题,根据不同数据结构对操作的实际需求,给出多种查找和排序算法,并分析算法的执行效率。本书的内容选择适合工科院校,理论叙述精练,简明扼要,结构安排合理,由浅入深,层次分明,重点突出,算法分析透彻,程序结构严谨规范。内容涉及的广度和深度符合本科培养目标的要求。
本书为普通高等教育“十一五”国家级规划教材。
本书全面系统地介绍数据结构的基础理论和算法设计方法,包括线性表、树、图等数据结构以及查找和排序算法。本书采用Java语言以面向对象方法设计并实现了全部的数据结构及算法。本书精选基础理论内容,重点是数据结构设计和算法设计,通过降低理论难度和抽象性,加强实践环节等措施,力求增强学生的理解能力和应用能力。内容涉及的广度和深度符合本科培养目标的要求。
本书可作为普通高等学校计算机及相近专业本科生的数据结构课程教材,也可作为从事计算机软件开发和工程应用人员的参考书。
第0章 Java程序设计基础
0.1 Java的特点和优势
0.2 Java语言基础
0.2.1 语言成分
0.2.2 流程控制语句
0.2.3 数组
0.2.4 字符串
0.3 面向对象程序设计
0.3.1 类和对象
0.3.2 类的封装性
0.3.3 类的继承性
0.3.4 类的多态性
0.3.5 抽象类和最终类
0.3.6 接口
0.3.7 内部类
0.3.8 包
0.4 异常处理
0.4.1 Java的错误和异常
0.4.2 抛出和处理异常
0.5 Java的标准输入/输出
习题0
实验0 Java程序设计基础
第1章 绪论
1.1 数据结构的基本概念
1.1.1 为什么要学习数据结构
1.1.2 什么是数据结构
1.1.3 数据的逻辑结构
1.1.4 数据的存储结构
1.1.5 数据操作
1.1.6 用Java语言描述数据结构
1.2 算法
1.2.1 什么是算法
1.2.2 算法分析
1.2.3 算法设计实例
1.2.4 递归算法
习题1
实验1 算法设计
第2章 线性表
2.1 线性表抽象数据类型
2.2 线性表的顺序表示和实现
2.3 线性表的链式表示和实现
2.3.1 线性表的链式存储结构
2.3.2 单链表
2.3.3 双链表
*2.4 迭代器
2.4.1 迭代接口
2.4.2 基于迭代器的操作
2.4.3 提供迭代器对象
习题2
实验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.2.4 队列的应用
习题3
实验3 栈和队列及其应用
第4章 串
4.1 串抽象数据类型
4.1.1 串的基本概念
4.1.2 串抽象数据类型
4.2 串的表示和实现
4.2.1 串的存储结构
4.2.2 字符串类String
4.2.3 字符串类StringBuffer
4.3 串的模式匹配
4.3.1 朴素的模式匹配(Brute-Force)算法
4.3.2 无回溯的模式匹配(KMP)算法
习题4
实验4 串的基本操作及模式匹配应用
第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
实验5 特殊矩阵和广义表的存储和运算
第6章 树和二叉树
6.1 树及其抽象数据类型
6.1.1 树定义
6.1.2 树的术语
6.1.3 树的表示法
6.1.4 树抽象数据类型
6.2 二叉树及其抽象数据类型
6.2.1 二叉树定义
6.2.2 二叉树性质
6.2.3 二叉树抽象数据类型
6.3 二叉树的表示和实现
6.3.1 二叉树的存储结构
6.3.2 二叉树的二叉链表实现
6.3.3 二叉树的遍历
6.3.4 构造二叉树
6.3.5 二叉树的插入和删除操作
6.3.6 二叉树遍历的非递归算法
6.3.7 二叉树的层次遍历
6.4 线索二叉树
6.4.1 线索二叉树定义
6.4.2 中序线索二叉树
6.5 哈夫曼编码与哈夫曼树
6.5.1 哈夫曼编码
6.5.2 哈夫曼树
6.6 树的表示
6.6.1 树的存储结构
6.6.2 树的遍历
习题6
实验6 二叉树的基本操作
第7章 图
7.1 图及其抽象数据类型
7.1.1 图的基本概念
7.1.2 图抽象数据类型
7.2 图的表示和实现
7.2.1 图的邻接矩阵表示
7.2.2 图的邻接表表示
7.3 图的遍历
7.3.1 图的深度优先搜索遍历
7.3.2 图的广度优先搜索遍历
7.4 最小生成树
7.4.1 生成树
7.4.2 最小生成树的构造算法
7.5 最短路径
习题7
实验7 图的表示和操作
第8章 查找
8.1 查找的基本概念
8.2 基于线性表的查找
8.2.1 顺序查找
8.2.2 基于有序顺序表的折半查找
8.2.3 基于索引顺序表的分块查找
8.3 树结构的查找
8.3.1 二叉排序树及其查找
8.3.2 平衡二叉树
8.4 散列
8.4.1 散列表
8.4.2 散列函数
8.4.3 处理冲突
8.4.4 构造链地址法的散列表
习题8
实验8 查找算法及其效率分析
第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
实验9 排序算法设计及分析
第10章 综合应用设计
10.1 Java集合框架
10.1.1 数组
10.1.2 集合
10.2 使用复杂的Swing组件
10.2.1 列表框JList
10.2.2 表格JTable
10.2.3 树JTree
10.3 课程设计的实例和选题
10.3.1 用预见算法解骑士游历问题
10.3.2 课程设计选题
第11章 Java开发运行环境
11.1 JDK
11.1.1 JDK的安装与设置
11.1.2 运行Java Application程序
11.1.3 查看Java类库与包等级
11.1.4 创建、声明和导入包
11.2 使用JCreator
11.2.1 JCreator集成开发环境
11.2.2 创建、编译并运行一个项目
11.2.3 一个工作区包含多个项目
11.2.4 配置JDK
11.2.5 程序调试技术
附录A ASCII字符与Unicode值
附录B Java关键字
附录C Java基本数据类型
附录D Java运算符及其优先级
附录E java.lang语言包部分类库
附录F JCreator 4.5常用菜单命令
附录G 本书数据结构包说明