基础习题-栈和队列-03

目录

1. 将5个字母“ooops”按此顺序入栈,则有( )种不同的出栈顺序可以仍然得到"ooops”"( )。

A.1

B.3

C.5

D.6

解析:

此题可以首先列出所有可能的出栈顺序,然后列出各个出战顺序的结果,计数即可。

然后我就准备要列出来,也就发现了卡特兰数是一种经典的组合数,其前几项为 : 1, 2, 5, 14, 42,42

5种。要得到ooops,ps固定的 所以看000有几种出栈方式即可。

在这里插入图片描述


2. 对于一个栈,给出输入项A,B,C,D,如果输入项序列为A,B,C,D,试给出全部可能的输出序列。

14种

    A先出:
       (1)A先出基础上B出有:ABCD、ABDC

       (2)A先出基础上C出有:ACBD、ACDB

       (3)A先出基础上D出有:ADCB

    B先出:BACD、BADC、BCAD、BCDA、BDCA

    C先出:CBAD、CBDA、CDBA

    D先出:DCBA

3. 若一个栈的输入序列为1,2,3,……n,输出序列的第一个元素是i,则第j个输出元素是( ).

A. 1-j-1
B. i-j
C. j-i+ 1
D.不确定

解析:

栈是一种后进先出的线性表结构,但本题无法确定输入和输出的时间顺序,即不一定是在所有元素输入栈后再进行输出。


4. 设有n个元素进栈序列是P1,P2, P3,… Pn,其输出序列是1,2,3, … n,若P3=3,则P1的值( )。

A.可能是2
B.一定是2
C.不可能是1
D.一定是1

解析:

进栈序列是P1,P2,P3, … Pn,当P3= 3时,由输出序列可知,只有以下两种情况: P1进栈后出栈中,P2进栈后出栈,或P1、P2都进栈然后出栈, 因此P1的值可能为1,也可能为2

5. 已知一个栈的进栈序列是1,2,3,…,n,其输出序列是p1,p2,…,pn,若p1=n,则pi的值______。

A. i
B. n-i
C. n-i+1
D. 不确定


6. 一个顺序栈S,其栈顶指针为top,则将元素e入栈的操作是( )。

A. *S->top=e;S->top++;

B. S->top++;*S->top=e;
C. *S->top=e
D. S->top=e;

A

在这里插入图片描述


共享栈

1. 为了减小栈溢出的可能性,可以让两个栈共享一片连续的存储空间,两个栈的栈底分别设在这片空间的两端,这样只有当( )时才可能产生上溢。

A. 两个栈的栈顶在栈空间的某一位置相遇
B. 其中一个栈的栈顶到达栈空间的中心点
C. 两个栈的栈顶同时达到栈空间的中心点
D. 两个栈均不为空,且一个栈的栈顶到达另一个栈的栈底。

2. 链栈_向一个栈顶指针为top的链栈中插入一个x的结点,则执行(C)

在这里插入图片描述
在这里插入图片描述


2. 如果以链表作为栈的存储结构,则退栈操作时( )。

A. 必须判别栈是否满
B. 对栈不做任何判别
C. 判别栈元素的类型
D. 必须判别栈是否为空


3. 向一个带头结点HS的链栈中插入一个s所指结点时需执行( )。

A. HS->next=s;
B. s->next= HS->next; HS->next=s;
C. s->next=HS;HS=s;
D. s->next=HS;HS = HS->next;

解析:

为了将结点s插入到带头结点HS的链栈中,首先需要修改s的指针域,

使得s的下一个结点为链栈中的第一个有效结点,即数据域中存放有效数据的结点,

该结点可由HS的指针域获得,因此相应的语句为s->next=HS->next,

之后使s结点成为链栈中的第一个有效结点,

即HS的指针域指向s,相应的语句为HS->next= s。


3. 有关链栈的叙述中正确的是______。

A. 链栈在进栈操作时一般不需要考虑上溢出
B. 链栈在出栈操作时一般不需要考虑下溢出
C. 链栈和顺序栈相比的缺点是不能随机访问栈中元素
D. 以上都不对

链栈特点是动态申请内存空间,只要内存空闲空间够,就可以一直申请下去,所以出现上溢的情况很少,这是它的优点。

双端队列

1. 若以1234作为双端队列的输入序列,既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列的是( )

A. 4213
B. 4231
C. 4132
D. 1234


3. 已知输入序列为abed,经过输出受限的双端队列后能得到的输出序列是( )。

A.dacb
B. cadb
C. dbca
D.以上答案都不对

输出受限的双端队列是指删除限制在一端进行,而插入允许在两端进行的队列。

链队

1. 若用单链表来表示队列,则应该选用( )

A.带尾指针的非循环链表找不到头,不好出队
B.带尾指针的循环链表
C.带头指针的非循环链表找不到尾,不好入队
D.带头指针的循环链表从头循环到尾,入队


在这里插入图片描述

A


3. 用链接方式存储的队列,在进行删除运算时,下面正确的是( )。

A.仅修改头指针
B.仅修改尾指针
C.头、尾指针都要修改
D.头、尾指针可能都要修改

链队列中删除元素一般仅修改队头指针。 但只有一个元素时,出队后队空 ,此时需要修改队尾指针。


4. 以下各种存储结构中,最适合用作链队的链表是( )

A.带队首指针和队尾指针的循环单链表
B.带队首指针和队尾指针的非循环单链表
C.只带队首指针的非循环单链表
D.只带队首指针的循环单链表

链队的定义就是带有队头指针和队尾指针的单链表。 因为队列的入队和出队操作都在端点进行。即在队首和队尾进行。所以带队首指针和队尾指针的非循环单链表最适合用作链队的链表。


6. 以数组Q[0… .m- 1]存放循环队列中的元素,若变量front和qulen分别指示循环队列中队头元素的实际位置和当前队列的长度,则队尾元素的实际位置是( )

A.front + qulen - 1
B. (front + qulen) % m
C. (front + qulen - 1)% m
D.front + qulen

循环队列的元素顺序存储在数组Q中,已知循环队列中队头元素的存储位置为front。当前队列的长度为qulen,队尾元素的位置要在front上加上qulen,然后减1 (第一个元素存储在front的位置上),对于循环队列求队尾的位置还要对总长度求余,所以队尾元素的实际位置为(front + qulen- 1]) MOD m。


7. 在一个顺序循环队列中删除元素时,首先需要( )

A.前移队首指针
B.后移队首指针
C.取出队首指针所指位置上的元素
D. 取出队尾指针所指位置上的元素

在这里插入图片描述


5. 在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( )。

A. front=front->next
B. s->next=rear;rear=s
C. rear->next=s;rear=s;
D. s->next=front;front=s;

先修改指针,再赋值

栈顶指针不同,进出栈错题

1. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为n,则以下元素x进栈最适合的操作是______。

A. top++; data[top]=x;
B. data[top]=x; top++;
C. top–; data[top]=x;
D. data[top]=x; top–;

感觉应该选C,先操作指针

2. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为n,则以下元素x出栈最适合的操作是______。

A. x=data[top]; top++;
B. top++; x=data[top];
C. x=data[top]=x; top–;
D. top–; x=data[top];


3. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为0,则以下元素x进栈最适合的操作是______。

A. top++; data[top]=x;
B. data[top]=x; top++;
C. top–; data[top]=x;
D. data[top]=x; top–;

4. 若一个栈元素用数组data[1…n]存储,初始栈顶指针top为0,则以下出栈元素x最适合的操作是______。

A. x=data[top]; top–;
B. x=data[top]; top++;
C. top–; x=data[top];
D. top++; x=data[top];

3,4题理解。1,2题不理解。


循环队列错题

  1. 已知循环队列存储在一维数组A[0…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是______。
    A. 0,0
    B. 0,n-1
    C. n-1,0
    D. n-1,n-1

  2. 设循环队列qu中数组data的下标是0~N-1,其队头、队尾指针分别为f和r(f指向队首元素的前一位置,r指向队尾元素),元素x出队的操作是______ ; x=qu.data[qu.f]。
    A. qu.r++
    B. qu.r=(qu.r+1)%N
    C. qu.f++;
    D. qu.f=(qu.f+1)%N

  3. 设数组ta[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front的值为( )。
    A.front= front + 1
    B.front= (front+ 1)%(m- 1)
    C.front= (ront- 1) %om
    D.front= (front+ 1)%M

对于循环队列出队的操作就是队头指针后移,即+1。但对于循环队列要对队列长度求余才能得到指针的位置。具体的操作语句为front= (front + 1) %m。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值