您的位置:首页 > 理论基础 > 数据结构算法

数据结构:队列和栈----刷题集(二)

2017-07-19 22:56 183 查看

今天主要刷的是队列和栈

前提:建议复习队列和栈的相关知识

1.某带链的队列初始状态为 front=rear=NULL 。经过一系列正常的入队与退队操作后, front=rear=10 。该队列中的元素个数为( )

A.1

B.0

C.1或0

D.不确定

解答:往队列的队尾插入一个元素为入队,从队列的排头删除一个元素称为退队。初始时 front=rear=0 , front 总是指向队头元素的前一位置,入队一次 rear+1 ,退队一次 front+1 。队列队头队尾指针相同时队列为空。而带链的队列,由于每个元素都包含一个指针域指向下一个元素,当带链队列为空时 front=rear=Null ,插入第 1 个元素时, rear+1 指向该元素, front+1 也指向该元素,插入第 2 个元素时 rear+1 , front 不变,删除 1 个元素时 front+1 。即 front=rear 不为空时带链的队列中只有一个元素。故本题答案为 A 选项。

2.设栈的输入序列为 123…..n ,输出序列为 a1,a2,a3,……,an ,若存在 1<=k<=n ,使得 ak=n ,则当 k<=i<=n 时, ai 为 ()。

A.n-i+1

B.n-(i-k)

C.i

D.不确定

解答:元素出栈顺序未知。除非 a1=n,则说明元素全部入栈之后再弹出,此时出栈顺序则为a(n),a(n-1)…a(1)。这样答案就是 B 。

3.循环队列存储在数组A[0..m]中,则入队时的操作为()。

A.rear=rear+1

B.rear=(rear+1)mod(m-1)

C.rear=(rear+1)mod m

D.rear=(rear+1)mod(m+1)

解答:rear=(rear+1)%(m+1) //m+1代表有m+1个空间。。它是0到m的数组。。看清楚,选D

4.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()

A.仅修改队头指针

B.仅修改队尾指针

C.队头、队尾指针都可能要修改

D.队头、队尾指针都要修改

解答:答案:C

当只有一个元素,出队列时,要将队头和队尾,指向-1.所以说队头和队尾都需要修改

5.依次读入数据元素序列{a,b,c,d,e,f,g}入栈,每进一个元素,机器可要求下一个元素入栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下()序列?(多选)

A.{d,e,c,f,b,g,a}

B.{f,e,g,d,a,c,b}

C.{e,f,d,g,b,c,a}

D.{c,d,b,e,f,a,g}

解答:答案:AD

A 可行步骤:a入栈,b入栈,c入栈,d入栈,d出栈,e入栈,e出栈,c出栈,f入栈,f出栈,b出栈,g入栈,g出栈,a出栈

B 不可行,a入栈,b入栈,c入栈,d入栈,e入栈,f入栈,f出栈,e出栈,g入栈,g出栈,d出栈,此时,栈内元素为abc,只能c出栈,所以形成不了acb

C 不可行,a入栈,b入栈,c入栈,d入栈,e入栈,e出栈,f入栈,f出栈,d出栈,g入栈,g出栈,此时,栈内元素为abc,只能c出栈,所以形成不了bca

D 可行步骤:a入栈,b入栈,c入栈,c出栈,d入栈,d出栈,b出栈,e入栈,e出栈,f入栈,f出栈,a出栈,g入栈,g出栈

6.栈和链表一定是两种不同的数据结构。

A.正确

B.错误

解答:答案:B

栈是一种数据结构,但是链表不是一种数据结构,它只是一种数据的存储结构。线性表可以有顺序存储结构和链式存储结构,栈也可以有顺序存储结构和链式存储结构。

7.设数组data[m]作为循环队列的存储空间。front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为()

A.front=front+1

B.front=(front+1)%(m-1)

C.front=(front-1)%m

D.front=(front+1)%m

解答:答案:D

队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度

1.队空条件:rear==front

2.队满条件:(rear+1) %QueueSIze==front

3.计算队列长度:(rear-front+QueueSize)%QueueSize

4.入队:(rear+1)%QueueSize

5.出队:(front+1)%QueueSize

8.以下是一个tree的遍历算法,queue是FIFO队列,请参考下面的tree,正确的输出是[b]_。[/b]



A.1376254

B.1245367

C.1234567

D.1327654

解答: 答案:C

这是二叉树的层次遍历。(输出结果跟加入队列的顺序相同)

while的第一次循环首先输出root节点,为1

在while的for循环里把2,3加入队列中

while第二次循环,输出2,在while的for循环里把2的两个子节点4,5加入队列

while第三次循环,输出3,在while的for循环里 把2的两个子节点6,7加入队列

再以后的while循环中,依次输出队列中的元素,这些元素都是叶子节点,for循环不再起作用

总的输出结果是1234567

9.有一个正整数序列1,2,3,……,n和一个最多能容纳m个数字的栈,数字按序列顺序进栈,但出栈顺序是随机的;例如,n=2,m=3,则出栈顺序可能是1,2或者2,1;若n=7,m=5时,则出栈序列可能是下列的哪些选项()(多选)

A.1,7,6,5,4,3,2

B.1,2,3,4,5,6,7

C.7,6,5,4,3,2,1

D.5,6,4,3,7,2,1

解答:答案:BD

此题考察栈的操作,入栈的顺序是1,2,3……,n。出栈序列以5 6 4 3 7 2 1为例,要pop 5,就必须先push 1, push 2, push 3, push 4, push5, 此时栈顶元素为5,刚好匹配,才能进行pop操作。如果栈中的元素个数超过了m,则说明出现了错误,这种出栈序列是不成立的。

10.堆栈溢出一般是由什么原因导致的?(多选)

A.函数代码长度过长

B.循环的递归调用

C.大数据结构的局部变量

D.代码运行时错误

解答:答案:BC

1 代码存储在程序区,与栈没有关系。

2 递归涉及到压栈入栈。

3 局部变量存在栈区。

4 栈的大小是固定的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构