数据结构复习提纲

算法的五个特征

有穷性
确定性
可行性
输入
输出

设计算法通常应考虑

正确性
可读性
健壮性
算法效率 时间复杂度

线性表

是n个类型相同数据元素的有限序列

线性表的特性

有限性
相同性
相继性

广义表的结构特点

数据元素间具有相对次序
长度为最外层包含元素的个数
深度为所含括弧的重数
可共享
可递归–递归表深度无限,长度有限
任意非空广义表均可分解为表头和表尾

树的有关术语

结点层:根结点的层定义为1
树的深度:树的最大结点层
结点的度:结点子树的个数
树的度:树中最大的结点的度
叶子结点:度为0的结点

二叉树特点

二叉树每个结点度≤2
左右子树不能颠倒
递归结构

满二叉树

深度为k的二叉树,有2^k-1个结点

完全二叉树

二叉树中所含的n个结点和满二叉树中编号为1至n的结点一一对应

二叉树的性质

1.第i层最多有2^(i-1)个结点
2.深度为k的二叉树最多有2^k-1个结点
3.具有n个结点的完全二叉树的深度为?(log2 n)(向下取整)+1
4.若度数为0的结点数为N0,度数为1的结点数为N1,度数为2的结点数为N2,则N0 = N2 + 1
5.对按层编号的完全二叉树,对其任意一个编号为i的结点,若i = 1,则无双亲结点,否则其双亲结点为(i / 2)(向下取整)
6.n个结点的二叉树中,共有n + 1个空指针域

二叉树的按层遍历算法

类似于广度优先算法

等价二叉树

相同结构

等价二叉树

相同结构及相同数值

树的表示方法

双亲表示法
孩子链表示法
双亲孩子表示法(邻接表)
孩子兄弟表示法(左指针指向第一个孩子结点,右指针指向右边第一个兄弟结点)

Huffman树的相关概念

结点的路径长度:从根结点到该结点的路径上分支的数目
树的路径长度:树中每个结点的路径长度之和
树的带权路径长度:树中所有叶子结点的带权路径长度之和

内外节点的相关概念

内节点路径长度I:从根结点到每个内结点的路长的总和
外结点路径长度E:从根结点到每个外结点的路长的总和
E = I + 2 * n

Huffman树的应用

决策–成绩系统

图的定义

完全图:含有n*(n - 1)/ 2条边的无向图
有向完全图:含有n*(n - 1)条边的有向图

图的存储结构

邻接矩阵:以1、0表示有无,若有权则表示权值

邻接表:类似树的双亲孩子表示法

邻接表的特点

1.对于顶点多边少的图通常采用邻接表
2.容易找到任意顶点的第一个临街点
3.无向图的边数等于邻接表中边结点数的一半
4.有向图的弧数等于邻接表中的边结点数

生成树

深度优先生成树
广度优先生成树

最小生成树

Prim算法,加入顶点
Kruskal算法,加入边

拓扑排序有关概念

顶点活动网(Activity on vertex netWork – AOV):顶点表示活动,边表示活动间的关系
拓扑序列:先后关系

拓扑排序特点

不唯一性
无环性
可判断有无环

关键路径有关概念

边活动网(Activity on Edge – AOE):顶点表示事件,边表示活动
唯一源点
唯一汇点
关键路径:AOE网中,路径长度最长的路径
关键活动:关键路径上的活动

事件的最早发生时间

ve(j) = 从源点到顶点j的最长路径长度;
(正向找最长)

事件的最迟发生时间

vl(k) = vn的最早发生时间ve(n)-vk到vn的最长路径长度;
(逆向找最长)

活动的最早开始时间

若活动ai是由弧<vk,vj>表示,则活动ai的最早开始时间应等于事件vk的最早发生时间。因此,有:e[i] = ve[k]

活动最晚开始时间

若活动ai是由弧<vk,vj>表示,则活动ai的最晚开始时间应等于事件vj的最迟发生时间减去<vk,vj>的持续时间即l[i]=vl[j]-dut<vk,vj>

关键活动

活动的最早开始时间等于活动的最晚开始时间

Dijkstra算法

找最小距离点,加入,更新路径

Floyed算法

i、j、k三重循环找最小–五行算法

静态查找

顺序查找–从后往前–O(N)
折半查找–O(log2 N)
索引顺序表

动态查找

二叉排序树(BST)–左子树值小于根结点值,右子树值大于根结点值
平衡二叉树()–左右子树高度之差绝对值不超过1的二叉排序树

平衡二叉树

平衡因子(BF):左子树高度减去右子树高度
平衡化处理:
-LL型:顺时针
-RR型:逆时针
-LR型:逆时针、顺时针
-RL型:顺时针、逆时针

B-树性质

树中每个节点最多有m个子树
若根结点不是叶子结点,则至少有两棵子树
除根结点以外的所有非叶结点至少有(m/2)(向上取整)棵子树
所有叶子结点和终端结点都位于同一层

m阶B-树非终端结点的特性

n个关键字
n个指向记录的指针
n+1个指向子树的指针

B-树插入操作

分裂结点–第[m/2]向上取整个数据向上分裂

B-树删除操作

后继替换
合并
分裂

B+树

叶子结点包含了全部关键字信息
所有非终端结点可以看作是索引

哈希表的有关概念

1.哈希函数:又叫做散列函数,是由关键字与记录的存储位置建立的一种函数关系,H(key)
2.哈希地址:由哈希函数得到的存储地址
3.装填因子:若散列表空间大小为n,填入表中的结点数m,则称α = m/n为装填因子
4.冲突:H(K1)= H(K2)
5.同义词:发生冲突的关键字称作同义词

构造哈希函数

1.直接定址法:H(key)=a*key+b
2.数字分析法:取一段
3.平方取中法:以关键字的平方值的中间几位作为存储地址
4.折叠法:左移位叠加和间界叠加
5.除留余数法:Hash ( key ) = key % m
6.除随机数法:H(key) = Random(key)

处理冲突的方法

1.开放地址法
Hi = ( H(key) + di) MOD m i = 1,2,…,k ( k≤m-2 )

di = 1,2,3,……,m-1—线性探测再散列
di = 12,-12,……,±k^2(k ≤m/2)—二次探测再散列
di为伪随机数序列—随即探测再散列

2.双散列函数探测
发生冲突是采用两个散列函数H1(key)和H2(key)

3.链地址法
将所有哈希地址相同的记录都连接在同一链表中

排序的稳定性

在排序过程中,有若干记录的关键字相等,即Ki=Kj(1≤i≤n, 1≤j≤n,i≠j) ,在排序前后,含相等关键字的记录的相对位置保持不变,此即稳定

插入排序

1.直接插入排序:稳定,平均O(n2)
2.折半插入排序:平均O(n*log2 n)
3.表排序:i应在当前位置;p实际在的位置;q表示p的下一个位置
4.希尔排序:跳跃式排序,不稳定,平均O(n1.3~n1.5)

快速排序

1.冒泡排序:稳定,平均O(n2)
2.快速排序:设定枢轴,分成两个序列,两边递归,不稳定,平均O(nlog2 n)

选择排序

1.简单选择排序:筛选最小值,交换。稳定,平均O(n2)
2.树形选择排序:从下往上构建二叉树。稳定,O(nlog2 n)
3.堆排序:交换后建堆。不稳定,O(n
log2 n)

归并排序

二路归并:稳定,O(n*log2 n)

基数排序

按所在位数进相应队列,然后依次出队列,不断重复,直到进行了最大位数这么多次
稳定,O(n)

内部排序方法总结

堆排序、归并排序时间复杂度均为O(nlog2 n);快速排序平均时间复杂度为(nlog2 n);直接插入排序、冒泡排序、简单选择排序平均时间复杂度均为O(n2)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值