数据结构复习
目录
第一章 绪论
第二章 线性表
第三章 栈和队列
第四章 串
第六章 树和二叉树
第七章 图
第九章 查找
第十章 排序
第一章 绪论
-
概念
- 数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据)间的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义和实现相应运算的学科。
- 非数值类的计算主要包括:图、数、数据库相关等方面的内容
- 逻辑结构,指数据元素之间的逻辑关系
-
存储结构,指数据元素及其关系在计算机存储器中的存储方式,也称为数据的物理结构。
- 顺序存储结构:数据元素存储在一段地址连续的内存区域,用存储单元地址之间的关系表示元素之间的逻辑关系。
- 链式存储结构:数据元素的存储空间可以不连续,需要额外的存储单元存储元素之间的逻辑关系。
- 抽象数据类型(ADT)
-
算法的五个特性:
- 有穷性:有穷步+有穷时间/每一步
- 确定性:指令的语义无二义性
- 可行性:算法能用基本操作完成
- 输入:零个或多个输入
- 输出:一个或多个输出
- 语句频度:运算次数
第二章 线性表
-
性质:
- 线性表中元素之间的关系是线性关系
-
顺序表
-
查找
- 遍历顺序表中的数组
-
插入
-
流程:
- 判定插入位置是否合法
- 判断空间是否充足,不充足的话增长顺序表、修改顺序表长度属性
- 插入位置后的所有元素后移
- 插入元素
- 修改顺序表长度属性
-
时间复杂度:
- 最好T(n)=O(1)
- 最坏T(n)=O(n)
-
-
删除
-
流程:
- 判断删除位置是否合法
- 找到待删除元素
- 被删除元素后所有元素前移
- 修改顺序表长度等善后工作
-
时间复杂度:
- 最好:T(n)=O(1)
- 最坏:T(n)=O(n)
-
-
-
链表
-
查找
- 从第一个结点开始遍历所有结点
-
插入
-
流程:
- 找到插入位置
- 修改要插入结点的指针
- 修改插入位置前的指针
- 时间复杂度:T(n)=O(n)(时间复杂度多花在查找上)
-
-
删除
-
流程:
- 找到删除位置
- 修改要删除结点前的指针
- 释放被删除结点空间
- 时间复杂度:T(n)=O(n)(时间复杂度多花在查找上)
-
-
-
顺序表链表对比
- 空间利用率:顺序表胜
- 随机读取:顺序表胜
- 增删:链表胜
-
双向链表
- 注意前后指针修改,其他的和单链表无异
-
线性表应用
- 单链表:一元多项式加减法
- 循环链表:约瑟夫环
第三章 栈和队列
-
栈
- 特点:先进后出
- 入栈、进栈、压栈的表示:PUSH、S
- 出栈、弹栈的表示:POP、X
-
栈的顺序存储
-
初始化
- 结构:栈底指针,栈顶索引、栈空间大小
-
入栈
-
流程:
- 检验是否栈满
- 进栈
- 修改栈顶索引
-
-
出栈
-
流程:
- 检验是否栈空
- 出栈
- 修改栈顶索引
-
-
-
栈的链式存储
-
特点:
- 头结点保证在空栈的时候标志栈存在
- 用头插法加入栈,头结点所指的是栈顶元素
-
-
栈的应用
- 数制转换
- 括号匹配
- 迷宫求解
-
队列
- 特点:先入先出
-
链队列
- 尾插法
-
循环队列
- 头尾指向同一个表示队空
- (头+1)%MAXSIZE=尾,是队满
第四章 串
-
相关定义
- 串的长度:串中所包含的字符个数
- 空串:长度为零的串,它不包含任何字符
- 空白串:通常将仅由一个或多个空格组成的串称为空白串
-
模式匹配
-
暴力算法:
- 描述:用模式串逐一和以主串的每一个字符为首字符的字符串进行比对
-
KMP算法:
- 原理:利用模式串的某一段与自身的某一段可能相同,以减少在比对时的不断重复,即通过增加对模式串的认识,减少重复次数。
-
NEXT的求法
-
举例:a b a a b c a c
1 1 2 2 3 1 2 1—>01122312
- 慢求方法描述:在每一个字符下计算以当前字符为结尾,最长的与模式串相同的子串长度x。在字符下写x+1。每一个字符都写完后,在这串数前面加个0,去掉尾部的数字,就是next数组的值。
- 快求方法:暂空
-
-
第六章 树和二叉树
-
特殊的树
- 完全二叉树:最后一层的叶子从左到右不间断,其余层都是满的
- 满二叉树:每一层都满
-
二叉树的存储方式
- 链式存储
- 顺序存储
-
二叉树的遍历
- 先序:中左右
- 中序:左中右(类似把树拍成一条线后的顺序)
- 后序:左右中
- 层次遍历:利用队列
-
线索二叉树
当二叉链表中结点的孩子指针为空时,将空的左孩子指针设置为指向中序遍历序列的直接前驱结点、空的右孩子指针设置为指向中序遍历序列的直接后继结点。
-
二叉树的表示法
- 双亲表示法
- 孩子表示法
- 孩子兄弟表示法
- 树、森林、二叉树转换(利用的是孩子兄弟表示法)
-
哈夫曼树(最优二叉树)
- WPL = n∑k=1 w k*l k
- 左0右1
- 构造过程,不断用其中最小的两个子树沟造成新的树
-
必会技能:
- 根据先中序、中后序遍历的结果构造出二叉树
第七章 图
-
相关概念
- 入度
- 出度
- 有向图
- 无向图
- 路径
- 回路
- 连通图
- 强连通图
- 完全图:每两个结点间都有边(弧)
-
图的存储结构
-
图的遍历
- DFS深度优先
- BFS广度优先
-
最小代价生成树
-
有向无环图的应用
-
AOV网络
- 关键路径
-
拓扑排序
- 做法,不断的从图中择出一个顶点,要求这个顶点没有前趋
-
狄杰斯特拉
- 留给算法吧
-
Floyd
- 留给算法吧
-
第九章 查找
-
顺序查找(静态查找)
- 从头到尾挨个看的查找方式
- 可以在尾部增加监视哨,作为查找结束的标记
- 平均查找长度(ASL)
-
有序数组的顺序查找
- 注意查到大于(或小于)要查找的数的时候就已经查找失败了
-
折半查找
-
ASL成功
- 把每一个元素在判定树中的层数求和,处以判定树中结点个数
-
ASL失败
- 把每一个叶子结点所在层数X2,每一个只有一个孩子的结点所在层数X1求和,除以这些数的个数。
-
-
二叉排序树
- 二叉排序树的构造源于元素个数次插入操作
- 每次插入后的位置为查找失败时所在的位置
- 删除操作是用被删除元素在中序遍历时的前趋或后继元素替代之
- 二叉排序树的查找性能
-
平衡二叉树
-
构造:一个边插入边调整的过程,使树能一直满足平衡二叉树的要求
- 构造中的平衡因子,左+右-
-
四种不平衡
- LL 右旋
- RR 左旋
- LR 先左后右
- RL 先右后左5
-
-
哈希表
-
构造方式
- 直接定址法:直接用数本身
- 数字分析法:可取数中的几位作为哈希地址
- 平方取中法:数字平方后做数字分析法
- 折叠法:把一个数字按几位一组拆分后加和截断做哈希地址
- 除留余数法:原数除以一个数,得到的余数作为哈希地址
- 随机数法:
-
冲突处理
- 开放定址法:a位置被占用就用a+1,一直下去
-
链表法:所有这个哈希地址上的数都用链表串起来
- (PS:这个就是桶排序的那个样子)
-
装填因子
- 所谓装填因子是指散列表中存入的元素个数n与哈希表的大小m的比值,即装填因子α =n/m
- ASL
-
- B+B- 暂略
第十章 排序
见算法复习