做数据结构算法题遇到的问题1

1.一个栈的入栈序列为ABCDE,则栈的不可能的输出序列为()
在这里插入图片描述
解析:
A选项错误:既然D先出栈,表示ABC一定已经入栈了,那么出栈顺序中,B一定比A先出栈!后进先出
B选项:ABCDE先全部入栈,再全部出栈;
C选项:ABCD先入栈,再将D出栈,再将E入栈,再将所有数据以此出栈;
D选项:A入栈马上出栈,B入栈马上出栈,C入栈马上出栈。。。

2.HashMap的数据结构是怎样的:
在这里插入图片描述
解析:
JDK8以后,HashMap的数据结构是数组+链表+红黑树
3.数组Q[0…m-1]用来表示一个循环队列, 用front指向队头元素,rear指向队尾元素的后一个位置 ,则当前队列中的元素数是。(队列总的元素数不会超过队列大小)
在这里插入图片描述
解析:
因为是循环链表 rear不一定就比front地址高 所以有可能rear-fornt得到结果是负数 所以为了正确性起见需要+m再%m

还有一个问题:
设有一个用数组Q[1…m]表示的环形队列,约定f为当前队头元素在数组中的位置,r为队尾元素的后一位置(按顺时针方向),若队列非空,则计算队列中元素个数的公式应为()
(m+r-f)mod m

应用:
设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有 front=16,rear=5(rear指向队尾元素的后一位置),当前循环队列中元素个数为(39
计算公式:(5-16+50)%50=39

4.向一个栈顶指针为hs的链栈中插入一个s结点时,应执行______。
在这里插入图片描述
解析:
题目问的应该就是压栈。
s插入后成为栈顶,s的next就是原来的HS,栈顶指针重新复制为s。

往栈中插入数据,栈是向下生长的,由高地址到低地址,所以s节点就是在低地址处,hs指向原栈顶,插入s后,s是新的栈顶,s的地址比原栈顶hs地址低,所以是s->next=hs,最后hs=s更新栈顶指针指向

5.关于栈和队列,下列说法正确的有()
A 可以使用队列模拟栈,但栈不能模拟队列
B 栈和队列都不支持随机访问
C 栈是一种树形数据结构
D 栈具有后进先出的特征

正确答案: B D

6.一个顺序表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。

正确答案: 108
解析:
第一个元素的存储地址是100,第二个是102,第三个是104,第五个是108

7.假定一个二维数组的定义语句为“int a[3][4]={ {3,4},{2,8,6}};”,则元素a[1][2]的值为(6)

解析:

数组为3行4列如下
a[0]::3 4 0 0
a[1]::2 8 6 0
a[2]::0 0 0 0
a[1][2]求的是第二行第三列的值,所以为6

8.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为(SA+222 )。

解析:

首先,本题的数组是从A[1][1]开始的,
也就是说和所谓的数组从零开始没什么关系。

A[1][1]的起始地址为SA,那么A[1][2]为SA+3.....
A[2][1]为SA+3*10.....A[i][j]为SA+((i-1)*10+(j-1))*3。
那么A[8][5]的起始地址就是SA+ (7*10+4)*3=SA+222.

9.设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。
10,15,14,18,20,36,40,21
解析:

原序列:20(基准),15,14,18,21,36,40,10

改1:10(low1),15,14,18,21,36,40,20(high1)
   :10,15(low2),14,18,21,36,40,20(high2)
   :10,15,14(low3),18,21,36,40,20(high3)
   :10,15,14,18(low4),21,36,40,20(high4)
   
改2:10,15,14,18,20(low5),36,40,21(high5)
   :10,15,14,18,20(low6),36(high6),40,21
   :10,15,14,18,20(low7),36,40(high6),21
   
最终结束快排后的结果:10,15,14,18,20,36,40,21

10.下列叙述中正确的是( )
在这里插入图片描述
解析:
在栈中,栈底指针保持不变,有元素入栈,栈顶指名增加,有元素出栈,栈顶指针减少。
在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。
在循环链表中,前一个结点指向后一个结点,而最后一个结点指向头结点,只有头结点是固定的。
线性链表中,由于前一个结点包含下一个结点的指针,尾结点指针为空,要插入或删除元素,只需要改变相应位置的结点指针即可,头指针和尾指针无法决定链表长度。
故本题答案为 A 选项。

c如果改成循环队列,就是成立的

10.以下开源软件中经常被用作队列的是哪个?
A.MongoDB
B.Redis
C.Memcached
D.kafka

正确答案: B D

猜你喜欢

转载自blog.csdn.net/weixin_41056807/article/details/100139161
今日推荐