现在的位置: 首页 > 综合 > 正文

第三章 栈和队列练习题

2019年03月06日 ⁄ 综合 ⁄ 共 2662字 ⁄ 字号 评论关闭

1、顺序栈S,栈顶指针为top,则栈置空操作是____________.

2、设有一栈,结点结构为data | next栈顶指针为h.则执行*s结点入栈操作是________和__________.

3、栈是一种特殊的_________,又称为_________.

4、判定一个栈ST(最多元素为m0)为空的条件是

A、ST->top<>0   B、ST->top=0      C、ST->top<>m0      D、ST->top=m0

5、设输入序列为1,2,3,4,5借助一个栈不可能得到的输出序列是(     )

A 、 1,2,3,4,5     B、5,4,3,2,1    C 、4,3,1,2,5        D、 1,3,2,5,4

6、顺序队列和循环队列的队满及队空判断条件是一样的( )

7、栈和队列都是线性表.(  )

8、排序和查找是两种基本的数据结构.(  )

9、队列是一种特殊的________,允许插入的一端称为_______,允许删除的一端称为______,所以队列又称为____________.

10、栈的两个重要应用是___________和_________.

11、栈和队列都是运算受到限制的特殊的线性表,栈和队列有何不同?

12、用数组A存放循环队列的元素值,若其头指针为front,尾指针为rear,则循环队列中当前元素个数为(    ).

A、(rear-front+m)%m       B 、 (rear-front+1)%m

C 、(rear-front-1+m)%m     D 、   (rear-front)%m

13、设循环队列Q头指针为front,尾指针为rear,队列的最大容量为M,写出循环队列队满和队空的判定条件.

14、给出循环队列的入队和出队算法.

15、由于查找运算的主要操作是关键字的比较,所以,通常把查找过程中对关键字需要执行的_________作为衡量一个查找算法效率优劣的标准.

16、设计算法判断一个算术表达式的圆括号是否正确配对,(提示:对表达式进行扫描,凡遇'('就进栈,遇')'就退掉栈顶的')',表达式被扫描完毕,栈就为空.)

17、程序段的输出结果是_________(队列中的元素类型QElemType为char)。

void main( ){

Queue Q;  Init Queue (Q);

Char x=’e’, y=’c’;

EnQueue (Q,’h’); EnQueue (Q,’r’);  EnQueue(Q, y);

DeQueue (Q,x); EnQueue (Q,x);

DeQueue (Q,x); EnQueue (Q,’a’);

while(!QueueEmpty(Q)){ DeQueue (Q,y);printf(y); };

Printf(x);

}

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

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

19、设两个栈共享向量空间V(1:m),它们的栈底分别设在向量的两端,且进栈的每个元素只占一个分量,试写出这两个栈公用的栈操作算法pushi(i,x),popi(i),其中i为0或1,用以指示栈号

20、已知Ackerman函数的定义如下 :

akm(m,n)=n+1            当m=0时

akm(m-1,1)              当m< >0,n=0时

akm(m-1,akm(m,n-1))     当m< >0,n<>0时

写出递归算法

21、设HS为一个链栈的栈顶指针,试写出退栈的算法,(回收被删除的结点)

22、中缀算术表达式3*(5+x)/y所对应的后缀算术表达式为________________.

23、设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的车站,具体写出这四辆列车开出车站的所有可能的顺序.

24、写出栈的顺序存储结构(即顺序栈)的类型定义.

25、写出队列的顺序存储结构(顺序队列)的类型定义.

26、假设表达式由单字母变量和双目运算符构成.试写一个算法,将一个通常书写正确的表达式转换为逆波兰式.

27、带有头结点的链队列q,队头指针front,队尾指针rear,则置空队的算法描述为:

q->front=malloc(sizeof(linklist));

     ________________  ;

     ________________  ;

28、顺序队的“假溢出”是怎样产生的?如何知道循环队列是空还是满?

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

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

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

31、判定一个队列QU(最多元素为m0)为满队列的条件是(   

A、QU->rear - QU->front = = m0   B、QU->rear- QU->front -1= = m0 

 C、QU->front = =QU->rear          D、QU->front = = QU->rear+1

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

A、r-f;    B、(n+f-r)% n; C、n+r-f;       D、(n+r-f)% n

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

34、简述以下算法的功能(栈和队列的元素类型均为int)。

void algo3(Queue &Q){

Stack S; int d;

InitStack(S);

while(!QueueEmpty(Q)){

DeQueue (Q,d);  Push(S,d);

};

while(!StackEmpty(S)){

Pop(S,d); EnQueue (Q,d);

}

}

35、向量、栈和队列都是    结构,可以在向量的      位置插入和删除元素;对于栈只能在    插入和删除元素;对于队列只能在      插入和     删除元素。

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

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

抱歉!评论已关闭.