0
点赞
收藏
分享

微信扫一扫

栈和队列课后作业测试题

非常帅气的昵称吧 2022-03-24 阅读 185

3  栈和队列

一、填空题

1. 栈是一种特殊的线性表,允许插入和删除运算的一端称为  栈顶   。不允许插入和删除运算的一端称为  栈底 

2.  线性表、栈和队列都是   线性    结构,可以在线性表的  任意   位置插入和删除元素;对于栈只能在  栈顶   插入和删除元素;对于队列只能在    队尾     插入和     队头    删除元素。

3.    队列     是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。

4. 在具有n个单元的循环队列中,队满时共有        n-1        个元素。

5. 带表头结点的空循环双向链表的长度等于   0     

二、判断正误

(  对  )1. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(  错  )2. 栈和链表是两种不同的数据结构。 

(  对  )3. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。                                

(  错  )4. 一个栈的输入序列是12345,则栈的输出序列不可能是12345。

(  错  )5. 在表结构中最常用的是线性表,栈和队列不太常用。     

(  对  )6. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。 

(  错  )7. 栈和队列是一种非线性数据结构。  

(  对  )8. 栈和队列的存储方式既可是顺序方式,也可是链接方式。 

(  错  )9. 队列是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。

三、单项选择题

  B  )1.  栈中元素的进出原则是

A.先进先出  B.后进先出  C.栈空则进  D.栈满则出

(  C  )2.  若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为

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

(  B  )3.  判定一个栈S(最多元素为m)为空的条件是

A.S->top!=0        B.S->top==0 

C.S->top!=m       D.S->top==m

(  A  )4.  判定一个队列Q(最多元素为m)为满队列的条件是

   A.Q->front == (Q->rear+1)  %  m

B.Q->rear - Q->front -1== m 

   C.Q->front == Q->rear          

 D.Q->front == Q->rear+1

(  D  )5.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为

(A)r-f;            (B)(n+f-r)% n; 

(C)n+r-f;         (D)(n+r-f)% n

6.  设有4个数据元素a1、a2、a3和a4,对他们分别进行栈操作或队操作。在进栈或进队操作时,按a1、a2、a3、a4次序每次进入一个元素。假设栈或队的初始状态都是空。

现要进行的栈操作是进栈两次,出栈一次,再进栈两次,出栈一次;这时,第一次出栈得到的元素是,第二次出栈得到的元素是    B    ;类似地,考虑对这四个数据元素进行的队操作是进队两次,出队一次,再进队两次,出队一次;这时,第一次出队得到的元素是   C     ,第二次出队得到的元素是   D   。经操作后,最后在栈中或队中的元素还有   E   个。

供选择的答案: A~D:①a1  ②a2    ③ a3   ④a4       E:  ①1    ②2    ③ 3     ④ 0

答:A、B、C、D、E分别为  2    4     1      2    2  

7栈是一种线性表,它的特点是  A   。设用一维数组A[1,…,n]来表示一个栈,A[n]为栈底,用整型变量T指示当前栈顶位置,A[T]为栈顶元素。往栈中推入(PUSH)一个新元素时,变量T的值  B   ;从栈中弹出(POP)一个元素时,变量T的值  C   。设栈空时,有输入序列a,b,c,经过PUSH,POP,PUSH,PUSH,POP操作后,从栈中弹出的元素的序列是  D   ,变量T的值是  E  

供选择的答案:

A:    ① 先进先出    ②后进先出      ③进优于出      ④出优于进   ⑤ 随机进出

B,C:  ① 加1       ②减1          ③不变            ④清0       ⑤ 加2        ⑥减2

D:    ① a,b         ②b,c            ③c,a                ④b,a        ⑤ c,b         ⑥ a,c

E:    ① n+1        ②n+2           ③ n                ④ n-1       ⑤ n-2

答:A、B、C、D、E分别为  2    2    1    6    4  

8.  在做进栈运算时,应先判别栈是否  A   ;在做退栈运算时,应先判别栈是否  B   。当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为  C  

为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的  D   分别设在这片内存空间的两端,这样,只有当  E  时,才产生上溢。

供选择的答案:

A,B:①空       ②  满       ③ 上溢     ④ 下溢

C:    ①n-1      ② n         ③ n+1      ④ n/2

D:   ① 长度    ②深度       ③ 栈顶     ④ 栈底

E:①两个栈的栈顶同时到达栈空间的中心点     ②其中一个栈的栈顶到达栈空间的中心点           

   ③两个栈的栈顶在达栈空间的某一位置相遇   ④两个栈均不空,且一个栈的栈顶到达另一个栈的栈底

答:A、B、C、D、E分别为  2    1    2   4     3  

四、简答求解题

1. 说明线性表、栈与队的异同点。

相同点:①都是线性结构,都是逻辑结构的概念。

              ②都可以用顺序存储或链表存储;

              ③栈和队列是两种特殊的线性表,即受限的线性表,只是对插入、删除运算加以限制。

不同点:

      线性表            栈             队列
运算规则      随机存取只允许在一端进行插入、删除运算(后进先出表)

只允许在一端进行插入、另一端进行删除运算

(先进先出表)

用途用于子程调用和保护现场用于多道作业处理、指令寄存及其他运算等等。

2. 设循环队列的容量为40(序号从0到39),现经过一系列的入队和出队运算后,有

① front=11,rear=19;    ② front=19,rear=11;问在这两种情况下,循环队列中各有元素多少个?

    用队列长度计算公式:  (MaxSize+r-f)% MaxSize

    L=(40+19-11)% 40=8        ② L=(40+11-19)% 40=32

五、算法设计

  1. 假设一个数组squ[m]存放循环队列的元素。若要使这m个分量都得到利用,则需另一个标志tag,以tag为0或1来区分尾指针和头指针值相同时队列的状态是“空”还是“满”。试编写相应的入队和出队的算法。
 int EnQueue(SqQueue& Q,int e)//入队操作

{

    if(Q.tag==1&&Q.front==Q.rear)

        return ERROR;

    Q.base[Q.rear]=e; 

    Q.rear=(Q.rear+1)%MAX;

    if(Q.tag==0)

        Q.tag=1;

    return OK;

}

int DeQueue(SqQueue &Q)//出队操作

{

    if(Q.tag==0&&Q.front==Q.rear)

        return ERROR;

    int e=Q.base[Q.front];

    Q.front=(Q.front+1)%MAX;

    if(Q.tag==1)

        Q.tag=0;

    return e;

}

本篇文章仅是记录课后作业的日常,希望能对您有所帮助,如有不足之处,请指出,我会改正的!!!!

举报

相关推荐

0 条评论