当前位置: 首页 > news >正文

软考-软件设计师中级备考 13、刷题 数据结构

倒计时17天时间不多了,数据库、UML、等知识点有基础直接略过,法律全靠考前的一两天刷题,英语直接放弃。

一、数据结构:链表、栈、队列、数组、哈希表、树、图

1、关于链表操作,说法正确的是:
A)新增一个头结点需要遍历链表         B) 新增一个尾节点需要遍历链表

C)删除最后一个节点需要遍历链表     D)删除第一个节点需要遍历链表

答案是C,答题关键:1)理解链表的定义,2)说法正确/错误的是

去年真题,题目有争议,但是排除法可破。题目应为对于拥有头指针与尾指针的链表,删除最后一个节点需要查找倒数第二个节点,考察点:链表的查找需要遍历。

2.1、设栈初始时为空,对于入栈序列1,2,3,......,n这些元素经过栈之后得到栈序列P1,P2,P3,......,Pn
若P3=4,则p1,p2不可能的取值是(C)
A)6,5      B) 2,3     C)3,1     D)3,5

栈  先入后出
排除法   A=》6,5,4=》成立
              B=》2,3,4=》1,2入栈后2出栈,3入栈后3出栈,4入栈后4出栈=》成立
              C=》3,1,4=》???
              D=》3,5,4=》1,2,3入栈后3出栈,4,5入栈后5出栈4出栈

2.2、2023真题:利用栈对算数表达式10*(40-30/5)+20求值时,存放操作数的栈(初始为空)的容量至少为(4)才能满足暂存该表达式中的运算数或运算结果的要求?
      先计算括号内的除法

  1. 开始扫描表达式,首先遇到操作数 10,将 10 入栈,此时操作数栈:[10]
  2. 遇到左括号 (,继续扫描,遇到操作数 40,将 40 入栈,此时操作数栈:[10, 40]
  3. 遇到操作数 30,将 30 入栈,此时操作数栈:[10, 40, 30]
  4. 遇到操作数 5,将 5 入栈,此时操作数栈:[10, 40, 30, 5]。 // 此时栈中元素数量达到最多
  5. 遇到除号 /,从操作数栈中弹出两个操作数 5 和 30(先弹出 5,再弹出 30),计算 30÷5 = 6,将结果 6 入栈,此时操作数栈:[10, 40, 6]
  6. 遇到减号 -,从操作数栈中弹出两个操作数 6 和 40(先弹出 6,再弹出 40),计算 40 - 6 = 34,将结果 34 入栈,此时操作数栈:[10, 34]
  7. 遇到右括号 ),遇到乘号 ×,从操作数栈中弹出两个操作数 34 和 10(先弹出 34,再弹出 10),计算 10×34 = 340,将结果 340 入栈,此时操作数栈:[340]
  8. 遇到操作数 20,将 20 入栈,此时操作数栈:[340, 20]
  9. 遇到加号 +,从操作数栈中弹出两个操作数 20 和 340(先弹出 20,再弹出 340),计算 340 + 20 = 360,将结果 360 入栈,此时操作数栈:[360]

3、某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a、b、c、d依次全部入队列,之后进行出队操作,则不能得到的出队序列是
A)dbac    B)cabd    C)acdb    D)bacd

对于普通队列,由打饭排队先到先得可破(先入先出FIFO),所以会考察变种题比如两端入队、一端出队问题。

答案是C,因为是依次入队列,出队时a和b肯定是挨着的,可以将a和b看成是一个整体,用排除法解题。设ab=m、ba=n

A)dnc    B)cmd    C)acdb    D)ncd   =》选C

链表和数组都可以实现队列,当使用数组+首尾指针实现队列时,不需要(无法)移动队内元素,由于数组大小是固定的所以存在溢出的问题,由于顺序存储所以存在假溢出问题,针对假溢出=》循环队列

4、(对比链表)采用数组实现队列的优点是入队和出队操作不需要移动队内元素
      数组+首尾指针

      循环队列是数组实现队列的改进算法,通过取模运算避免假溢出
      数组+首尾指针+取模运算 rear = (rear + 1) % maxSize、 front = (front + 1) % maxSize

4.1 单纯的数组题,考察按行优先/按列优先,寻址

以上图3x3的二维数组为例     按行:a00,a01,a02,a10,a11,a12,a20,a21,a22

                                               按列:a00,a10,a20,a01,a11,a22,a02,a12,a22


      1)已知二维数组A按行优先方式存储,每个元素占用2个存储单元,第一个元素A[0][0]的地址为100,元素A[3][3]的存储地址是220,则元素A[5][5]的地址是(300)

      2)已知二维数组A按列优先方式存储,每个元素占用2个存储单元,第一个元素A[0][0]的地址为100,元素A[3][3]的存储地址是220,则元素A[5][5]的地址是(300)

5.1、某树共有n个节点,其中所有分支节点的度为K,则该树中叶子节点的个数为:

A、  (n(k+1)-1)/k    B、   (n(k+1)+1)/k   C、  (n(k-1)+1)/k    D、  (n(k-1)-1)/k
答案是C,死记硬背 ,如果记不住,那假设树有2个节点,=》所有分支节点的度为1,带入公式。

5.2、已知树T的度为4,且度为4的结点数为7个、且度为3的结点数为5个、且度为2的结点数为8个、且度为1的结点数为10个,那么T的叶子节点个数为(40)

总结点数:4*7+3*5+2*8+1*10+1=70    非叶子节点个数:7+5+8+10=30    =》70-30=40

6、当一颗非空二叉树的()时,对该二叉树进行中序遍历和后续遍历所得的序列相同

A)每个非叶子节点都只有左子树    B)每个非叶子节点都只有右子树

C)每个非叶子节点的度都为1    D)每个非叶子节点的度都为2

答案是->根

二叉树是一种每个节点最多有两个子树的树结构,这两个子树分别称为左子树右子树

前序遍历:根->->右    中序遍历:左->根->右    后序遍历:左->->根 

口诀是简化过得,实际运用为算法
前序遍历:根->左子树(递归)->右    

中序遍历:左子树(递归)->根->右子树(递归)    

后序遍历:左子树(递归)->右子树(递归) ->根 

再次强化:
7、已知某二叉树的先序遍历序列为A B C D E F、中序遍历序列为B A D C F E,则可以确定该二叉树()
A)是单支树(即非叶子结点都只有一个孩子)   B)高度为4

C)根节点的左子树为空                                  D)根节点的右子树为空 

答案是B,排除法,根节点的左子树为空不符合中序遍历C不对根节点的右子树为空不符合中序遍历D不对=》A也不对,单支树属于二叉树,遇到二叉树公式题,巧用单支树举例

19年真题:某二叉树的中序,先序遍历序列分别为{20,30,10,50,40},{10,20,30,40,50},则该二叉树的后序遍历序列为()   {30,20,50,40,10}

先序,中序遍历序列 {10,20,30,40,50},{20,30,10,50,40}
=》10是根节点所以肯定在最后一个 排除法,20、30属于左子树  排除法、50,40属于右子树  排除法

8、当二叉树中的节点数目确定时,(B)的高度一定是最小的。
A) 二叉排序树  B)完全二叉树   C)线索二叉树   D)最优二叉树

深度为3的完全二叉树如下图,具有n个节点的完全二叉树的深度为⌊log2n⌋+1  ,⌊⌋表示向下取整,带入6和7,得到的结果都是三。
 

                                    (满二叉树)

2021年真题   若某二叉树中共有1024个节点,则该二叉树的高度区间是()
最高是1024即单支树,最低是完全二叉树⌊log2n⌋+1=》11  =》[11,1024]  


9、最优二叉树(哈夫曼树)
以下关于哈夫曼树的叙述中错误的是(D)
A 权值越大的叶子离根结点越近       B 哈夫曼树中不存在只有一个子树的结点
C 哈夫曼树中的结点总数一定为奇数  D 权值相同的结点到树根的路径长度一定相同

带权二叉树是一种 每个节点(通常指叶子节点)都带有权值 的二叉树。权值可以是任意给定的数值,而带权路径长度(WPL)是指从根节点到每个叶子节点的路径长度(边数)乘以该叶子节点权值的总和

哈夫曼树是一种 特殊的带权二叉树,它满足 带权路径长度(WPL)最小 的条件,因此也被称为 “最优二叉树”。其构造方法是通过哈夫曼算法,每次选择权值最小的两个节点合并,直到形成一棵完整的二叉树。

假设有三个叶子节点,权值分别为 1、2、3,构件哈夫曼树,画图表示,并计算权值

  • 权值为1的叶子节点的带权路径长度为2*1 = 2(从根节点到该叶子节点经过2条边);
  • 权值为2的叶子节点的带权路径长度为2*2 = 4;
  • 权值为3的叶子节点的带权路径长度为2*3 = 6。
  • 2+4+6=12;

2023年真题  一颗哈夫曼树共有127个结点,对其进行哈夫曼编码,功能得到(64)个字符编码
              二叉树中结点总数n与度为0、度为1、度为2的结点数之间的关系为n = n0 + n1 + n2
              对于哈夫曼树n1 = 0,n0​=n2​+1  =》 n2 = 64

10、设有5个字符,根据其使用频率为其构造哈夫曼编码。以下编码方案中()是不可能的。
A) {111,110,101,100,0}      B{0000,0001,001,01,1}    

C){11,10,01,001,000}        D{11,10,011,010,000}

哈夫曼编码是一种前缀编码,即对于一组编码,任何一个编码都不是其他编码的前缀

本题通过前缀无法判断
 

根据哈夫曼编码的构造规则和前缀码的Kraft不等式分析:

选项D的编码{11,10,011,010,000}

长度分布:2个长度为2的编码,3个长度为3的编码。

Kraft总和=1:计算为 2*2^-2+3*2^-3=7/8<1=》D
 

11、某简单无向连通图G的顶点数为n,则图G最少和最多分别有()条边。
n-1,n*(n-1)/2     加上顶点数为1=》只有0条边,排除法


12、设有向图G具有n个顶点、e条弧,采用邻接表存储,则完成深度/广度优先遍历的时间复杂度为 O(n + e)

13、对于如下所示的有向图,其邻接矩阵是一个(5*5)矩阵,采用邻接链表存储时顶点的表结点个数为2,顶点5的表结点个数为0,顶点2和3的表结点个数分别为(2.2)

空1)行列数都为节点个数
空2)看箭头指向别人几条


 

相关文章:

  • aws平台windows虚拟机扩容
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 8 |产品化与运维:批量标定、误差监控、OTA 升级与安全防护
  • C语言编程--递归程序--求数组的最大元素值
  • Java后端开发day42--IO流(二)--字符集字符流
  • 2025年渗透测试面试题总结-某战队红队实习面经(附回答)(题目+回答)
  • Nmap 工具的详细使用教程
  • 《Python星球日记》第34天:Web 安全基础
  • 前端流行框架Vue3教程:13. 组件传递数据_Props
  • 今年我国已发生三级以上地震318次
  • 在 Win11 下安装 Wireshark 的详细步骤
  • 深入浅出iOS性能优化:打造极致用户体验的实战指南
  • 餐饮加盟店如何通过日事清全流程闭环管理实现进度同步与效率升级?
  • Java学习手册:Base64 编码概念和应用场景
  • python校园二手交易管理系统-闲置物品交易系统
  • python setup.py install --user和pip install -e .的区别
  • C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
  • 高等数学第四章---不定积分(4.4有理函数的不定积分2)
  • springBoot中自定义一个validation注解,实现指定枚举值校验
  • 【JEECG】BasicTable单元格编辑,插槽添加下拉组件样式错位
  • 【Trea】Trea国际版|海外版下载
  • 李彦宏:技术迭代速度之快从业30年来未见过,要提升执行力战胜对手
  • 印巴局势快速升级,外交部:呼吁印巴以和平稳定的大局为重
  • 这个五月,有三部纪录电影值得一看
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队
  • 工信部:加强通用大模型和行业大模型研发布局
  • 五一假期多地政府食堂对外开放:部分机关食堂饭菜“秒没”