软考 软件设计师 数据结构

大O表示法

在这里插入图片描述
在这里插入图片描述

常数阶,他的次数不会随着n的变大而变长

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
抓大头 取次方最大的
在这里插入图片描述

时间复杂度

在这里插入图片描述

没有循环 没有递归没有跟n相关的东西,那么他的复杂度就是o(1)
在这里插入图片描述
为什么i=i*2那里会加1阿?
因为需要加一次才能跳出循环1 2 4 8
中间加二是为了判断
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

循环的判断普遍比循环体多一个所以圈2的地方n+1


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


空间复杂度

在这里插入图片描述

看定义了几个空间。上图z再多跟n也没关系所以是o(1)在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

i和j两个才完成一个o(n)的复杂度,完成代码的交换

这里没开辟新空间 只是定义了两个变量 所以是常数级别 O(1)


在这里插入图片描述

渐进符号

在这里插入图片描述

之前的是时间复杂度假设是f(n)转成o()这个记号,肯定比原来的大。
在这里插入图片描述
在这里插入图片描述

渐进上界的括号内要大于等于等式左边的计算结果,渐进下界的括号内要小于等于等式左边的计算结果,渐进紧致界括号内的只能等于等式左边的计算结果
在这里插入图片描述

渐进紧致阶只要上面有一个错的就都是错的

说白了就是,看见第一个符号,结果就要大于等于他,第二个就是结果小于等于,第三个就只能等于

递归式时间,空间复杂度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

递归时间复杂度o(n)
在这里插入图片描述

n/2 等于1的时候就是调用结束的时候。除多少个2的x方
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

o(n方)
在这里插入图片描述

递归式主方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线性结构和线性表定义

在这里插入图片描述

线性表的顺序存储结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
圈起来的是挪动后的式子
在这里插入图片描述

首相加未向乘以项数除以2
在这里插入图片描述

顺序表的实现

在这里插入图片描述
https://www.bilibili.com/video/BV1f44y1A7rx?p=16&spm_id_from=pageDriver&vd_source=6092f2dd634d869c97e5d08dde6f3844
插入实现转载b站观看到36分钟

顺序表插入时间复杂度

在这里插入图片描述

顺序表删除时间复杂度

在这里插入图片描述

在这里插入图片描述

删除n分支1的元素 删除第一个就是移动n-1,最后一个移动0个

顺序表查找时间复杂度

在这里插入图片描述

查找最好的情况是找到了最坏的情况是找不到都是一句话所以复杂度为o(1)

顺序表缺陷

在这里插入图片描述
后面有足够的空间才能原地扩容,如果后面的空间不够就回去随机找一个地址扩容,这样代价很大
在这里插入图片描述

线性表的链式存储

在这里插入图片描述

线性表:多开了一个空间 用于存储额外的信息
第一个没有前驱,最后一个没有后继

线性表链式存储代码

https://www.bilibili.com/video/BV1f44y1A7rx?p=24&vd_source=6092f2dd634d869c97e5d08dde6f3844 从16分钟开始

不带头结点的是指针指向空NULL,带头结点第一个节点不存储数据,只存储地址,就框框左边是空右边是下一个的地址
指针不初始化默认为空在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

带头结点的单链表插入(无特殊情况可直接用)

在这里插入图片描述

像插入一个节点在第二个位置
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
以上代码是在第二个数字前插入,如果想在之后插入可以让k+1

不带头结点的单链表插入

不带头结点所以找不到第零个节点,下面循环可以解决
在这里插入图片描述

单链表插入时间复杂度

在这里插入图片描述

带头结点和不带的单链表删除

在这里插入图片描述
带头结点
在这里插入图片描述

不带,删除的位序k>1没有问题,k=1的话就有问题了

单链表删除时间复杂度

在这里插入图片描述

单链表查找时间复杂度

在这里插入图片描述

循环单链表

在这里插入图片描述

最后尾节点不会指向空,会指向头结点 直接链起来

双链表

在这里插入图片描述

双链表就是比单链表多了一个指针域 指向前一个节点 就可以实现某节点都可以找到自身的上一个节点和下一个节点

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
插入操作并无循环
在这里插入图片描述
在这里插入图片描述

删除需要循环所以是o(n)

栈的顺序存储(先进先出)

栈的典型应用:递归
在这里插入图片描述

栈的链式存储

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

队列的顺序存储和循环队列

相当于日常生活中的排队
final全局常量

  • 入队队尾指针(rear)要加加*
    在这里插入图片描述

在这里插入图片描述

队列的链式存储和双端队列(了解即可 )

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

这种题可以自己模拟一个循环队列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

这题目的意思就是这个队列在进元素的时候 可以在头和尾进 出只能在头出

栈与队列例题

入栈出栈后立马进入队列
队列出队和入队序列一样同时也是出栈序列

在这里插入图片描述

c确定后就不需要扩容,所以顺序存储效率更高

在这里插入图片描述

串(线性结构)

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

字串就是可以拆开另算的

空串是任意串的子串

串的模式匹配与朴素模式匹配(带时间复杂度 )

串有主串和模式串
从主串中找到一个和模式串相等的字串匹配成功返回指向 子串的起始位置,匹配失败如果从1开始返回0从0开始返回-1

在这里插入图片描述
在这里插入图片描述

手算next数组值(kmp)

在这里插入图片描述
这个就是算next值中最长值再加1
在这里插入图片描述

在这里插入图片描述
背公式

一维数组

在这里插入图片描述
在这里插入图片描述

二维数组

在这里插入图片描述
i行j列
在这里插入图片描述

数组计算公式及特性


在这里插入图片描述


方法二套公式
在这里插入图片描述

对称矩阵

二维数组就是一个矩阵
二维数组压缩在一个一维数组里
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
转化为一维数组

**等差数列求和的公式 **

在这里插入图片描述
从1开始的1区别就是让每个i和j都减去1 如上公式

i<=j是下三角

三对角矩阵(公式)

只存储中间元素可以不用存储两边的元素
在这里插入图片描述

二维数组转一维,看他前面有几个元素
在这里插入图片描述

稀疏矩阵(三元组表和十字链表)

表这么大只存储了8个数据 如何压缩?
在这里插入图片描述
在这里插入图片描述

利用三元组表顺序村粗
在这里插入图片描述

十字链表


在这里插入图片描述

树形结构与树的定义(递归)

在这里插入图片描述

树的基本概念

在这里插入图片描述

兄弟就是他们呢几个有共同的父节点他们几个就是兄弟
父节点有几个子节点就是有几个度
度为0是的叶子节点
度不为零的节点为分支节点
树的度为最大节点的度

树的性质1

在这里插入图片描述

在这里插入图片描述

树的性质2

在这里插入图片描述

树的性质3

在这里插入图片描述

树的性质4

在这里插入图片描述
在这里插入图片描述

2.x意思是两行还多


在这里插入图片描述

在这里插入图片描述

二叉树的定义

在这里插入图片描述

二叉树的性质1,2,3

在这里插入图片描述

满二叉树与完全二叉树

在这里插入图片描述

二叉树的性质4

在这里插入图片描述

************在这里插入图片描述
模拟推法

二叉树的顺序存储

在这里插入图片描述

完全二叉树适合顺序存储
双亲就是父节点
单支树是除了叶子节点都是1

二叉树链式存储

二叉树先序遍历

在这里插入图片描述
**根左右 **

二叉树中序遍历

左 根 右
在这里插入图片描述

二叉树的后序遍历

左 右 根
在这里插入图片描述

层次遍历

在这里插入图片描述

根据遍历序列构造二叉树

在这里插入图片描述

先序加中序构造二叉树

在这里插入图片描述

后序加中序构造二叉树

在这里插入图片描述

最后一个肯定是跟节点,所以后序的bca都是跟节点,找到根节点后再跑到中序里

层序加中序遍历二叉树

层序是从上往下从左往右
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

平衡二叉树

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二叉树排序树定义

有序序列是用中序遍历,这句话很重要
在这里插入图片描述

二叉排序树构造

在这里插入图片描述

一般第一个就是根节点
在这里插入图片描述

最优二叉树(哈夫曼树)

权值带权路径
在这里插入图片描述
在这里插入图片描述

最优二叉树构造

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最优二叉树(软考)

在这里插入图片描述

**求节点个数 **
这里的n注意是题目给的n值,而不是树的高度

最优二叉树构造规则

构造1233
在这里插入图片描述

构造最优二叉树

在这里插入图片描述

哈夫曼编码定义

左0右1
在这里插入图片描述
在这里插入图片描述

哈夫曼编码压缩比

因为3位数的二进制可以表示6个字符,而2位只能表示4个,而这里有abcde5个字符
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

完全二叉树第一层到h-1层必须是满的所以排除a
左右高度之差不为1所以不是平衡二叉树


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线索二叉树的定义

在这里插入图片描述

在这里插入图片描述

图形结构与图的定义

图可以有多个前驱和多个后继
在这里插入图片描述

有向图与无向图

![v!v](https://img-blog.csdnimg.cn/9c20b212096e422f8390c7f0f35a7260.png)

完全图

在这里插入图片描述
在这里插入图片描述

无向图就是用首相加尾相乘以项数除以2

在这里插入图片描述

顶点的度

在这里插入图片描述

出度和入度是关于有向图,度就是入度加出度
在这里插入图片描述

路径

在这里插入图片描述
在这里插入图片描述

连通图与强连通图

在这里插入图片描述
连通图针对无向图
在这里插入图片描述

有向图中必须具有两条路径才满足强连通图
在这里插入图片描述
在这里插入图片描述

邻接矩阵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

邻接表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

稠密图与稀疏图

完全图类似稠密图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

网(看一眼)

在这里插入图片描述

在权值里两个顶点没有边的话就用无穷表示

图的遍历

在这里插入图片描述

图的深度优先遍历

当前所处的顶点还有邻接的顶点(出边)并且没有被访问过的话那么他就回去访问这些顶点

https://www.bilibili.com/video/BV1jY411b73f/?p=185&spm_id_from=pageDriver&vd_source=6092f2dd634d869c97e5d08dde6f3844
在这里插入图片描述

深度优先遍历时间复杂度(背)

在这里插入图片描述

广度优先遍历和时间复杂度(队列实现)

在这里插入图片描述

深度只要顶点还能访问就会一直访问下去

在这里插入图片描述

广度优先是先访问临界点访问完了。 直接写下来
上图就是访问v1得到的
在这里插入图片描述

拓扑排序

在这里插入图片描述

在这里插入图片描述

如果要完成顶点3应该先完成顶点3的直接前驱活动
aov网是个有向无环图


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值