RK-13 数据结构

目录

线性结构

单链表

栈与队列

数组

矩阵

广义表

​树

二叉树

二叉树的遍历

线索二叉树

最优二叉树

​树和森林

查找二叉树

平衡二叉树

​图

 图的存储 

 图的遍历

​图的最小生成树

图的拓补序列


线性结构

每个元素最多只有一个出度和入度

存储结构分为顺序表和链表

顺序存储:用地址连续的存储单元存储线性表的数据,逻辑上相邻的元素物理也相邻

链式存储:地址不要求连续,元素逻辑上连续,物理上不连续 

链式存储不仅有数据还有 指针域,所以密度小

查找运算,顺序存储更好

破坏性的操作(插入、删除)链式存储更好,只要将指针断开即可,不需要破坏的操作,顺序存储更好 

单链表

插入:新加的结点的指针域指向后一个结点,再将前一个结点的指针域指向新加的结点

删除:将要删的结点前一个结点的指针域指向后一个结点的指针域,free(q)释放q指针的内存

栈与队列

队列是先进先出,栈是先进后出

栈有两个进出的口,所以是先进先出,栈只有一个口,所以是先进后出

循环队列:一般队列少存一个元素,所以队列满的条件是tail+1=head

size是队列能存的最大长度

队列长度的公式为(tail-head)%size

优先队列:元素被赋予优先级,最高优先级的元素最先删除,使用堆来存储

特殊的线性表,数据元素是字符

基本模式匹配算法:从主串第一个字符开始与模式串比较,相等就逐个比较后面的字符,不相等就从主串的下一个字符开始比较

KMP算法:与基本模式匹配算法类似,但是匹配字符不相等时不需要回溯主串的字符位置,直接从不匹配的字符开始向后重新比较

数组

一维数组是线性的

数组结构特点:数目固定、类型相同、下表具有上下界的约束且下表有序

矩阵

特殊矩阵:矩阵分布有一定规律,有

对称矩阵:aij=aji

对角矩阵:非零元素集中在主对角线中心带状区域,其他都是0

三角矩阵:矩阵中主对角线上方都是非零元素,下方全是零元素(上三角矩阵),或相反(下三角矩阵)

稀疏矩阵:非零元素很少且分布没有规律,储存方式是三元组结构,即存储每个非零元素的行、列、值

 矩阵计算采用特殊值法:

特殊值a1,1的i=1,j=1,只需要带入其中看哪个选项的k=1即可 

广义表

LS是表名,ai是表元素

 LS=(a1,a2,...,an)

广义表的元素既可以是表也可以是元素

广义表的长度就是最外层包含的元素个数

递归定义的重数就是广义表的深度,只需要看单边括号有几层深度就为几

head()取表头,tail()取表尾,表头可以是单元素,也可以是表,广义表的表尾一定是表

树中的每个元素可以有两个或两个以上的后继元素,用来描述层次结构关系

在非空树中只有一个根节点

结点的度:一个结点的子树的个数记为结点的度

子叶结点 :度为零的结点

内部结点:度不为零的结点

结点的层数:从根节点到他经历多少代,就是几层

有序树:树中结点的子节点可以相互交换称为无序树,从左到右具有次序不能交换的叫有序树

二叉树

完全二叉树,除了最底层其他节点都是双节点

满二叉树,全部节点都是双节点

只能指向两个节点的树,一个左节点,一个右节点

第n层最多有2^(n-1)个节点

高度为k的树最多有2^k-1个节点

总节点数:单分支节点数+双分支节点数*2

总分支数=总节点数-1

对一颗有n个节点的完全二叉树的所有节点按照自上而下、自左向右进行编号 则对应任意节点i(1<=i<=n)有

  1. 若i=1,则节点是二叉树的根,无双亲,若i>1,则其双亲为i/2(向下取整)如3/2=2
  2. 若2i>n,则节点i没有左孩子,否则则其左孩子为2i
  3. 若2i+1>n,则节点i没有右孩子,否则右孩子为2i+1

二叉树的遍历

先序遍历是先根节点再左节点,最后是右节点

中序是左根右

后续是左右根

层次遍历:从上到下,从左到右 

线索二叉树

n个节点的二叉树有n+1个空指针域

两个标志占1bit,用什么遍历则存放什么标志

最优二叉树

树的路径长度:根节点到达每个子叶节点的路径长度之和

结点的带权路径长度:该节点的权值乘该节点到根结点的路径长度

树的带权路径长度:所有子叶结点的带权路径长度之和

给出一组权值将两个最小的权值作为子叶节点,其和作为父节点,组成二叉树,然后把最小的两个值删除,加入其父节点,重复步骤,这个树的带权路径长度是最小的,一层中小的在左边,大的在右边,左边为0,右边为1 

树和森林

树与二叉树的转换:树的最左边结点作为二叉树的左子树,树的其他兄弟结点作为二叉树的右子树结点

查找二叉树

左孩子结点值都小于父节点,有孩子结点大于父节点,用中序排列是从小到大排序的

平衡二叉树

左右子树层次相差不超过1 

无向图:结点之间没有箭头

有向图:结点之间连接线是有箭头的

有向图的度是出度和入度之和

有向图两个顶点间相互存在路径,称为强连通图

 图的存储 

邻接矩阵:n个结点就是n阶矩阵,i结点与j结点相连的话a[i][j] = 1,否则等于0

无向图沿对角线对称

邻接链表;将结点用一维数组存储,对每一个顶点,使用链表挂上和其有连线的结点编号和权值

 图的遍历

 深度优先遍历:从一个顶点开始遍历到底,直到返回,再任取其他结点,直到遍历玩整个图

广度优先遍历:先访问完一个顶点的所有邻接结点,再依次访问其邻接结点的所有邻接结点

图的最小生成树

克鲁斯卡尔算法:从边出发,按权值大小排序,选取权值最小的n-1条边,直至囊括所有结点

网稠密的时候普利姆算法更好,效率都差不多

图的拓补序列

以顶点表示活动,用有向边表示活动之间的优先关系

不能有回路

构造方法:先找入度为零的点,先执行,然后删除与其相关的有向边,重复执行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值