第一章 绪论
数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据项:数据的不可分割的最小单位。
数据对象:性质相同的数据元素的集合,是数据的一个子集。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
结构:数据元素相互之间的关系。1.集合 2.线性结构 3.树形结构 4.图状结构
逻辑结构:数据元素之间的逻辑关系。
物理结构(存储结构):在计算机中的表示。
(顺序映像)顺序存储结构:元素的相对位置。
(非顺序映像)链式存储结构:元素存储地址的指针。
数据类型:是一个值的集合和定义在这个值集上的一组操作的总称。
1.非结构的原子类型 2,结构类型
抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作。
1.原子类型 2.固定聚合类型 3.可变聚合类型
算法:是对特定问题求解的一种描述 1。有穷性 2。确定性 3。可行性。4。输入 5。输出
算法设计的要求:1.正确性 2.可读性 3.健壮性 4.效率与低存储量需求
频度:该语句重复执行的次数。
第二章 线性表
线性结构的特点:1."第一个"。2.“最后一个”。3.“只有一个前驱”。4.“只有一个后继”
一个线性表是n个数据元素的有限序列,含有大量记录的线性表又称文件。
线性表的顺序表示:用一组地址连续的存储单元依次存储线性表的数据元素。顺序表,随机存取。
插入移动数据:n-i+1。删除:n-i。平均移动表中一半元素。
移动,删除 O(n); union,O(a.length*b.length); 顺序表的合并(O(a.length+b.length));
线性表的链式表示:用一组任意的存储单元存储线性表的数据元素。数据域,指针域。一个指针域,单链表
头结点:第一个结点之前附设一个结点。
插入:s->next = p->next; p->next=s; 删除:p->next = p->next->next; O(n)
数组描述的链表叫静态链表。
循环链表 双向链表
一元多项式的表示及相加
第三章 栈和队列
3.1 栈
栈:限定只在表尾进行插入或杉树的线性表。表尾为栈顶,表头为栈底。
栈:后进先出。入栈:插入元素。出栈:删除栈顶元素。
栈的存储方法:1.顺序栈 2.链式
3.2 栈的应用举例:1.数制转换 2.括号匹配的检验 3.行编辑程序 4.迷宫求解 5.表达式求解
3.3 栈与递归的实现
3.4 队列
队列:先进先出。表的一端进行插入,一端进行删除。插入的一端叫队尾,删除的一端叫队头。
双端队列
链队列
循环队列
3.5离散事件模拟
第四章 串
4.1 串是由零个或多个字符组成的有限序列。
4.2 串的表示和实现 1.定长顺序存储表示 2.堆分配存储表示 3.串的块链存储表示
4.3 串的模式匹配算法
4.4 串操作应用举例 1.文本编辑 2.建立词索引表
第五章 数组和广义表
5.1数组的定义
5.2数组的顺序表示与实现 1.以列序为主序的存储方式 2.以行序为主序的存储方式
5.3 矩阵的压缩存储:为多个值相同的元只分配一个存储空间;对零元不分配空间。
特殊矩阵:值相同的元素或者零元素在矩阵中的分布有一定规律
稀疏矩阵:值相同的元素或者零元素在矩阵中的分布没有规律。1。三元组顺序表 2。行逻辑链接的顺序表 3.十字链表
5.4 广义表的定义 (列表)
1.列表是一个多层次的结构 2.列表可以为其他列表所共享 3.列表可以是一个递归的表
5.5 广义表的存储结构 链式存储
第六章 树和二叉树
6.1 树的定义和基本术语
a.嵌套集合 b.广义表的形式 c.凹入表示法
结点拥有的子树数称为结点的度,度为0的结点称为叶子或终端结点,度不为0的结点称为非终端结点或分支结点。
树的度是树内各节点的度的最大值。孩子,双亲,兄弟,祖先,子孙。
树中结点的最大层次称为树的深度或高度。
从左到右有次序叫有序树。森林是m棵互不相交树的集合。
6.2 二叉树
每个结点至多只有两棵子树,二叉树中不存在度大于2的结点,子树有左右之分。
二叉树的5种基本形态:1.空二叉树 2.仅有根节点 3.右子树为空 4.左子树为空 5.左右子树非空
二叉树的性质:1.在二叉树的第i层至多有2(i-1)次方个结点
2.深度为K的二叉树至多有2的k次方-1个结点
3.对任何一棵二叉树终端结点数为n0,度为2的结点数为n2,则n0=n2+1
深度为K且有2的K次方-1个结点的二叉树为满二叉树
完全二叉树:从1到N的结点一一对应。
4.具有n个结点的完全二叉树的深度为[log2n]+1
5.....
二叉树的存储结构:1顺序存储结构 2.链式存储结构 二叉链表,三叉链表
6.3 遍历二叉树和线索二叉树
遍历二叉树:
1.先序遍历 根左右
2.中序遍历 左根右
3.后序遍历 左右根
线索链表,线索,线索二叉树,线索化
6.4 树和森林
树的存储结构:1.双亲表示法 2.孩子表示法 3.孩子兄弟表示法
森林和二叉树的转换:1.森林转化为二叉树 2.二叉树转化为森林
1.先序遍历森林 2.中序遍历森林
6.6 赫夫曼树及其应用
赫夫曼树(最优二叉树):带权路径长度最小的二叉树
赫夫曼编码
第七章 图
7.1 图的定义和术语
7.2 图的存储结构
1.数组表示法 2.邻接表 3.十字链表 4.邻接多重表
7.3 图的遍历
1.深度优先搜索 2.广度优先搜索
7.4 图的连通性问题
7.5 有向无环图及其应用
7.6 最短路径
第八章 动态存储管理
第九章 查找
静态查找(1.查询,2检索属性),动态查找(3.插入,4.删除),主关键字(唯一标示一个记录),次关键字
静态查找:
1.顺序查找:从表中最后一个记录开始,逐个比较。平均查找长度:n+1/2(n大时,效率低,算法简单适用面广)
2.折半查找:平均查找长度:log2(n+1)-1 (限于顺序存储结构,线性链表无法查找)(只适用于有序表)
斐波那契查找,插值查找
3.静态树表的查找(次优查找树) 查找概率不等
4.索引顺序表的查找,分块查找
动态查找:二叉排序树,平衡二叉树,B-树,B+树,键树(数字查找树)
哈希表
第十章 内部排序
稳定(排序后的序列和排序前一样),不稳定(排序后的序列和排序前不一样)
10.2 插入排序
直接插入排序 希尔排序
10.3 交换排序
冒泡排序 快速排序
10.4 选择排序
简单选择排序 堆排序
10.5 归并排序
归并排序
第十一章 外部排序
第十二章 文件