2021上学期数据结构期末考试重点整理

@浙江师范大学

2021上学期数据结构期末考试重点整理

数据结构复习笔记

选择填空

栈与队列

先进后出

表尾——栈顶,表头——栈底,操作全在栈顶

Top指向栈顶元素的下一个位置

栈顶指针指向栈顶下一个元素,栈底指针指向栈底元素

判满:Top-Base=MaxSize

判空:Top=Base

置空:Top=Base

长度:Top-Base

增删改——链栈

查——顺序栈

应用——数值转换(进制转换)、判断回文、括号匹配、算术表达式求值

前缀表达式、后缀表达式

前缀表达式:找 运算符ab 计算

后缀表达式:找 ab运算符 计算

队列

先进先出

队尾进,队头出

双向队列——两头皆可以出入队

采用循环队列

队尾指针指向队尾的后一个元素,队头指针指向队头元素

移动的结果位置为 (原位置+1)%MaxSize 出队入队皆是

队空:头等于尾

队满:(尾+1)%MaxSize=头 即尾向下移以为到头

长度:(尾-头+MaxSize)%MaxSize

小总结

插入端的指针永远指向下一个位置

入先判满,出先判空

kmp算法

串的模式匹配

序号i从1开始

next[i]=不包含本位置字符的前缀和后缀最大重合字串长度+1(没重合写1,第一项写0)

nextval[i]=此位置(i)的字符与第next[i]处的字符是否一致,一致nextval[i]=nextval[next[i]],否则nextval[i]=next[i],第一项写0

时空间复杂度(选择)

排序冒泡选择插入希尔归并快速基数
平均时间复杂度O(n²)O(n²)O(n²)O(n²)O(nlogn)O(nlogn)O(nlogn)O(d(n+r))
最坏时间复杂度O(n²)O(n²)O(n²)O(n²)O(nlogn)O(n²)O(nlogn)O(d(n+r))
空间复杂度O(1)O(1)O(1)O(1)O(n)O(logn)O(1)O(n+r)

时间:快归队(堆)是O(nlogn),其他全是O(n²),快速最坏也是O(n²)

空间:快是O(logn),归是 O(n),其他全是O(1)

查找顺序折半二叉树哈希
时间复杂度O(n)O(logn)O(logn)O(1)

简答

堆排序

堆是一棵完全二叉树,大根堆根是整个左右子结点的最大值,反之为小根堆

1、建立初始堆——从上到下从左到右

2、排序的对象是整棵树的根,每次排完,根和最后一位交换,最后一位不再参与下一轮排序

3、对根的排序原则是,(以排成大根堆为例)根大于左右子树

4、自下而上,从最末端的子树开始排

5、在将符合条件的结点运送到根之后,还要检查没课子树是否为一个对应的根堆

二叉排序树BST和平衡二叉树AVL

BST二叉排序树

1、左小于根小于右

查找、建立、插入、删除

查找、删除——大于当前访问节点向右小于向左

删除——若所删结点仅一个孩子,则取孩子代替原来位置,若有两个孩子,则取右子树最小结点代替原来位置

建立——一般为建立平衡二叉树(特殊二叉排序树),在下面描述

AVL平衡二叉树

1、每一棵子树深度之差不超过一的二叉排序树

2、左小于根小于右

平衡化

LL型——某节点的L孩子的L子树多了一个节点致使失衡——AL成为根,ALR成为A的新L

RR型——某节点的R孩子的R子树多了一个节点致使失衡——AR成为根,ARL成为A的新R

LR型——某节点的L孩子的R子树多了一个节点致使失衡——ALR成为根,AL为左根,A为右根,ALRL作为AL的R,ALRR作为A的L

RL型——某节点的R孩子的L子树多了一个节点致使失衡——ARL成为根,AR为右根,A为左根,ALLR作为AR的L,ALRR作为A的R

建立

按给出数据的顺序(a,b,c,d…),把第一个数据a放在根处,b小于a向左反之向右,判断是否失衡(才两个结点必然不失衡,但还是要判断),再同理插入第三个节点,再使之平衡化,以此类推直到排完。

哈希表ASL(平均查找长度)的计算

构造哈希函数

传入一个数据吐出一个地址

冲突:不同数据吐出同一个地址

同义词:吐出同一地址的几个数据

构造方法:

直接定址法——H(key)=key(适用于地址大小等于数据量大小)

数字分析法——分析数据,提取若干位作为地址(适用于数据中数字出现频率可分析)

平方取中法——对数据的平方进行数字分析法

折叠法——取数据中的几位和另外几位叠加作为地址

除留余数法——数据除以P的余数作为地址,P<=表长M,且是素数

处理冲突的方法

1、开放定址法

​ 线性探测法——遇见冲突往右边走找第1个空位(即增量序列d=1,一般取1

​ 二次探测法——遇见冲突移动d个位置(d=12,-12,22,-22……)

2、链式地址法

​ 就是把哈希值一样的数据链起来

最短路径

单源点最短路径——迪杰斯特拉算法——取从单源点A出发到各点的最短边,把A和此点看作新的结点A1,再看从A和A1出发到各点最短路径,再重复上述过程直到A到所有点的最短路径被算出

全部结点间最短路径——弗洛伊德算法——先写出邻接矩阵,再逐个添加结点作为中介点更新矩阵

创建哈夫曼树并计算WPL

创建

最小的两个数作为左右子节点,和作为根节点,把此子树看作一个结点,数值与根相同,再参与最小两两合并,直至合并结束

左0右1,写出哈夫曼编码

WPL

结点权值*到根节点有几条边(就是有几条杠)累加之和

二叉树串接

二叉树转树——父连子右孙右,去原父与右子连线

树转二叉树——兄弟相连,除最左一个结点外父子断开

森林转二叉树——森林里的树转二叉树再相连

程序题

折半查找(统计二叉树叶子结点个数——递归写法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值