NeuDs 数据结构 || 堆栈和队列

文章介绍了栈和队列这两种基本数据结构,包括它们的定义、操作以及特殊情况如假溢出、循环队列的概念。文中还通过实例解释了栈的入栈、出栈顺序与可能的序列,以及队列的入队、出队规则,并提出了若干相关判断题和单选题来检验读者对这些概念的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.判断题

栈是一种特殊的线性表,它的插入和删除操作都是在表的同一端进行。 T

队列中允许插入的一端叫队头,允许删除的一端叫队尾。 F

队列结构的顺序存储会产生假溢出现象。T

(29条消息) 顺序队列的假溢出_队列假溢出_福将~白鹿的博客-优快云博客

 若一个栈的输入序列为{1, 2, 3, 4, 5},则不可能得到{3, 4, 1, 2, 5}这样的出栈序列。T

栈顶元素和栈底元素有可能是冋一个元素。T

在一个只包含一个元素的栈中,这个元素即是最后入栈的元素,也是最先入栈的元素,因此它既是栈顶元素,也是栈底元素。

队列中允许插入的一端叫队头,允许删除的一端叫队尾  F

在队列中,允许插入的一端通常被称为队尾(rear),允许删除的一端通常被称为队头(front)。

在n个元素连续进栈以后,它们的出栈顺序和进栈顺序一定正好相反。T

通过对堆栈S操作:Push(S,1), Push(S,2), Pop(S), Push(S,3), Pop(S), Pop(S)。输出的序列为:123。F

正确的应为:231,push 输入元素,pop删除栈顶元素

栈底元素是不能删除的元素。 F

循环队列执行出队操作时会引起大量元素的移动。 F

栈和队列的存储方式,既可以是顺序方式,也可以是链式方式。T

在用数组表示的循环队列中,front值一定小于等于rear值。F

顺序栈中元素值的大小是有序的。F

若一个栈的输入序列为1,2,3,…,N,输出序列的第一个元素是i,则第j个输出元素是j−i−1。F

链栈的插入在栈顶,删除在栈底。F

所谓“循环队列”是指用单向循环链表或者循环数组表示的队列。F

将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。因此,循环队列是一个抽象的数据结构,而单向循环链表或循环数组是具体的实现方式,不是数据结构本身。

 二.单选题

1.若用大小为6的数组来实现循环队列,且当前frontrear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,frontrear的值分别为多少?

A.2和0

B.2和4

C.2和2

D.2和6

*此处为循环队列

删除元素时:front = (front + x(为删除元素的个数)+ 队列长度)%队列长度,rear不变

增加元素时:rear = (rear + x(增加元素的的个数)+ 队列长度)%队列长度,front不变

2.若元素a、b、c、d、e、f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈工作,则不可能得到的出栈序列是?

A.b c a e f d

B.d c e b f a

C.c b d a e f

D.a f e d c b

3.若top为指向栈顶元素的指针,判定栈S(最多容纳m个元素)为空的条件是:

A.S->top != m-1

B.S->top == m-1

C.S->top == 0

D.S->top == -1

4.给定一个堆栈的入栈序列为{ 1, 2, ⋯, n },出栈序列为{ p1​, p2​, ⋯, pn​ }。如果p2​=n,则存在多少种不同的出栈序列?

A.2

B.n−1

C.n

D.1

解析:p2=n,即第二个出栈的数据元素是n,那么第一个出栈的数据元素则可以是{1,2,⋯,n-1}中的任何一个,所以存在的不同的出栈序列一种有n-1种。 

5.循环顺序队列中是否可以插入下一个元素()。

A.只与数组大小有关,与队首指针和队尾指针的值无关

B.只与队尾指针的值有关,与队头指针的值无关

C.与曾经进行过多少次插入操作有关

D.与队头指针和队尾指针的值有关

 6.若栈采用顺序存储方式存储,现两栈共享空间V[m]top[i]代表第ii=1或2)个栈的栈顶;栈1的底在V[0],栈2的底在V[m-1],则栈满的条件是:

A.top[1]+top[2]==m

B.top[1]+1==top[2]

C.top[1]==top[2]

D.top[2]-top[1]|==0

7.为解决计算机主机与打印机之间速度不匹配问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是?

A.堆栈

B.图

C.队列

D.树

该缓冲区的逻辑结构通常为先进先出(FIFO)队列,也称为缓冲队列。主机将要输出的数据依次写入队列的尾部,而打印机则从队列的头部依次取出数据进行打印。这种缓冲区结构可以保证数据的顺序性,并且可以避免数据丢失或重复打印等问题。同时,由于队列具有先进先出的特点,可以有效地解决速度不匹配的问题。 

8.在一个不带头结点的非空链式队列中,假设f和r分别为队头和队尾指针,则插入s所指的结点运算是

A.s->next=s; r=s;

B.f->next=s; f=s;

C.s->next=f; f=s;

D.r->next=s; r=s;

9.如果循环队列用大小为m的数组表示,且用队头指针front和队列元素个数size代替一般循环队列中的frontrear指针来表示队列的范围,那么这样的循环队列可以容纳的元素个数最多为:

A.m+1

B.不能确定

C.m

D.m-1

 有了size后就不必留一个空间表示队列满了,所以答案为m。

正常来讲,front == rear 既可以表示只有一个元素,或者满元素。所以如果没有size的话,答案应该是m-1。有了size,只需根据数组大小来判断元素个数。

10.某队列允许在其两端进行入队操作,但仅允许在一端进行出队操作。若元素a、b、c、d、e依次入此队列后再进行出队操作,则不可能得到的出队序列是:

A.d b a c e

B.e c b a d

C.b a c d e

D.d b c a e

a选项:b a c d e☞左入a,右入b,左入c,左入d,左入e。出队端为右端(或者整个完全相反也可以。)

b选项:d b a c e☞左入a,右入b,左入c,右入d,左入e。出队端为右端(或者整个完全相反也可以。)

d选项:e c b a d☞左入a,左入b,左入c,右入d,左入e。出队端为左端(或者整个完全相反也可以。

但是C选项中出队顺序是d,b,c,a,e从左出队,从左右入队,那么a入右,b入左,c不可能在a和b的中间,因此C选项的出队顺序是错误的 ,不管怎样ab是挨在一起出队的
————————————————
版权声明:本文为优快云博主「Anagnahs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_42202174/article/details/88912760

11.如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为:

A.(front+size)%m

B.(front+size-1)%m

C.front+size

D.front+size-1

12.已知初始为空的队列 Q 的一端仅能进行入队操作,另外一端既能进行入队操作又能进行出队操作。若 Q 的入队序列是 1、2、3、4、5,则不能得到的出队序列是:

A.4、2、1、3、5

B.5、4、3、1、2

C.5、3、1、2、4

D.4、1、3、2、5

13.令P代表入栈,O代表出栈。若利用堆栈将中缀表达式3*2+8/4转为后缀表达式,则相应的堆栈操作序列是:

A.POPPOO

B.PPOOPO

C.POPOPO

D.PPPOOO

  1. 初始化一个空堆栈和一个空列表,用于存储转换后的后缀表达式。
  2. 从左到右遍历中缀表达式的每个元素,依次为:3、*、2、+、8、/、4。
  3. 因为3是一个数字,所以将其添加到列表的末尾。
  4. " * "是运算符,因此比较其与堆栈顶部元素(如果有)的优先级,并将其压入堆栈。
  5. 2是一个数字,将其添加到列表的末尾。
  6. "+"是运算符,因为比" * "的优先级低,所以弹出堆栈中的" * ",将其添加到列表的末尾。然后将"+"压入堆栈。
  7. 8是一个数字,将其添加到列表的末尾。
  8. "/"是运算符,因为比"+"的优先级高,所以将其压入堆栈。
  9. 4是一个数字,将其添加到列表的末尾。
  10. 处理完中缀表达式后,因为堆栈中还有元素,所以依次弹出"/"和"+",并将它们添加到列表的末尾。最终得到的列表为:[3, 2, *, 8, 4, /, +]

    

14.假设有5个整数以1、2、3、4、5的顺序被压入堆栈,且出栈顺序为3、5、4、2、1,那么为了获得这样的输出,堆栈大小至少为:

A.3

B.5

C.2

D.4

15. 有六个元素以6、5、4、3、2、1的顺序进栈,问哪个不是合法的出栈序列?

A.5 4 3 6 1 2

B.4 5 3 1 2 6

C.2 3 4 1 5 6

D.3 4 6 5 2 1

16.表达式a*(b+c)-d的后缀表达式是:

A.a b c d * + -

B.a b c * + d -

C.- + * a b c d

D.a b c + * d -

17.设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是?

A.4 5 1 3 2

B.5 1 2 3 4

C.4 3 1 2 5

D.3 2 1 5 4

18.设栈S和队列Q的初始状态均为空,元素{1, 2, 3, 4, 5, 6, 7}依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是{2, 5, 6, 4, 7, 3, 1},则栈S的容量至少是:

A.1

B.2

C.4

D.3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值