数据结构:队列和栈----刷题集(二)
2017-07-19 22:56
183 查看
今天主要刷的是队列和栈
前提:建议复习队列和栈的相关知识1.某带链的队列初始状态为 front=rear=NULL 。经过一系列正常的入队与退队操作后, front=rear=10 。该队列中的元素个数为( )
A.1B.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+1B.n-(i-k)
C.i
D.不确定
解答:元素出栈顺序未知。除非 a1=n,则说明元素全部入栈之后再弹出,此时出栈顺序则为a(n),a(n-1)…a(1)。这样答案就是 B 。
3.循环队列存储在数组A[0..m]中,则入队时的操作为()。
A.rear=rear+1B.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+1B.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,2B.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 栈的大小是固定的。
相关文章推荐
- 算法与数据结构-队列的基本操作C语言实现
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- [数据结构]队列的实现-C++
- c语言数据结构实现-链式队列
- PHP数据结构:栈、队列、堆、固定数组
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- 数据结构学习之队列(queue)
- 数据结构之基于Java的链接队列实现
- 基本数据结构之队列
- Java LinkedList特有方法程序小解 && 使用LinkedList 模拟一个堆栈或者队列数据结构。
- 数据结构Java版-栈和队列
- JAVA数据结构:栈和队列
- 数据结构_队列应用举例_划分子集问题
- Python数据结构队列的实现
- 算法系列(六)数据结构之表队列和栈
- 【数据结构】队列和栈 Python 实现
- 数据结构系列(4)堆栈与队列
- 数据结构(二):链表、链队列
- linux内核分析--内核中的数据结构之队列(二)
- 数据结构:队列