0.前言
基本内容(讲什么)
重要性
1. 绪论
1.1 数据结构的研究内容
小结
1.2基本概念和术语
1.2.1数据、数据元素、数据项、数据对象
1.数据
2.数据元素
3.数据项
4.数据对象
1.2.2数据结构
1.数据结构的两个层次
逻辑结构的种类
存储结构的种类(掌握顺序和链式)
1.2.3数据类型和抽象数据类型
1.数据类型
2.抽象数据类型
1.2.4小结
1.3抽象数据类型的表示与实现
1.4算法和算法分析
1.4.1算法的定义
1.4.2算法的描述
1.4.3算法与程序
1.4.4算法特性
1.4.5算法设计要求
1.4.6算法效率
1.算法时间效率的度量
算法渐进时间复杂度
算法复杂度的比较
2.算法空间效率
渐进空间复杂度
1.4.7算法小结
2.线性表
知识回顾
2.1 线性表的定义和特点
2.2 案例引入
2.3 线性表的类型定义
基本操作
2.4 线性表的顺序存储结构与实现
补充:元素类型说明
补充:数组的定义
补充:C语言的内存动态分配
补充:C++的内存动态分配
补充:C++中参数传递
2.4.1线性表的顺序存储表示
2.4.2线性表基本操作的实现
1.线性表L的初始化
2.销毁和清空线性表L
3.线性表L的长度和判断是否为空
4.顺序表的取值GetELem
5.顺序表的查找LocateELem
6.顺序表的插入ListInsert
7.顺序表的删除ListDelete
2.4.3顺序表小结
2.5 线性表的链式存储结构与实现
1.知识回顾
2.链式存储结构
3.链式存储结构有关的术语
4.讨论
5.链表的特点
2.5.1单链表的定义和表示
单链表的存储结构
2.5.2单链表基本操作的实现
1.补充单链表的几种常用简单算法
2.知识回顾
3.基本操作实现-取值GetELem
4.基本操作实现-查找LocateELem
5.基本操作实现-插入ListInsert
6.基本操作实现-删除ListDelete
7.时间效率分析
8.单链表的建立CreateList
头插法
尾插法
2.5.3循环链表
1.带尾指针的循环链表的合并
2.5.4双向链表
1.双向链表的插入ListInsert
1.双向链表的删除ListDelete
2.5.5单链表、循环链表和双向链表的时间效率比较
2.6 顺序表和链表的比较
2.7 线性表的应用
2.7.1线性表的合并
2.7.2有序表的合并
用顺序表实现
用链表实现
2.8案例分析与实现
1.一元多项式
2.稀疏多项式
3.图书管理系统
3. 栈和队列
3.1栈和队列的定义和特点
1.栈
栈的相关概念
栈的示意图
栈与一般线性表的不同
2.队列
队列的相关概念
3.2案例引入
1.进制转换
2.括号匹配的检查
3.表达式求值
4.舞伴问题
3.3栈的表示和操作的实现
3.3.1栈的抽象数据类型定义
3.3.2顺序栈的表示与实现
1.顺序栈的表示
2.顺序栈的实现
顺序栈判断栈是否为空
清空顺序栈
销毁顺序栈
顺序栈的入栈
顺序栈的出栈
3.3.3链栈的表示与实现
1.链栈的表示
2.链栈的实现
链栈的初始化
判断链栈是否为空
链栈的入栈
链栈的出栈
取栈顶元素
3.4栈与递归
1.递归的定义
2.以下三种情况常用到递归方法
递归定义的数学函数
具有递归特性的数据结构
可递归求解的问题
3.递归问题-用分治法求解
函数调用过程
递归的优缺点
尾递归->循环结构
单向递归->循环结构
4.借助栈来改写递归
3.5队列的表示和操作的实现
3.5.1队列的抽象数据类型定义
3.5.2循环队列的顺序表示与实现
1.队列的初始化
2.队列的长度
2.循环队列的入队
3.循环队列的出队
4.取队头元素
3.5.3队列的链式表示与实现
1.链队列的初始化
2.销毁链队列
3.将元素e入队
4.链队列出队
4.求链队列的队头元素
4. 串、数组和广义表
4.1串的定义
4.2案例引入
4.3串的类型定义、存储结构及其运算
4.3.1串的类型定义
4.3.2存储结构
1.顺序存储结构
2.链式存储结构
4.3.3串的模式匹配算法
1.BP算法
2.KMP算法
4.4数组
4.4.1数据的抽象数据类型定义
1.基本操作
4.4.2数组的顺序存储
1.一维数组
2.二维数组
3.三维数组
4.n维数组
4.4.3特殊矩阵的压缩存储
1.对称矩阵
2.三角矩阵
3.对角矩阵
4.稀疏矩阵存储
顺序存储结构
十字链表
4.5广义表
广义表的性质
广义表和线性表的区别
广义表的基本运算
4.6案例分析与实现
5.树和二叉树
5.1树和二叉树的定义
5.1.1树的定义
5.1.2树的基本术语
树结构和线性结构的比较
5.1.3二叉树的定义
二叉树的五种基本形态
5.2案例引入
1.数据压缩问题
2.利用二叉树求解表达式的值
5.3树和二叉树的抽象数据类型定义
基本操作
5.4二叉树的性质和存储结构
5.4.1性质
1.性质1
2.性质2
3.性质3
4.特殊形式的二叉树
满二叉树
完全二叉树
性质4
性质5
5.4.2存储结构
1.顺序存储结构
2.链式存储结构
5.5遍历二叉树和线索二叉树
5.5.1遍历二叉树
1.遍历二叉树算法描述
先序遍历二叉树的操作定义
中序遍历二叉树的操作定义
后序遍历二叉树的操作定义
例题
2.根据遍历序列确定二叉树
例题:已知先序和中序序列求二叉树
例题:已知中序和后序序列求二叉树
3.遍的算法实现
先序遍历
中序遍历
后序遍历
遍历算法分析
4.遍历二叉树的非递归算法
5.二叉树的层次遍历
6.二叉树遍历算法的应用
1.二叉树遍历算法的应用-复制二叉树
2.二叉树遍历算法的应用-计算二叉树的深度
3.二叉树遍历算法的应用-计算二叉树的结点总数
4.二叉树遍历算法的应用-计算二叉树的叶子结点数
5.5.2线索二叉树
1.先序线索二叉树
2.中序线索二叉树
3.后序线索二叉树
练习
5.6树和森林
5.6.1树的存储结构
1.双亲表示法
2.孩子链表
3.孩子兄弟表示法
5.6.2树和二叉树的转换
5.6.3森林和二叉树的转换
5.6.4树和森林的遍历
1.树的遍历
2.森林的遍历
5.7哈夫曼树及其应用
5.7.1哈夫曼树的基本概念
5.7.2哈夫曼树的构造算法
总结
哈夫曼树的构造算法的实现
5.7.3哈夫曼编码
1.文件编码和解码-应用举例
编码
解码
6.图
回顾-数据的逻辑结构
6.1图的定义和基本术语