【软考】数据结构做题时遇到的选择题,可背,仍在更新...

1.某二叉树为单枝树(即非叶子结点只有一个孩子结点)且具有n个节点(n大于1),则该二叉树共有n层,每层有一个结点。

2.在平衡二叉树中,任意一个结点的左、右子树的高度之差的绝对值不超过1,且左右子树都是平衡二叉树

3.在二叉树的第i层上,最多有2^(i-1)个结点

4.深度为h的二叉树,最多有2^h-1个结点

5.任一棵二叉树,若其叶子结点数为n0度为2的结点数为n2,那么必有n0=n2+1

6.为实现快速排序算法,待排序列适合采用顺序存储(注:大多数内部排序算法都只适用于顺序存储,顺序存储适用于频繁查询,链式存储适用于频繁插入、删除、更新元素)

7.关于图的遍历使用队列对图进行广度优先遍历深度优先遍历可以类似对应树的先序遍历(就是根左右)

得到图

广度优先遍历(BFS):从图的某个顶点V出发,在访问了V之后,依次访问V的各个未被访问的邻接点,然后分别从这些邻接点出发,依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直到图中的所有已被访问的顶点的邻接点都被访问到。                  (V0,V1,V2,V3,V4,V5)

深度优先遍历(DFS):类树的先序遍历。回溯法

8.若在单向链表上,除访问链表中所有结点外,还需在表尾频繁插入结点,那么采用仅设尾指针的单向循环链表最节省时间

9.用哈希表(Hash)存储元素时,需要进行冲突(碰撞)处理冲突是指关键字不同的元素被映射到相同的存储位置

10.散列存储结构(也叫Hash存储)的特点是数据结构中元素的存储地址关键字之间存在某种映射关系

11.某个二叉查找树(即二叉排序树)中进行查找时,效率最差的情形是该二叉查找树是单枝树(注:单枝树极度不平衡,查找得平均时间复杂度是O(N))

12.1.插入排序堆排序快速排序归并排序冒泡排序、简单选择排序法,看运气吧,我放弃了

1 3 2 5 6 4 (无序)

插入排序:定位1(首位) 1就是有序序列,1之后是无序序列,无序队列一个一个和1比大小,插入有序队列 (适用基本有序的数组,时间复杂度O(n)

shell(希尔)排序:先将整个待排序的记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录,都基本有序时,再对全体记录进行依次直接插入排序

简单选择排序:首先在所有记录中选择最小的记录,把它与第一个交换,再在其余记录里选出排序码最小的,与第二个交换,重复...直到排好,平均时间复杂度O(n^2) 不稳定 第一个一定是最小或最大

堆排序:按无序构一个二叉树,再弄成大根堆(左右子树比根大),再交换顶和尾巴?再变成大根堆,重复,直到变成小根堆(顶比左右小)

快速排序:(采用分治思想)定一个首位1,做基准,再弄个i,j;i在最左指1,j在最右指末尾4,然后比较i j,右边要比左边大,否则交换ij的位置,直到ij相遇,把基准跟j调换;对半劈开,一半一半重复上面的思想。(适用于无序数组,对有序数组来说时间复杂度是O(n^2)

归并排序:基于分治的思想 懂一点了再补

冒泡排序:对一个关键码序列进行递增排序,对于其中关键码相同的元素,可以保证在排序前后这些元素的相对位置不变。

计数排序(基数排序):对一定范围内的整数排序时,快于任何比较排序算法,O(n+k)

快选堆希不稳定

排序算法的稳定性指:排序后的相同关键字的相对位置与排序前是一样的。(1 2 3 2* 4例如排之前2在2*前面,那排之后2也要在2*前面)

12.2 算法:二分查找(折半查找)、贪婪算法(贪心算法)、分治算法、遗传算法

分治算法:对于一个规模为n的问题,问题很容易解决(n很小)则直接解决;否则,分解成k个互相独立且与原问题形成相同的小规模问题,再递归(递归就是自己调用自己)解决子问题,等解决完,再把子问题的解归并成原解(分解——>解决——>合并)

二分查找(折半查找):(前提:有序序列,顺序存储的线性结构,增序排列 )长度/2就是分界点 如果是7个 就取第四位,8个就取第四位

贪婪算法(贪心算法):在问题求解时,总是做出在当前看来最好的选择。不从整体最优上加以考虑,所做的是在某种意义上的局部最优解(Ps:往包里放东西)

遗传算法:遗传算法的基本运算过程:初始化个体评价选择运算(繁殖)交叉运算(重组)变异运算(突变)

13.堆排序是一种选择排序,m个元素进行堆排序时,其时间复杂性为O(log2n{\color{Green} })

14.栈的特点后进先出,若用单链表作为栈的存储结构,并用头指针作为栈顶指针,则入栈和出栈操作都不需要遍历链表(注:双向链表也是单链表,它有两个指针,直接后继和直接前驱

15.设有一个包含n个元素的有序线性表。在等概率情况下删除其中的一个元素,若采用顺序存储结构,则平均需要移动(n-1)/2个元素;若采用单链表存储,则平均需要移动0个元素(链表删除元素改指针即可)

16.当有n个结点的二叉树采用二叉链表链存储时,空指针的个数为n+1,采用三叉链表存储空指针的个数为n+2

17.设某循环队列Q的定义中有frontrear两个域变量,其中,front指示队头元素的位置,rear指示队尾元素之后的位置。若该队列的容量是M,则其长度len(元素个数)(Q.rear-Q.front+M)%M;求队头元素的指针公示:(rear-len+1+M)%M

18.二维数组A[1...M,1...N]偏移量计算公式:(i,j下标从0开始)

任意一个A[i,j]的偏移量等于(按行i*N+j;

任意一个A[i,j]的偏移量等于(按列j*M+i

     

完整公式:

19.栈的应用:表达式求值、括号匹配、递归;队列的应用:打印队列

20.求图的最小生成树Prim算法Kruscal算法都是基于贪心算法的应用。Prim算法时间复杂度O(n^2),与边数无关,适合于稠密图Kruscal算法时间复杂度O(elog2^e),只与边有关系,适合求稀疏图。两个算法得到的最小生成树可能不一样。

21.一颗有n个结点的树的所有结点的度数之和为n-1

22.优先队列通常采用二叉堆数据结构实现,向优先队列中插入一个元素的时间复杂度为O(lgn)

二叉堆数据结构:插入删除一个元素的时间复杂度均为O(lgn)

23.霍夫曼树/霍夫曼编码:基于贪心算法;左子树小于右子树小于根;左边标0右边标1;一个字符出现次数越频繁,编码越短,反之,出现次数越少,编码越长

如何快速画出霍夫曼树_鸡啄米的时光机的博客-CSDN博客_哈夫曼树画法哈夫曼树(霍夫曼树)又称为最优二叉树. 一般用来减少程序整体运行时间,将权重大的放在前面。下面我们以【5、8、4、11、9、13】为例来画出哈夫曼树(数字大小代码权重大小,越大的权重越大)方法/步骤第一步:按从小到大排序。【5、8、4、11、9、13】→【4、5、8、9、11、13】第二步:选最小两个数画出一个树,最小数为4和5。给定的4、5、8、9、11、13为白色, 红色的9为4+5,与给定的...https://blog.csdn.net/qq_33221533/article/details/80877686?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164783999216782092972902%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164783999216782092972902&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-80877686.142%5Ev2%5Earticle_score_rank,143%5Ev4%5Econtrol&utm_term=%E9%9C%8D%E5%A4%AB%E6%9B%BC%E6%A0%91%E5%A6%82%E4%BD%95%E7%94%BB&spm=1018.2226.3001.4187 

24.(无向图)对于有n个结,E条边点的邻接矩阵,有2E个非零元素;对于有向图,其邻接矩阵中非零元素正方向的边的个数

对于无向图边e和点n有以下关系:e=n(n-1)/2;有向图则为:e=n(n-1)

有向图若为强连通图,则任意两个顶点之间都要存在路径。

25.表达式采用逆波兰式表示时,利用进行求值。(逆波兰式(即后缀表达式):从左至右将数字入栈,当遇运算符时,出栈运算符所需数据进行操作,再将操作结果入栈,以此类推)

26.在二叉排序树中进行查找的效率与二叉排序树的深度有关。(二叉排序树查找路径自顶向下

27.函数调用返回控制是用实现的(当有多个函数构成嵌套调用时:如递归调用,按照后调用先返回的原则,函数之间的信息传递和控制转移可以用来实现)

28.队列都是操作受限的线性表;仅在表尾插入和删除元素;队列仅在表头删除元素、在表尾插入元素。

队列采用单循环链表存储时,只需设置队尾指针就可以使入队和出队操作的时间复杂度都为O(1);

若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高

29.递归下降分析方法是一种自上而下的语法分析方法

30.输出受限的双端队列、输入受限的双端队列、一端完全受限的双端队列

数据结构(18)输入受限的双端队列和输出受限的双端队列详解__李白_的博客-CSDN博客_输出受限的双端队列关于双端队列的基本概念和什么叫受限双端队列,请戳双端队列与受限双端队列。本文主要通过一个经典的习题来分享一下受限双端队列的入队和出队情况。设有一个双端队列,输入序列为1,2,3,4,试分别求出以下条件的输出序列。(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列(2)不能由输入受限的双端队列得到,但能由输出受限的双端队列得到的输出序列(3)既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列看完是不是有点想打人,那我们从容易到简单把这个题.https://blog.csdn.net/weixin_40179091/article/details/106405237?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164802006016782092982551%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=164802006016782092982551&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-106405237.142%5Ev3%5Epc_search_insert_es_download,143%5Ev4%5Econtrol&utm_term=%E8%BE%93%E5%87%BA%E5%8F%97%E9%99%90%E7%9A%84%E5%8F%8C%E7%AB%AF%E9%98%9F%E5%88%97&spm=1018.2226.3001.418731.拓扑序列(拓扑排序):只有有向无环图有拓扑序列。

求解步骤:1.在有向图中选一个入度为0的顶点,输出;2.在图中删除该顶点和以它为尾的弧重复12,直到输出所有顶点,或者图中没有入度为0的顶点了,此时拓扑序列不存在,且图中必有环。 拓扑序列不唯一

拓扑序列:654321、564321

 32.对于n个结点、e条边且采用数组表示法(即邻接矩阵存储)的无向图进行深度优先遍历,时间复杂度为O(n^2),适用于稠密图;对于采用邻接链表存储无向图进行深度优先遍历,时间复杂度是O(n+e),适用于稀疏图;

33.字符串的长度是指串中所含字符的个数

34.背包问题

 0-1装:是要么全装要么全不装,此时先按价值最大的拿,拿的同时考虑重量;复杂度O(nW) 15

部分装:考虑每一件物品对应的价值,拿对应价值最大的装进去;时间复杂度是几? 16.67

35.递归法求时间复杂度

 

 ↑图出自↓软考考点之如何估算一个算法的时间复杂度和空间复杂度_guangod的博客-CSDN博客_计算语句频度和估算算法时间复杂度的方法

 36.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值