第3章 栈和队列

第3章 栈和队列
第3章 栈和队列

第三章栈和队列

一、单选题

1.栈操作数据的原则是【】。

A.先进先出

B.后进后出

C.后进先出

D.不分顺序

2.队列的先进先出特征是指【】。

A.最后插入队列的元素总是最后被删除

B.当同时进行插入、删除操作时,总是插入操作优先

C.每当有删除操作时,总要先做一次插入操作

D.每次从队中删除的元素总是最后插入的元素

3.与顺序栈相比较,链栈有一个比较明显的优势是【】。

A.通常不会出现栈满的情况

B.插入操作更容易实现

C.通常不会出现栈空的情况

D.删除操作更容易实现

4.栈和队列的共同点是【】。

A.都是先进先出

B.都是后进后出

C.只允许在端点处进行插入和删除

D.无共同点

5.栈的特点是【①】,队列的特点是【②】;栈和队列都是【③】。若入栈序列是1,2,3,4 ,则【④】是不可能的出栈序列;若进队列的序列是1,2,3,4,则【⑤】是可能的出队序列。

①②A.先进先出 B.后进先出 C.进优先于出 D.出优先于进

③A.顺序存储的线性结构 B.链式存储的线性结构

C.限制存取点的线性结构

D.限制存取点的非线性结构

④⑤A.3,2,1,4 B.3,2,4,1 C.4,2,3,1 D.1,2,3,4

6.用单链表表示的链队列的队头在链表的【】。

A.链头

B.链尾

C.链中

D.都不是

7.设入栈序列为1,2,3,4,5,则可能得到的出栈序列为【】。

A.1,2,5,3,4

B.3,1,2,5,4

C.3,2,5,4,1

D.1,4,2,3,5

8.输入序列是ABC,若输出序列变为CBA,经过的栈操作为【】。

A.push,pop,push,pop,push,pop

B. push,push,push,pop,pop,pop

C. push,push,pop,pop,push,pop

D. push,pop,push,push,pop,pop

9. 在【】中要使用栈结构进行数据的组织。

A.递归调用

B.函数调用

C.表达式求值

D.A,B,C

10.设计一个判别表达式中左、右括号是否配对的算法,采用【】数据结构最佳。

A.线性表的顺序存储结构

B.队列

C.线性表的链式存储结构

D.栈

11.允许对队列进行的操作有【】。

A.对队列中的元素排序

B.取出最近进队的元素

C.在队头之前插入元素

D.删除队头元素

12. 对于循环队列【】。

A.无法判断队列是否为空

B.无法判断队列是否为满

C.队列不可能满

D.以上说法都不对

13. 队列存放在A[0..M-1]中,则元素入队要调整指针的操作是【】。

A.rear=rear+1

B.rear=(rear+1)%M

C.rear=(rear+1)%(M+1)

D.rear=(rear+1)%(M-1)

14. 队列存放在A[0..M-1]中,则元素出队要调整的指针操作是【】。

A.front=front+1

B. front=(front+1)%M

C. front=(front+1)%(M+1)

D. front=(front+1)%(M-1)

15.循环队列的最大容量为M,则队空的条件是【】。

A.rear==front

B.(rear+1)%M==front

C.rear+1==front

D.(rear-1)%M==front

16.循环队列的最大容量为M,则队满的条件是【】。

A.rear==front

B.(rear+1)%M==front

C.rear+1==front

D.(rear-1)%M==front

二、判断题

【栈】1.队列在函数调用时必不可少,因此递归离不开队列。

【正确】2.栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。

【正确】3.设尾指针的循环链表表示队列,则入队和出队算法的时间复杂度为0(1)。

【错】4.队列逻辑上是一个上端和下端既能增加又能减少的线性表。

【正确】5.在链队列中,即使不设置尾指针也能进行入队操作。

【正确】6.栈和队列度是限制存取点的线性结构。

【错】7.即使对不含相同元素的同一输入序列进行两组不同的合法的入栈和出栈操作,所得的输出序列一定相同。

【正确】8.栈是实现函数调用所必需的数据结构。

【错】9.顺序队列中的元素个数,可以根据队头指针和队尾指针的值计算出来。

三、填空题

2.区分循环队列的空与满有3种方法,它们是、、。

3.栈和队列的区别是。

4.一个栈的输入序列是12345,则栈的输出序列43512是。

5.设栈采取顺序存储结构,栈中已有i-1个元素,则第i个元素进栈操作的算法时间复杂度是。

6.若用不带头结点的单链表表示栈,则创建一个空栈要执行的操作是。

7.从循环队列中删除一个元素的操作是。

8.从循环队列中插入一个元素的操作是。

9.判断链队列中只有一个结点的条件是。

10.如果栈的最大长度难以估计,最好使用。

四、简答题

1.为什么说栈是一种后进先出表?

因为只能在表的一端进去插入、删除。

2.对于一个栈,其输入序列是A,B,C,试给出全部可能的输出序列。

3.何谓队列上溢?何为队列的假溢出现象?有哪些解决假溢出问题的方法,并分别阐述

其工作原理。

队列上溢:当有其它元素要入队时,发现队列中已没有剩余的空间,从而无法入队。该现象被称为队列上举溢。

队列假上溢:队列中有空位置,但由于队列满条件设置不合理而导致元素不能进队。

解决队列假上溢的办法:

1、采用环形队列

2、建立一个足够大的存储空间,但会造成空间的浪费

3

4.队列可以用单循环链表来实现,故可以只设一个头指针或只设一个尾指针,请分析用哪种方案最合适。

若设置的是头指针,则头指针指向的是队头。出队时,时间复杂度为1;入对时,需要一直延着next指针一直找到队尾为止,才能入队,时间复杂度为O(n).

若设置的是尾指针,则尾指针指向的是队尾。入队时,直接接在队尾后即可,时间复杂度为O(1);而队尾的指针域指向的是队头,因此出队时,时间复杂度也为0(1).

因此设尾指针最为合适。

5.简述线性表、栈和队列的异同?

相同点:元素间的逻辑关系都是线性的,除了头、尾结点外,都有唯一的前驱和后继。

不同点:栈:只能在表的一端进行插入删除操作,即后进先出。

队列:只能在表的一端进去插入,且只能在表的另一端进去删除,即先进先出。

线性表:没有如上限制

相关主题
相关文档
最新文档