数据结构简明教程(第2版)微课版
上QQ阅读APP看书,第一时间看更新

练习题3

1.单项选择题

(1)栈的“先进后出”特性是指( )。

A.最后进栈的元素总是最先出栈

B.当同时进行进栈和出栈操作时,总是进栈优先

C.每当有出栈操作时,总要先进行一次进栈操作

D.每次出栈的元素总是最先进栈的元素

(2)设一个栈的进栈序列是abcd(即元素ad依次通过该栈),则借助该栈所得到的输出序列不可能是( )。

A.abcd

B.dcba

C.acdb

D.dabc

(3)一个栈的进栈序列是abcde,则栈的不可能的输出序列是( )。

A.edcba

B.decba

C.dceab

D.abcde

(4)已知一个栈的进栈序列是1,2,3,…,n,其输出序列的第一个元素是i(1≤in),则第j(1≤jn)个出栈元素是( )。

A.i

B.ni

C.ji+1

D.不确定

(5)设顺序栈st的栈顶指针top的初始值为—1,栈空间大小为MaxSize,则判定st栈为栈空的条件为( )。

A.st.top==—1

B.st.top!=—1

C.st.top!=MaxSize

D.st.top==MaxSize

(6)设顺序栈st的栈顶指针top的初始值为—1,栈空间大小为MaxSize,则判定st栈为栈满的条件是( )。

A.st.top!=—1

B.st.top==—1

C.st.top!=MaxSize—1

D.st.top==MaxSize—1

(7)当用一个数组data[0..n—1]存放栈中元素时,栈底最好( )。

A.设置在data[0]处

B.设置在data[n—1]处

C.设置在data[0]或data[n—1]处

D.设置在data数组的任何位置

(8)若一个栈用数组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——;

(9)若一个栈用数组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——;

(10)队列中元素的进出原则是( )。

A.先进先出

B.后进先出

C.栈空则进

D.栈满则出

(11)栈和队列的不同点是( )。

A.都是线性表

B.都不是线性表

C.栈只能在一端进行插入删除操作,而队列在不同端进行插入删除操作

D.没有不同点

(12)元素abcd依次连续进入队列qu后,队头元素是( ① ),队尾元素是( ② )。

A.a

B.b

C.c

D.d

(13)一个队列的进列序列为1234,则队列可能的输出序列是( )。

A.4321

B.1234

C.1432

D.3241

(14)在循环队列中,元素的排列顺序( )。

A.由元素进队的先后顺序确定

B.与元素值的大小有关

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

D.与队中数组大小有关

(15)循环队列qu(队头指针front指向队首元素的前一位置,队尾指针rear指向队尾元素的位置)的队满条件是( )。

A.(qu.rear+1)%MaxSize==(qu.front+1)%MaxSize

B.(qu.rear+1)%MaxSize==qu.front+1

C.(qu.rear+1)%MaxSize==qu.front

A.qu.rear==qu.front

(16)循环队列qu(队头指针front指向队首元素的前一位置,队尾指针rear指向队尾元素的位置)的队空条件是( )。

A.(qu.rear+1)%MaxSize==(qu.front+1)%MaxSize

B.(qu.rear+1)%MaxSize==qu.front+1

C.(qu.rear+1)%MaxSize==qu.front

D.qu.rear==qu.front

(17)设循环队列中数组的下标是0~N—1,其头尾指针分别为fr(队头指针f指向队首元素的前一位置,队尾指针r指向队尾元素的位置),则其元素个数为( )。

A.rf

B.rf—1

C.(rf)%N+1

D.(rf+N)%N

(18)一个循环队列中用data[0..n—1]数组保存队中元素,另设置一个队尾指针rear和一个记录队中实际元素个数的变量count,则该队中最多可以存放的元素个数是( )。

A.n—1

B.n

C.(rear+n)%n

D.(n—rear)%n

(19)设栈S和队列Q的初始状态为空,元素e1e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2e4e3e6e5e1,则栈S的容量至少应该是( )。

A.5

B.4

C.3

D.2

(20)与顺序队相比,链队的( )。

A.优点是可以实现无限长队列

B.优点是进队和出队时间性能更好

C.缺点是不能进行顺序访问

D.缺点是不能根据队首和队尾指针计算队的长度

2.填空题

(1)栈是一种特殊的线性表,允许插入和删除运算的一端称为( ① )。不允许插入和删除运算的一端称为( ② )。

(2)若栈空间大小为n,则最多的连续进栈操作的次数为( )。

(3)一个栈的输入序列是12345,输出序列为12345,其进栈出栈的操作为( )。

(4)有5个元素,其进栈次序为abcde,在各种可能的出栈次序中,以元素cd最先出栈(即c第一个且d第二个出栈)的次序有( )。

(5)顺序栈用data[0..n—1]存储数据,栈顶指针为top,其初始值为0,则元素x进栈的操作是( )。

(6)顺序栈用data[0..n—1]存储数据,栈顶指针为top,其初始值为0,则出栈元素x的操作是( )。

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

(8)设有数组A[0..m]作为循环队列的存储空间,front为队头指针(它指向队首元素的前一位置),rear为队尾指针(它指向队尾元素的位置),则元素x执行进队的操作是( )。

(9)设有数组A[0..m]作为循环队列的存储空间,front为队头指针(它指向队首元素的前一位置),rear为队尾指针(它指向队尾元素的位置),则元素出队并保存到x中的操作是( )。

(10)设循环队列的大小为70,队头指针front指向队首元素的前一位置,队尾指针rear指向队尾元素位置。现经过一系列进队和出队操作后,有front=20,rear=11,则队列中的元素个数是( )。

3.简答题

(1)简要说明线性表、栈与队的异同点。

(2)当用一维数组实现顺序栈时,为什么一般将栈底设置在数组的一端,而不是设置在中间?

(3)在以下几种存储结构中,哪个最适合用作链栈?

①带头结点的单链表;

②不带头结点的循环单链表;

③带头结点的双链表;

(4)在循环队列中插入和删除元素时,是否需要移动队中元素?

(5)顺序队的“假溢出”是怎样产生的?如何判断循环队列是空还是满?

4.算法设计题

(1)设计一个算法,利用一个顺序栈将字符数组a[0..n—1]的所有元素逆置。

(2)设计一个算法,将一个十进制正整数d转换为相应的八进制数。

(3)设计一个算法,利用栈的基本运算返回给定栈中的栈底元素,要求仍保持栈中元素次序不变。这里只能使用栈st的基本运算来完成,不能直接用st.data[0]来得到栈底元素。

(4)设计一个算法,利用循环队列的基本运算和例3.13求循环队列元素个数的算法,求指定循环队列中的队尾元素,要求队列中元素次序不改变,算法的空间复杂度为O(1)。

(5)对于循环队列,假设队中所有元素为数字字符,利用循环队列的基本运算和例3.13求循环队列元素个数的算法,删除其中所有奇数字符元素。