数据结构练习题-队列
NOIP《 数据结构》练习题及答案

习题:1.设循环队列中数组的下标范围是1–n,其头尾指针分别为f和r,则其元素个数为(D).A.r- f B.r- f +1 C.(r- f ) MOD n+1 D.(r- f + n) MOD n 2.线性表若采用链表存贮结构,要求内存中可用存贮单元地址(D).A.必须连续 B.部分地址必须连续 C.一定不连续 D.连续不连续均可3.下列叙述中,正确的是( D ).A.线性表的线性存贮结构优于链表存贮结构B.队列的操作方式是先进后出C.栈的操作方式是先进先出D.二维数组是指它的每个数据元素为一个线性表的线性表4.在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为( C )A.2B.3C.4D.55.若已知一个栈的入栈顺序是1,2,3,…,n,其输出序列为P1,P2,P3,…,Pn,若P1是n,则Pi是( C )A.iB.n-1C.n-i+1D.不确定6.如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为a,b,c(如图所示),另有元素d已经出栈,则可能的入栈顺序是( D )。
A. a d c bB. b a c dC. a c b dD. d a b c7.( B )是一种先进先出的线性表A. 栈B. 队列C. 哈希表(散列表)D.二叉树8.如果一棵二叉树中序遍历为BAC,那么它的先序遍历不可能是( C )。
A. ABCB. CBAC. ACBD. BAC9.元素R1、R2、R3、R4、R5入栈的顺序为R1、R2、R3、R4、R5。
如果第1个出栈的是R3,那么第5个出栈的不可能是( B )。
A. R1B.R2C.R4D.R510. 设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有(C)。
A. a, b, c, e, dB. b, c, a, e, dC. a, e, c, b, dD. d, c, e, b, a 11.一个高度为h的二叉树最小元素数目是( B )。
数据结构第三章栈和队列3习题

第三章栈和队列试题一、单项选择题1.栈的插入和删除操作在()进行。
A. 栈顶B. 栈底C. 任意位置D. 指定位置2.当利用大小为n的数组顺序存储一个栈时,假定用top==n表示栈空,则向这个栈插入一个元素时,首先应执行()语句修改top指针。
A. top++;B. top--;C. top = 0;D. top;3.若让元素1,2,3依次进栈,则出栈次序不可能出现()种情况。
A. 3, 2, 1B. 2, 1, 3C. 3, 1, 2D. 1, 3, 24.在一个顺序存储的循环队列中,队头指针指向队头元素的()位置。
A. 前一个B. 后一个C. 当前D. 后面5.当利用大小为n的数组顺序存储一个队列时,该队列的最大长度为()。
A. n-2B. n-1C. nD. n+16.从一个顺序存储的循环队列中删除一个元素时,需要()。
A. 队头指针加一B. 队头指针减一C. 取出队头指针所指的元素D. 取出队尾指针所指的元素7.假定一个顺序存储的循环队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。
A. front+1 == rearB. rear+1 == frontC. front == 0D. front == rear8.假定一个链式队列的队头和队尾指针分别为front和rear,则判断队空的条件为()。
A. front == rearB. front != NULLC. rear != NULLD. front == NULL9.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。
若想在链式栈的栈顶插入一个由指针s所指的结点,则应执行操作()。
A. top->link = s;B.s->link = top->link; top->link = s;C. s->link = top; top = s;D. s->link = top; top = top->link;10.设链式栈中结点的结构为(data, link),且top是指向栈顶的指针。
队列的练习题

队列的练习题队列是一种常用的数据结构,广泛应用于计算机科学和软件开发领域。
它具有先进先出(FIFO)的特性,允许从一端插入数据,从另一端删除数据。
在本篇文章中,我们将探讨一些与队列相关的练习题,以帮助读者更好地理解和运用队列的概念。
一、将队列逆序给定一个队列,要求将其逆序。
可以使用辅助栈来实现这个功能。
首先将队列中的所有元素依次出队并入栈,然后再将栈中的元素出栈并入队即可。
二、找到队列中的最大值给定一个队列,要求找到队列中的最大值。
可以使用双端队列来实现这个功能。
遍历队列中的每个元素,将其与双端队列中的尾部元素比较,如果当前元素大于尾部元素,则将尾部元素出队,直到当前元素小于等于尾部元素。
然后将当前元素入队。
这样,双端队列中的头部元素就是队列中的最大值。
三、判断队列是否为空判断队列是否为空是一个非常常见的操作,可以使用队列的大小来判断。
如果队列的大小为0,则说明队列为空;否则,队列不为空。
四、计算队列中元素的平均值给定一个队列,要求计算队列中元素的平均值。
可以遍历队列中的每个元素,累加它们的值,然后除以队列的大小即可得到平均值。
五、合并两个队列给定两个队列,要求将它们合并成一个队列。
可以使用两个指针分别指向两个队列的头部,然后依次比较两个指针所指向的元素大小,将较小的元素入队,直到其中一个队列为空。
然后将剩下的队列中的元素依次入队即可。
六、将队列的前半部分元素移到队列的末尾给定一个队列,要求将队列的前半部分元素移到队列的末尾。
可以使用两个指针,一个指向队列的头部,一个指向队列的中部。
首先,遍历队列,移动指向中部的指针,直到指向中部的指针达到队列末尾。
然后,从中部指针开始,将队列中的元素依次出队并入队,直到指向头部的指针也达到中部。
通过以上的练习题,我们可以更好地理解队列的操作和运用。
队列是一种非常有用的数据结构,可以用于解决很多实际问题。
希望本篇文章能对您的学习和工作有所帮助。
数据结构练习题第三章栈、队列和数组习题及答案

第三章栈、队列和数组一、名词解释:1.栈、栈顶、栈底、栈顶元素、空栈2.顺序栈3.链栈4.递归5.队列、队尾、队头6.顺序队7.循环队8.队满9.链队10.随机存储结构11.特殊矩阵12.稀疏矩阵13.对称方阵14.上(下)三角矩阵二、填空题:1.栈修改的原则是_________或称________,因此,栈又称为________线性表。
在栈顶进行插入运算,被称为________或________,在栈顶进行删除运算,被称为________或________。
2.栈的基本运算至少应包括________、________、________、________、________五种。
3.对于顺序栈,若栈顶下标值top=0,此时,如果作退栈运算,则产生“________”。
4.对于顺序栈而言,在栈满状态下,如果此时在作进栈运算,则会发生“________”。
5.一般地,栈和线性表类似有两种实现方法,即________实现和________实现。
6.top=0表示________,此时作退栈运算,则产生“________”;top=sqstack_maxsize-1表示________,此时作进栈运算,则产生“________”。
7.以下运算实现在顺序栈上的初始化,请在________处用适当的句子予以填充。
int InitStack(SqStackTp *sq){ ________;return(1);}8.以下运算实现在顺序栈上的进栈,请在________处用适当的语句予以填充。
Int Push(SqStackTp *sq,DataType x){ if(sp->top==sqstack_maxsize-1}{error(“栈满”);return(0);}else{________________:________________=x;return(1);}}9.以下运算实现在顺序栈上的退栈,请在________________用适当句子予以填充。
数据结构练习题-队列

选择题1. 用链接方式存储的队列,在进行删除运算时()。
A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改2. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。
A.仅修改队头指针 B. 仅修改队尾指针C. 队头、队尾指针都要修改D. 队头,队尾指针都可能要修改3.递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。
A.队列 B.多维数组 C.栈 D. 线性表4. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为()。
A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%mD.(rear-front)%m5. 循环队列存储在数组A[0..m]中,则入队时的操作为()。
A. rear=rear+1B. rear=(rear+1) mod (m-1)C. rear=(rear+1) mod mD. rear=(rear+1)mod(m+1)6. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )A. 1和 5B. 2和4C. 4和2D. 5和17. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1) MOD n=frontB. rear=frontC.rear+1=front D. (rear-l) MOD n=front8. 栈和队列的共同点是()。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点9. 栈和队都是()A.顺序存储的线性结构 B. 链式存储的非线性结构C.限制存取点的线性结构D. 限制存取点的非线性结构10.用单链表表示的链式队列的队头在链表的()位置。
第三章栈和队列习题-数据结构

第三章栈和队列习题-数据结构习题三栈和队列一单项选择题1.在作进栈运算时,应先判别栈是否(①),在作退栈运算时应先判别栈是否(②)。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③)。
①,②:A.空B.满C.上溢D.下溢③:A.n-1B.nC.n+1D.n/22.若已知一个栈的进栈序列是1,2,3,,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为()。
A可能是2B一定是2C可能是1D一定是13.有六个元素6,5,4,3,2,1的顺序进栈,问下列哪一个不是合法的出栈序列?()A.543612B.453126C.346521D.2341564.设有一顺序栈S,元素1,2,3,4,5,6依次进栈,如果6个元素出栈的顺序是2,3,4,6,5,1,则栈的容量至少应该是()A.2B.3C.5D.65.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i=1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A.|top[2]-top[1]|=0B.top[1]+1=top[2]C.top[1]+top[2]=mD.top[1]=top[2]6.执行完下列语句段后,i值为:()intf(int某){return((某>0)某某f(某-1):2);}inti;i=f(f(1));A.2B.4C.8D.无限递归7.表达式3某2^(4+2某2-6某3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂A.3,2,4,1,1;(某^(+某-B.3,2,8;(某^-C.3,2,4,2,2;(某^(-D.3,2,8;(某^(-8.用链接方式存储的队列,在进行删除运算时()。
A.仅修改头指针B.仅修改尾指针C.头、尾指针都要修改D.头、尾指针可能都要修改9.递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。
优先队列练习题

优先队列练习题优先队列是一种特殊的数据结构,它能够根据元素的优先级来确定元素的顺序。
在优先队列中,我们可以插入元素并按照其优先级进行排序,然后可以从队列中取出优先级最高的元素。
优先队列经常用于解决一些需要按照优先级处理任务的问题,比如任务调度、事件处理等。
在本文中,我们将介绍一些优先队列的经典练习题,帮助读者理解优先队列的应用。
1. 合并K个有序数组题目描述:给定K个有序数组,将它们合并成一个有序数组。
解题思路:可以使用优先队列来解决此问题。
首先,我们将每个数组的第一个元素加入优先队列,并附加上数组的索引值。
然后,以元素值为优先级进行排序。
每次取出队首元素,将其加入结果数组,并将来源数组中下一个元素加入优先队列。
重复此过程,直到优先队列为空。
2. 求解前K个最大元素题目描述:给定一个整数数组和一个整数K,找出数组中前K个最大的元素。
解题思路:利用一个容量为K的小顶堆(也可以使用大顶堆),遍历整个数组,将元素依次加入堆中。
当堆的大小超过K时,将堆顶元素弹出,保证堆中的元素始终是前K个最大的元素。
3. 求解数据流中第K大的元素题目描述:设计一个类,用来找出数据流中第K大的元素。
请注意,第K大的元素不一定是第K个不同的元素。
解题思路:使用一个容量为K的小顶堆(也可以使用大顶堆),遍历数据流,将元素依次加入堆中。
当堆的大小超过K时,将堆顶元素弹出,保证堆中的元素始终是数据流中第K大的元素。
4. 合并K个有序链表题目描述:给定K个有序链表,将它们合并成一个有序链表。
解题思路:可以使用优先队列来解决此问题。
首先,我们将每个链表的头结点加入优先队列,并附加上链表的索引值。
然后,以结点值为优先级进行排序。
每次取出队首结点,将其加入结果链表,并将来自同一链表的下一个结点加入优先队列。
重复此过程,直到优先队列为空。
总结:通过上述几个优先队列的练习题,我们可以看到优先队列在处理带有优先级的问题时的强大威力。
无论是合并有序数组、求解前K个最大元素,还是合并有序链表,优先队列都能够以高效的方式完成任务。
《数据结构》习题集:第3章 栈和队列

第3章栈和队列一、选择题1.栈结构通常采用的两种存储结构是(A )。
A、顺序存储结构和链表存储结构B、散列和索引方式C、链表存储结构和数组D、线性链表结构和非线性存储结构2.设栈ST 用顺序存储结构表示,则栈ST 为空的条件是( B )A、ST.top-ST.base<>0B、ST.top-ST.base==0C、ST.top-ST.base<>nD、ST.top-ST.base==n3.向一个栈顶指针为HS 的链栈中插入一个s 结点时,则执行( C )A、HS->next=s;B、s->next=HS->next;HS->next=s;C、s->next=HS;HS=s;D、s->next=HS;HS=HS->next;4.从一个栈顶指针为HS 的链栈中删除一个结点,用x 保存被删除结点的值,则执行( C)A 、x=HS;HS=HS->next;B 、HS=HS->next;x=HS->data;C 、x=HS->data;HS=HS->next;D 、s->next=Hs;Hs=HS->next;5.表达式a*(b+c)-d 的后缀表达式为( B )A、abcdd+-B、abc+*d-C、abc*+d-D、-+*abcd6.中缀表达式A-(B+C/D)*E 的后缀形式是( D )A、AB-C+D/E*B、ABC+D/E*C、ABCD/E*+-D、ABCD/+E*-7.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B )A、4,3,2,1B、1,2,3,4C、1,4,3,2D、3,2,4,18.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为空的条件是()A、Q.rear-Q.front==nB、Q.rear-Q.front-1==nC、Q.front==Q.rearD、Q.front==Q.rear+19.循环队列SQ 采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front 和rear,则判定此循环队列为满的条件是()A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n10.若在一个大小为6 的数组上实现循环队列,且当前rear 和front 的值分别为0 和3,当从队列中删除一个元素,再加入两个元素后,rear 和front 的值分别为()A、1,5B、2, 4C、4,2D、5,111.用单链表表示的链式队列的队头在链表的()位置A、链头B、链尾C、链中12.判定一个链队列Q(最多元素为n 个)为空的条件是()A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n13.在链队列Q 中,插入s 所指结点需顺序执行的指令是()A 、Q.front->next=s;f=s;B 、Q.rear->next=s;Q.rear=s;C 、s->next=Q.rear;Q.rear=s;D 、s->next=Q.front;Q.front=s;14.在一个链队列Q 中,删除一个结点需要执行的指令是()A、Q.rear=Q.front->next;B、Q.rear->next=Q.rear->next->next;C、Q.front->next=Q.front->next->next;D、Q.front=Q.rear->next;15.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()A、仅修改队头指针B、仅修改队尾指针C、队头尾指针都要修改D、队头尾指针都可能要修改。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选择题
1. 用链接方式存储的队列,在进行删除运算时()。
A. 仅修改头指针
B. 仅修改尾指针
C. 头、尾指针都要修改
D. 头、尾指针
可能都要修改
2. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结
点,则在进行删除操作时( )。
A.仅修改队头指针 B. 仅修改队尾指针
C. 队头、队尾指针都要修改
D. 队头,队尾指针都可能要修改
3. 递归过程或函数调用时,处理参数及返回地址,要用一种称为()的数据结构。
A.队列 B.多维数组 C.栈 D. 线性表
4. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中
的元素个数为()。
A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m
D.(rear-front)%m
5. 循环队列存储在数组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)
6. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当
从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?( )
A. 1和 5
B. 2和4
C. 4和2
D. 5和1
7.最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1) MOD n=front
B. rear=front
C.rear+1=front D. (rear-l) MOD n=front
8. 栈和队列的共同点是()。
A. 都是先进先出
B. 都是先进后出
C. 只允许在端点处插入和删除元素
D. 没有共同点
9. 栈和队都是()
A.顺序存储的线性结构 B. 链式存储的非线性结构
C. 限制存取点的线性结构
D. 限制存取点的非线性结构
10. 用单链表表示的链式队列的队头在链表的()位置。
A.链头 B.链尾 C.链中
11. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个
元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少
应该是( )。
A. 6 B. 4 C. 3 D. 2
12. 循环队列的引入,目的是为了克服__假溢出_____。