笔记有错误欢迎直接在评论区进行纠正!我将不再维护软件设计师笔记!

数据结构上午题9分

复杂度

大O表示法

时间复杂度

这里只是举了六个例子,然后对应的时间复杂度比较抽象,自己去看

讲解地址:时间复杂度_哔哩哔哩_bilibili

空间复杂度

讲解地址:空间复杂度_哔哩哔哩_bilibili

空间复杂度为O(n)

空间复杂度为O(n2

真题

真题1

真题2

这个题目看起来挺难的,其实也就那样,根据它提供 的算法思路把代码写一下,就可以看出来时间复杂度是2O(n)去掉系数就是O(n),然后空间复杂度可以看见定义了三个变量n1-n3,所以就是O(1)

讲解地址:2011年下半年第64题_哔哩哔哩_bilibili

真题3

讲解地址:2012年上半年第65题_哔哩哔哩_bilibili

真题4

讲解地址:2020年下半年第65题_哔哩哔哩_bilibili

*渐进符号

这里我是完全懵逼

回炉重造地址:渐进符号_哔哩哔哩_bilibili

真题

懵逼+1

讲解地址:2012年上半年第62题_哔哩哔哩_bilibili

递归

这个由于没有定义任何东西,只是一个判断和遍历,所以空间复杂度是O(1),时间复杂是遍历次数×每次递归的时间复杂度,也就是n×O(1)=O(n)

这里是定义了个i=1,相当于每次递归都会重新的定义一个i=1,所以空间复杂度是O(n)

这个时间复杂度是O(log2n),空间复杂度是O(n)

这个时间复杂度是O(n2),空间复杂度是O(n)

回炉重造地址:递归式时间、空间复杂度_哔哩哔哩_bilibili

递归式主方法

这里我一开始是完全懵逼的,博主讲的我也听不懂,但是做了后面几道真题后好像会了一些,记录一下我的理解

首先看到上面这样的形式的并且要求时间复杂的那就是告诉你,孩子,要用公式了,因为他们都长的像下面这个公式

这个公式有两种,也就是要根据具体题目才能知道用哪种公式?例如

这个公式就是用第二个公式,首先要把对应的a和b还有f(n)写出来,例如上面这个题a=2,b=2,f(n)=nlgn,这里有个小技巧来判断用哪个公式?根据f(n)里面有没有lg来判断?如果有那就是第二个,没有那就用第一个公式

这里f(n)=nlgn很明显有lg所以用第二个,然后a和b的值代公式就行了,直接得到nlgn=nlgkn,很明显k=1

在代到T(n)=nlg2n,也就是时间复杂度为nlg2n

这里在代公式的时候是只看括号里的内容

回炉重造地址:递归式主方法_哔哩哔哩_bilibili

真题

真题1

真题2

讲解地址:2010年下半年第62题_哔哩哔哩_bilibili

真题3

讲解地址:2011年上半年第64题_哔哩哔哩_bilibili

真题4

这里要注意算法越快,时间复杂度越小

讲解地址:2011年下半年第65题_哔哩哔哩_bilibili

真题5

讲解地址:2014年上半年第62、63题_哔哩哔哩_bilibili

真题6

线性表

线性表的定义

线性表的存储结构

顺序存储

也就相当于一个数组,所以可以直接通过下边快速查询到表中的元素,所以效率高,但是插入和删除会批量移动,所以效率低,简称查询高效率,插删低效率

插入元素的代码和时间复杂度

最好的情况就是直接在顺序表后面插入一个元素,时间复杂度为O(1)

最坏的情况是在插入一个元素到原来第一个元素的位置,时间复杂度为O(n)

平均复杂度为O(n)

讲解地址:顺序表插入时间复杂度_哔哩哔哩_bilibili

删除元素的代码和时间复杂度

最好的情况就是直接在删除最后一个元素,时间复杂度为O(1)

最坏的情况是删除第一个元素,时间复杂度为O(n)

平均复杂度为O(n)

讲解地址:顺序表删除时间复杂度_哔哩哔哩_bilibili

查找元素的代码和时间复杂度

时间复杂度为O(1),因为这是直接根据数组下边就可以快速查询到对应的元素

链式存储

插入元素的代码和时间复杂度

这里插入分为两种,一种是带头结点的,还有一种是不带头结点的

带头结点的的时间复杂度

最好的情况就是k=1的时候,也就是插入在头结点后面一个结点的位置时,时间复杂度为O(1)

最坏的情况是k=n+1的时候,也就是插入在最后面,时间复杂度为O(n)

平均复杂度为O(n)

不带头结点的的时间复杂度

最好的情况就是k=1的时候,也就是插入在第一个结点后面一个结点的位置时,时间复杂度为O(1)

最坏的情况是k=n+1的时候,也就是插入在最后面,时间复杂度为O(n)

平均复杂度为O(n)

其实可以看出时间复杂度取决于指针遍历,因为在插入之前是要通过指针从头结点或者第一个结点一个个往后去找到对应的位置,相当于遍历,最好的情况就是遍历一次就找到了,也就是那个位置在头结点后面一个,最坏的就是指针遍历到最后一个才找到对应的位置,那就相当于把整个链表都遍历了一遍

删除元素的代码和时间复杂度

最好的情况就是k=1的时候,也就是删除在头结点后面一个结点时,时间复杂度为O(1)

最坏的情况是k=n+1的时候,也就是删除最后面一个结点时,时间复杂度为O(n)

平均复杂度为O(n)

带不带头结点它们删除和插入的时间复杂度都是一样的

查找元素的代码和时间复杂度

最好的情况就是k=1的时候,也就是查找在头结点后面一个结点时,时间复杂度为O(1)

最坏的情况是k=n+1的时候,也就是查找最后面一个结点时,时间复杂度为O(n)

平均复杂度为O(n)

循环单链表

讲解地址:循环单链表_哔哩哔哩_bilibili

双链表

讲解地址:双链表_哔哩哔哩_bilibili

真题

真题1

一般没有问最好或者最坏的时间复杂度那就是默认为平均复杂度

讲解地址:2009年下半年第60题_哔哩哔哩_bilibili

真题2

讲解地址:2010年上半年第65题_哔哩哔哩_bilibili

删除是要找到删除结点的前面一个结点的位置,循环单链表删除是要找到前面一个结点的位置,也就是要遍历链表,但是插入到尾结点后面就不用遍历直接插入就行

真题3

讲解地址:2011年下半年第58题_哔哩哔哩_bilibili

真题4

讲解地址:2013年下半年第57题_哔哩哔哩_bilibili

真题5

真题6

讲解地址:2014年下半年第57题_哔哩哔哩_bilibili

真题7

讲解地址:2016年下半年第58、59题_哔哩哔哩_bilibili

真题8

讲解地址:2020年下半年第58题_哔哩哔哩_bilibili

栈的定义

真题

真题1

递归(嵌套调用)用栈是经典

真题2

真题3

像遇到这样的题目不要慌,直接取特殊情况带进去算,好比这里我就直接设n=3,那么1<=k<=1.5,那k就是1,然后再去判断

讲解地址:2014年下半年第58题_哔哩哔哩_bilibili

真题4

真题5

真题6

真题7

讲解地址:2021年下半年第57题_哔哩哔哩_bilibili

队列

真题

真题1

讲解地址:2010年下半年第57题_哔哩哔哩_bilibili

讲解地址:2015年上半年第57题_哔哩哔哩_bilibili

讲解地址:2013年下半年第58题_哔哩哔哩_bilibili

真题2

讲解地址:2013年上半年第53题_哔哩哔哩_bilibili

真题3

真题4

讲解地址:2018年上半年第57题_哔哩哔哩_bilibili

真题5

队列和栈组合

总结来说,就一句话,入队顺序一定等于出队顺序

真题

真题1

两个栈是可以模拟一个队列的,但是两个队列是无法模拟一个栈的操作的,因为队列进出的顺序是一样的,而栈进出顺序是倒置的

讲解地址:2009年上半年第60题_哔哩哔哩_bilibili

真题2

讲解地址:2009年下半年第61题_哔哩哔哩_bilibili

真题3

真题4

像这样的组合题,牢牢记住队列的入队和出队顺序永远都是一致的,但是栈的出队和出队顺序就不一定了,它可以相同也可以不同,同时如果是先入栈后入队列,那么队列的出队顺序就是出栈顺序,例如上面这题。

真题5

真题6

真题

真题1

真题2

自己随便举个例子然后套

讲解地址:2017年下半年第57题_哔哩哔哩_bilibili

串的模式匹配和朴素匹配

这里了解一下,然后知道时间复杂度和比较次数就可以了

讲解地址:串的模式匹配与朴素模式匹配_哔哩哔哩_bilibili

手算next数组的值(KMP)

这里知道数组怎么求就行,下面真题2会做就没有问题了

回炉重造地址:手算next数组值_哔哩哔哩_bilibili

真题

真题1

讲解地址:2012年下半年第57题_哔哩哔哩_bilibili

真题2

讲解地址:2011年下半年第57题_哔哩哔哩_bilibili

讲解地址:2012年上半年第58题_哔哩哔哩_bilibili

讲解地址:2014年下半年第60题_哔哩哔哩_bilibili

这种题我是会做,但是我说不清,勉强说说做题技巧

首先next数组前面两个是01,这是固定的,然后我是直接求最后一个字母的next值

例如上面的abaac最后一个字母是c,在c前面的模式串是abaa,然后求这个模式串的next值

长度为1时,abaa的最前面一个字母和最后面一个字母都是a,说明相等,那么next值为长度+1也就是1+1=2

长度为2时,abaa的最前面两个字母组合是ab,最后面的两个字母是aa,不相等,那么next的值为1

长度为3时,abaa的最前面的三个字母的组合是aba,最后面的三个字母的组合是baa,不相等,那么next值为1

长度为4时串的前缀和后缀都是同一个串,不合法,不用计算,所以取next值最大的作为最后一个字母的next值,也就是2,所以选B

总之,就是从长度1开始到(模式串-1)一个个的去求,只要前缀和后缀相同,那next值就是对应长度+1,不同那就是1

一维数组和二维数组

这里会地址计算就行

回炉重造地址:二维数组_哔哩哔哩_bilibili

真题

真题1

真题2

讲解地址:2012年上半年第21题_哔哩哔哩_bilibili

真题3

矩阵

对称矩阵

对称矩阵有上三角和下三角的区别,对称矩阵一般是用一个一维数组来存储的,并且存在的一般都是下三角的值,根据Ai,j=Aj,i 进行转换,上面的公式就是用来求Ai,j是在一维数组的哪个位置,例如下面的A2,0是在一维数组n的4号位置,也就是n【4】,特别注意上面公式所指的下标是二维数组的下标,也就是A0,0,所以下标是从0开始的,用第一个公式

回炉重造地址:对称矩阵_哔哩哔哩_bilibili

三对角矩阵

特别注意上面公式所指的下标是二维数组的下标,也就是A0,0,所以下标是从0开始的

回炉重造地址:三对角矩阵_哔哩哔哩_bilibili

稀疏矩阵

回炉重造地址:稀疏矩阵_哔哩哔哩_bilibili

真题

真题1

真题2

真题3

真题4

真题5

真题6

这个题有点坑,注意它是求i<=j的情况,它给个下三角来误导,实际求的是上三角的公式,真狗啊,根据Ai,j=Aj,i转换一下,其实就是把i和j交换一下在代入公式,例如我知道A[2][0]存在S[4],那么A[0][2]也在S[4],所以代进去下面选项中

讲解地址:2019年下半年第57题_哔哩哔哩_bilibili

真题7

总结一下这种类型的题目,首先上面矩阵的公式很多,记不住可以不记。因为在考试的时候做这样的题目是可以直接代进去试试就可以判断出来,但是脑子里要有下面两个图(一般会给出),这是为了防止它的已知不够用的情况下,自己在举例子去代

其实应该脑子里有下面这两个图,但很明显上面的可以推出来,并且更容易记忆

树的定义

树的基本概念

树的性质

真题

真题1

用到树的第一个性质

讲解地址:2010年下半年第61题_哔哩哔哩_bilibili

真题2

讲解地址:2019年下半年第59题_哔哩哔哩_bilibili

二叉树

二叉树的定义

二叉树的性质

给定结点数n,求二叉树的形态数量公式

完全二叉树和满二叉树

真题

真题1

这里主要是我不知道选项中这个符号是什么意思,其实就是向下取整,也就是小于等于这个数的最大整数

讲解地址:2011年下半年第60题_哔哩哔哩_bilibili

真题2

真题3

真题4

真题5

真题6

这里主要是要知道有这个公式,然后知道阶乘怎么算

讲解地址:2019年上半年第58题_哔哩哔哩_bilibili

真题7

讲解地址:2021年下半年第59题_哔哩哔哩_bilibili

二叉树的存储结构

顺序存储

如果一般二叉树非要用顺序存储,那就把它补成一颗满二叉树,没有的用虚结点表示

链式存储

对于二叉链表来说,n个结点就有2n个指针域,然后n个结点就有n-1个分支,也就是n-1个指针不为空,那么为空的指针域就是2n-(n-1)=n+1个空指针域

总结:对于二叉链表来说,n个结点就有n+1个空指针域

对于三叉链表来说,n个结点有3n个指针域,这里多了一个父指针域,也就是第二个指针域的位置是指向父指针域的,那么n个结点就有n-1个分支和n-1个父指针域,所以空指针域是3n-(n-1)-(n-1)=n+2个空指针域

总结:对于三叉链表来说,n个结点就有n+2个空指针域

回炉重造地址:二叉树链式存储_哔哩哔哩_bilibili

真题

真题1

这里我一开始把完全二叉树和满二叉树搞混淆了

讲解地址:2009年上半年第61题_哔哩哔哩_bilibili

真题2

真题3

真题4

二叉树的遍历

先序遍历(根左右)

中序遍历(左根右)

后序遍历(左右根)

层次遍历

例题

还原二叉树

根据上面的图可以看出先序,后序,层次遍历的序列中都可以得到根节点是哪个,先序遍历和层次遍历的第一个是根节点,后序遍历的最后一个也是根节点,然后就可以在中序遍历中找到根节点,也就是中序遍历加上其他任何一种遍历的序列就可以还原出二叉树,这里要注意中序遍历的序列是一定要有的,不然还原不了

先序遍历序列+中序遍历序列

这里值得一提的是先序的第一个是根节点,第二个是根节点的左孩子,这是一定的,根据先序来确定每一个父节点的位置,然后再根据中序来判断其左右孩子的位置

讲解地址:先序+中序构造二叉树_哔哩哔哩_bilibili

后序遍历序列+中序遍历序列

讲解地址:后序+中序构造二叉树_哔哩哔哩_bilibili

层次遍历序列+中序遍历序列

讲解地址:层序+中序构造二叉树_哔哩哔哩_bilibili

真题

真题1

这里看清楚题目就行

题目2

这种给了图的最快的办法就是直接把选项的中序遍历序列写出来看看跟题目给的一致不

讲解地址:2012年下半年第58题_哔哩哔哩_bilibili

真题3

这题目有的坑,我一开始是用排除法在四种遍历里排除后得到A选项,结果是D选项,D选项是右根左,离大谱!A选项是从1开始的所以也跟题目的遍历不符合,还是要细心点

讲解地址:2015年下半年第59题_哔哩哔哩_bilibili

真题4

讲解地址:2017年上半年第59题_哔哩哔哩_bilibili

真题5

真题6

讲解地址:2019年下半年第58题_哔哩哔哩_bilibili

平衡二叉树

这是平衡二叉树,但是下面两个都不是平衡二叉树,完全二叉树一定是平衡二叉树,平衡二叉树不一定是完全二叉树

讲解地址:平衡二叉树_哔哩哔哩_bilibili

二叉排序数

上面的就是二叉排序树,也就是根结点大于左子树的所有结点,小于右子树的所有结点

讲解地址:二叉排序树定义_哔哩哔哩_bilibili

二叉排序树的构造

这里我一开始的想法是给它从小到大排序,然后在组成一颗二叉排序树,注意这里是不需要排序的!

真题

真题1

真题2

讲解地址:2014年下半年第59题_哔哩哔哩_bilibili

真题3

真题4

真题5

我一开始想着直接把图的中序遍历写出来不就是对应的二叉排序树的关键码序列嘛,于是非常自信选个A,这里是我知识掌握的不牢,混淆了,二叉排序树用中序遍历后的结果是有序序列,这是没问题的,但谁说二叉排序树的中序遍历就是其关键码序列,这是不成立的,这种题目只能通过把选项的图都画出来,别无他法

最优二叉树(哈夫曼树)

讲解地址:最优二叉树定义_哔哩哔哩_bilibili

最核心的就是权值相同加末尾,从左往右画好图

讲解地址:构造最优二叉树例子_哔哩哔哩_bilibili

给定义一个序列画哈夫曼树

讲解地址:构造最优二叉树例子_哔哩哔哩_bilibili

讲解地址:构造最优二叉树例子_哔哩哔哩_bilibili

哈夫曼编码

记得左0右1就行

哈夫曼编码压缩比

这里是跟等长编码进行比较,2x>=n,x是要多少个等长编码,n是指有多少个字符,上面有5个字符,所以n=5,求出x=3,然后就可以算出压缩比了

讲解地址:哈夫曼编码压缩比_哔哩哔哩_bilibili

真题

真题1

真题2

这里注意D选项是错的!例如下面的哈夫曼树有两个12就可以看出D选项是错的,描述的应该是二叉排序树

真题3

真题4

这个题目会算就行,而且算起来听复杂的,所以建议留在最后做

真题5

真题6

真题 7

真题8

这个题有两个重复的权值,牢记权值相同加末尾,从左到右画好图

真题9

真题10

真题11

线索二叉树

真题

真题1

真题2

最优二叉树的判断是只有度为0和度为2的结点

然后根据序列还原二叉树还是有点问题不太熟悉,要记得先序遍历是可以定父结点的位置的,然后在去中序遍历里判断其孩子结点的位置

讲解地址:2015年上半年第59题_哔哩哔哩_bilibili

真题3

图的定义

有向图和无向图

完全图

入度和出度和度的定义

无向图的某个顶点的入度和出度是一样的

路径的定义

讲解地址:路径_哔哩哔哩_bilibili

连通图和强连通图

这里注意

连通图是对于无向图来说的,所以一般称为无向连通图

无向连通图的最少边是n-1,最多边是n(n-1)/2

上面的是无向连通图,我一开始以为2-5没有边连接起来所以不是无向连通图,但是2-5是可以通过2-3-4-5实现的,也就是它不用必须直接把两个顶点用边连接起来,所以才会有上面的最少边和最多边的情况

强连通图是对于有向图来说的,所以一般称为有向强连通图,

有向强连通图的最少边是n,最多边是n(n-1)

这个图不是强有向连通图,因为顶点2并没有能够到达1和4的箭头

总的来说,不管是连通图还是强连通图,它们的核心判断就是看任意两个顶点能不能互相跑通,不一定要直接一口气跑到,可以跑到这再跑到那最后跑到目的顶点

真题

真题1

无论是无向图还是有向图,它们所有顶点的度数之和都是边数的两倍

真题2

图的存储结构

邻接矩阵表示法

也就是用矩阵来存储图,矩阵横表示i,竖表示j,有向图中A[i][j]=1表示顶点i指向顶点j,例如上面有向图中

A[1][2]=1说明顶点1指向顶点2,然后顶点1的出度就是数i=1的那一横有多少个1,入度就是数j=1的那一列有多少个1,例如上面的有向图中顶点1横着数有3个1,那就是出度为3,竖着数有1个1那就是入度为1

总结:矩阵横表示i,竖表示j,有向图中A[i][j]=1表示顶点i指向顶点j,横出竖入

邻接链表表示法

稠密图和稀疏图

也就是边多的图就是稠密图,例如完全图,一般边多的图用邻接矩阵存储

边少的图用邻接链表存储

讲解地址:稠密图与稀疏图_哔哩哔哩_bilibili

真题

真题1

讲解地址:2011年上半年第60题_哔哩哔哩_bilibili

讲解地址:2015年下半年第61题_哔哩哔哩_bilibili

上面这两个题一个是有向图一个无向图,有向图的非0元素是e,无向图的是2e

真题2

真题3

没有边用无穷,有边用对应边的权值

图的遍历

深度优先搜索

讲解地址:深度优先遍历_哔哩哔哩_bilibili

深度优先搜索的时间复杂度

当图用邻接矩阵表示时,那深度优先搜索的时间复杂度为O(n2)

当图用邻接链表表示时,那深度优先搜索的时间复杂度为O(n+e)

n为顶点数,e为边数

广度优先搜索

讲解地址:广度优先遍历和时间复杂度_哔哩哔哩_bilibili

广度优先搜索的时间复杂度

当图用邻接矩阵表示时,那广度优先搜索的时间复杂度为O(n2)

当图用邻接链表表示时,那广度优先搜索的时间复杂度为O(n+e)

n为顶点数,e为边数

真题

真题1

真题2

讲解地址:2016年上半年第61题_哔哩哔哩_bilibili

真题3

真题4

真题5

讲解地址:2018年下半年第60、61题_哔哩哔哩_bilibili

真题6

拓扑排序

例如上面的614325这个拓扑序列中,6在4的前面,那么可能存在弧6指向4,一定不存在弧4指向6,可能存在6到4的路径,一定不存在4到6的路径

讲解地址:拓扑排序_哔哩哔哩_bilibili

真题

真题1

真题2

真题3

真题4

真题5

查找

查找的基本概念

平均查找长度

Pi就是1/n,n为在多少个数字里查找,Ci就是比较的次数

例如 1 2 3 4 5中查找5。那n就是5,Ci就是5,因为比较了5次

讲解地址:查找基本概念_哔哩哔哩_bilibili

顺序查找

顺序查找就是从左往右查,不需要有序,适用于顺序和链式存储方式,平均查找长度为(n+1)/2

二分查找(折半查找)

讲解地址:折半查找_哔哩哔哩_bilibili

真题

真题1

二分查找要求顺序存储并且是有序存储,跟循环链表没屁毛钱关系

真题2

真题3

这里首先我第一次做直接就把123给丢了,看题不仔细,其次二分法没学透,所以我选了C。

这里要先把下标从1标出来,然后求中间值,中间值如果是小数,那就用下取整的方法求,例如上面的(1+10)/2=5.5,向下取整为5(所谓的向下取整就是取小于这个数的最大整数),然后下标5对应的是55<95,说明在55的右边,那就是从62开始,也就是舍弃55这个中间值,55不参与下一轮的比较

总结:下标求中间值(比较值),中间值为小数则向下取整,比较后舍弃中间值进行下一轮比较

讲解地址:2010年下半年第60题_哔哩哔哩_bilibili

真题4

真题5

真题6

真题7

这里有个有意思的技巧,做这样的题目有个规律

关键字序列中有四种规律

大大大大大大一直大下去

小小小小小小一直小下去

小大小大一直这样小大下去

大小大小一直这样大小下去

看不懂直接去讲解地址看视频就知道了

讲解地址:2015年上半年第60题_哔哩哔哩_bilibili

真题8

真题9

真题10

真题11

真题12

哈希表

哈希表的定义

哈希函数的构造方法

哈希函数的构造法知道除留余数法就行,就是求余,m一般去解决n单不大于n的质数,n是由多少个数字,地址一般是从0开始

解决冲突的方法

知道开放定址法就行了,说白了就是如果冲突了那就把那个数放到右边一位,如果还冲突那就继续往右推一位,直到不冲突为止,也就是把那个数放进去为止(这是线性探测法)

这个说白了就是如果冲突的话那就放到右边一位,如果还是冲突那就放到左边一位,这里的左边一位是以最开始冲突位置为原点的,再冲突就放到右边第4位,再冲突就放到左边第4位,以此类推

讲解地址:处理冲突拓展和装填因子_哔哩哔哩_bilibili

讲解地址:哈希函数构造与处理冲突_哔哩哔哩_bilibili

真题

真题1

真题2

这里我一开始以为是地址只从0-7,其实地址应该是取0-m,这个m在这里是13,也就是取模的那个数,所以这地址是0-12

讲解地址:2011年上半年第61题_哔哩哔哩_bilibili

真题3

真题4

真题5

真题6

真题7

讲解地址:2021年上半年第60题_哔哩哔哩_bilibili

小顶堆和大顶堆

讲解地址:小顶堆与大顶堆_哔哩哔哩_bilibili

讲解地址:建立小顶堆和大顶堆_哔哩哔哩_bilibili

就是给你一个序列,让你画出对应的大顶堆(大根堆)或小顶堆(小根堆)就行了

先根据序列顺序画一颗满二叉树,然后在一个个换位子,大顶堆要保证父结点比孩子结点要大,小顶堆要保证父结点比孩子结点小

真题

真题1

其实就是拿第一个和第二三个比较,再拿第二个和第四五个比较,再拿第三个和第六七个比较,可以在脑子里画一颗二叉树

真题2

把对应的这个大顶堆的树画出来就行了

讲解地址:2021年上半年第62题_哔哩哔哩_bilibili

真题3

排序

排序的定义

所有排序的时间和空间复杂度

快速排序的空间复杂度是O(log2n),上面是错的

最重要的一个总结,必须背

直接插入排序

稳定不归位(归位就是能够在排序时确定最终排序的位置),适用于基本有序的情况

讲解地址:直接插入排序_哔哩哔哩_bilibili

希尔排序

不稳定不归位

讲解地址:bilibili.com/video/BV1UP4y1A79a?p=35

计数排序

适合序列里只有1-9的数字排序,说白了就是把要排序的数统计一下有多少个

讲解地址:直接插入、希尔、计数排序动画演示_哔哩哔哩_bilibili

真题

真题1

这里我以为有什么做题技巧,没有!一个个比!

讲解地址:2010年上半年第61题_哔哩哔哩_bilibili

真题2

直接插入排序适用于基本有序的的序列,这个时候是比较次数最少的时候

讲解地址:2012年下半年第62、63题_哔哩哔哩_bilibili

真题3

真题4

这里我一开始是觉得65应该选C,也就是插入排序的平均时间复杂度,但是它这里是算最好的时间复杂度,这是因为它已经说了基本有序了,这是最好的情况,所以求的也是最好的时间复杂度

简单选择排序

不稳定归位

讲解地址:简单选择排序_哔哩哔哩_bilibili

堆排序

不稳定归位

这里知道怎么转新堆就差不多了

讲解地址:堆排序_哔哩哔哩_bilibili

真题

真题1

真题2

冒泡排序

稳定归位

讲解地址:冒泡排序_哔哩哔哩_bilibili

*快速排序

建议直接去看真题1的讲解,更容易懂

对于基本有序的序列用快速排序效率是最低的,时间复杂度是最坏的情况O(n2

不稳定归位

讲解地址:快速排序_哔哩哔哩_bilibili

真题

真题1

快速排序是采用分治法的思想,用i指针指向第一个,j指针指向最后一个,设置个p=第一个值,然后j指针指向的数字和p值比较,如果比p小那就把j指针指向的值赋值到i指针指向的值,如果比p大,那就j指针向左移动一位,然后阿巴阿巴,讲起来太抽象,建议直接看视频

讲解地址:2009年下半年第64、65题_哔哩哔哩_bilibili

真题2

讲解地址:2013年下半年第62、63题_哔哩哔哩_bilibili

对于基本有序的序列用直接插入排序效率是最高的,时间复杂度是最好的情况O(n)

快速排序效率是最低的,时间复杂度是最坏的情况O(n2),空间复杂度是O(n)

注意这个时间复杂度和空间复杂度要看具体题目而定,不是说一股脑的以为都是用平均时间复杂度,甚至这个空间复杂度都不是固定的

真题3

真题4

讲解地址:2020年下半年第62、63题_哔哩哔哩_bilibili

归并排序

讲解地址:归并排序_哔哩哔哩_bilibili

稳定不归位

真题

真题1

真题2

这里归并排序没掌握,多看看

讲解地址:2011年上半年第65题_哔哩哔哩_bilibili

真题3

讲解地址:2012年上半年第61题_哔哩哔哩_bilibili

真题4

真题5

真题6

真题7

真题8

也就是看归不归位

杂题选讲

真题

真题1

讲解地址:2009年上半年第58题_哔哩哔哩_bilibili

真题2

讲解地址:2009年上半年第59题_哔哩哔哩_bilibili

真题3

讲解地址:2009年上半年第62题_哔哩哔哩_bilibili

真题4

讲解地址:2009年下半年第62题_哔哩哔哩_bilibili

真题5

讲解地址:2012年下半年第61题_哔哩哔哩_bilibili

真题6

讲解地址:2013年上半年第51题_哔哩哔哩_bilibili

真题7

讲解地址:2014年上半年第64、65题_哔哩哔哩_bilibili

真题8

讲解地址:2015年上半年第62、63题_哔哩哔哩_bilibili

真题9

讲解地址:2015年上半年第64、65题_哔哩哔哩_bilibili

软件设计师---数据结构相关推荐

  1. 软件设计师-数据结构知识

    数据结构是计算机软件的一门基础课程,计算机科学各个领域及有关的应用软件都要用到各种数据结构.语言编译要使用栈.散列表及语法树:操作系统中用队列.存储管理表及目录树等:数据库系统运用线性表.多链表及索引 ...

  2. 软件设计师 数据结构1

    以下内容来源于哔哩哔哩UP主zst_2001的视频学习笔记,仅供复习所用 数据结构 1.大O表示法 1.1 时间复杂度 1.2 空间复杂度 1.3.渐进符号 1.4 递归时间.空间复杂度 2.线性结构 ...

  3. 软件设计师数据结构之线性结构复习小结

    1.1 线性表的定义 一个线性表是n(n>=0)个元素的有限序列,通常表示为(a1,a2,a3-,an).非空线性表的特点如下: 1)存在唯一的表头和表尾 2)除第一个元素外,序列中的每个元素均 ...

  4. 软件设计师笔记之数据结构

    数据结构是指数据对象及其相互关系和构造方法.在软件设计过程中,选用不同的数据结构对系统最终效果的影响极大.因此,该知识点是软件设计师核心考点. 本章我们需要掌握数组.图.广义表.树与二叉树.线性表.排 ...

  5. 软考《软件设计师》第九章:数据结构与算法

    第九章:数据结构与算法 考点1:矩阵 数组 矩阵:计算时采用带点排除法,注意一维数组的起始位置 考点2:表 线性表 顺序表:顺序存储,即用一组地址连续的存储单元依次存储线性表中的数据元素 链表:链式存 ...

  6. 软件设计师教程(五)计算机系统知识-数据结构

    软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(四)程序 ...

  7. 历年软件设计师下午考试试题汇总统计(更新至2016年上半年)

    本文对2006年5月至2016年5月[11年,21次]的软件设计师级别下午试题进行一个简单的汇总统计,希望对准备参加软考的朋友能有所帮助. 从2006年5月开始(尤其是从2010年5月开始),软件设计 ...

  8. 2015年上半年 软件设计师 上午试卷 综合知识-2

    2015年上半年 软件设计师 上午试卷 综合知识-2 与算术表达式"(a+(b-c))*d" 对应的树是(21). 答案: B 本题考查程序语言与数据结构基础知识. 对算术表达式& ...

  9. 软件设计师习题笔记-重点习题六

    1.机器字长为n位的二进制数可以用补码来表示( )个不同的有符号定点小数. 解析: 2.Cache的地址映像方式中,发生块冲突次数最小的是(全相联映像 ). 解析: 本题考查计算机组成的基础知识. C ...

最新文章

  1. 坐标下降+随机梯度下降
  2. 1、爱因斯相对论(狭义相对论)
  3. 13.字符串,结构,联合
  4. python:删除DataFrame中某列值为NaN的记录/行
  5. 需求分析说明书SRS
  6. echarts 柱状图颜色及渐变色设置
  7. vue关闭浏览器退出登录
  8. 36. 有效的数独(技巧)
  9. 华为手机相册怎么镜像翻转_怎么制作照片视频?利用手机相册快速制作卡点视频...
  10. python猜拳游戏
  11. 魔力宝贝手游版 服务器维护,魔力宝贝手游10月24日更新维护公告 各大更新内容...
  12. 数字图像处理——第九章 形态学处理
  13. 淘宝商家开通淘金币可以提高商品转化率吗?
  14. 分享10个非常不错的封面设计模板
  15. Andorid基础 Android系统层次框架结构
  16. oracle原销售订单退货,取消销售订单
  17. 【芯片驱动】SMG42630的固定步数实现
  18. 图片上传时报403问题
  19. 快速重装win10系统
  20. 最简陋的MP3播放器

热门文章

  1. 找出1-1000中的所有完美数
  2. windows 命令行进行分区和格式化
  3. 《基于改进YOLOv5的无人机图像检测算法》论文阅读
  4. mysql表结构导出成Excel格式带备注
  5. 专业的数据分析报告应该这么写!
  6. Java实战之管家婆记账系统(6)——导入和导出功能实现
  7. 如何快速把word文档中图片一键批量另存导出
  8. 网络历史之坑道的作用01
  9. python类定义实例以及简单的商品出售博弈游戏
  10. 高级产品经理再往上,至少有5层,你在第几层?