栈和队列练习1
数据结构栈和队列习题及答案
习题三栈和队列一单项选择题1. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③ )。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. 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. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 64.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6, s5,s1,则栈的容量至少应该是()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值为:()int f(int x){ return ((x>0) ? x* f(x-1):2);}int i ;i =f(f(1));A.2 B. 4 C. 8 D. 无限递归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. 用链接方式存储的队列,在进行删除运算时()。
数据结构第3章 栈与队列习题
第3章栈与队列一、单项选择题1.元素A、B、C、D依次进顺序栈后,栈顶元素是,栈底元素是。
A.A B.BC.C D.D2.经过以下栈运算后,x的值是。
InitStack(s);Push(s,a);Push(s,b);Pop(s,x);GetTop(s,x);A.a B.bC.1 D.03.已知一个栈的进栈序列是ABC,出栈序列为CBA,经过的栈操作是。
A.push,pop,push,pop,push,pop B.push,push,push,pop,pop,popC.push,push,pop,pop,push,pop D.push,pop,push,push,pop,pop 4.设一个栈的输入序列为A、B、C、D,则借助一个栈所得到的序列是。
A.A,B,C,D B.D,C,B,AC.A,C,D,B D.D,A,B,C5.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是。
A.edcba B.decbaC.dceab D.abcde6.已知一个栈的进栈序列是1,2,3,……,n,其输出序列的第一个元素是i,则第j个出栈元素是。
A.i B.n-iC.j-i+1 D.不确定7.已知一个栈的进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,Pn,若p1=n,则pi的值。
A.i B.n-iC.n-i+1 D.不确定8.设n个元素进栈序列是1,2,3,……,n,其输出序列是p1,p2,…,p n,若p1=3,则p2的值。
A.一定是2 B.一定是1C.不可能是1 D.以上都不对9.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=1,则p1的值。
A.可能是2 B.一定是1C.不可能是2 D.不可能是310.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p3=3,则p1的值。
A.可能是2 B.一定是2C.不可能是1 D.一定是111.设n个元素进栈序列是p1,p2,…,p n,其输出序列是1,2,3,……,n,若p n=1,则p i(1≤i≤n-1)的值。
数据结构习题参考答案
数据结构习题参考答案一、栈和队列1. 栈是一种具有后进先出(Last In First Out)特性的线性数据结构。
常用方法:- push(x): 将元素x压入栈顶;- pop(): 弹出栈顶元素;- top(): 返回栈顶元素;- isEmpty(): 判断栈是否为空;例题解答:(1)题目描述:使用栈实现队列的功能。
解答:使用两个栈,一个用于入队操作,一个用于出队操作。
入队操作:直接将元素压入入队栈中;出队操作:如果出队栈为空,则将入队栈的元素逐个弹出并压入出队栈,此时出队栈的栈顶元素即为要弹出的元素。
复杂度分析:入队操作的时间复杂度为O(1),出队操作的平均时间复杂度为O(1)。
(2)题目描述:判断括号序列是否合法,即括号是否完全匹配。
解答:使用栈来处理括号序列,遇到左括号则入栈,遇到右括号则与栈顶元素进行匹配,如果匹配成功则继续处理剩余字符,如果不匹配则判定为非法序列。
算法步骤:- 初始化一个空栈;- 从左到右遍历括号序列,对于每个字符执行以下操作:- 如果是左括号,则将其入栈;- 如果是右括号,则将其与栈顶元素进行匹配:- 如果栈为空,则判定为非法序列;- 如果栈顶元素与当前字符匹配,则将栈顶元素出栈,继续处理剩余字符;- 如果栈顶元素与当前字符不匹配,则判定为非法序列。
- 遍历结束后,如果栈为空,则括号序列合法;否则,括号序列非法。
复杂度分析:时间复杂度为O(n),其中n为括号序列的长度。
2. 队列是一种具有先进先出(First In First Out)特性的线性数据结构。
常用方法:- enqueue(x): 将元素x入队;- dequeue(): 出队并返回队首元素;- getFront(): 返回队首元素;- isEmpty(): 判断队列是否为空;例题解答:(1)题目描述:使用队列实现栈的功能。
解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。
入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。
栈和队列_习题
第三章栈和队列一、单项选择题1.当利用大小为N的数组顺序存储一个栈时,假定用top=N表示栈空,则向这个栈入栈时,首先应执行( )语句修改top指针。
A. top++B. top--C. top=0D. top=N-12.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,top= -1表示栈空,并已知栈未满,当元素X入栈时执行的操作为( )。
A. a[--top]=XB. a[top--]=XC. a[++top]=XD. a[top++]=X3.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,top=-1表示栈空,并已知栈未空,当退栈并返回栈顶元素执行的操作为( )。
A. return a[--top]B. return a[top--]C. return a[++top]D. return a[top++]4.假定一个链栈的栈顶指针用top表示,每个节点的结构为data域和next指针域,当p所指向的结点进栈时,执行的操作为()A. p->next=top;top=top->nextB. top=p;p->next=topC. p->next=top->nextD. p->next=top;top=p5.假定一个链栈的栈顶指针用top表示,每个节点的结构为data域和next指针域,当执行退栈时,执行的操作为()A. top->next=topB. top=top->dataC. top=top->nextD. top->next=top->next->next6.若让元素1,2,3,4依次进栈,则出栈次序不可能出现( )种情况。
A.3,2,1,4B.2,1,4,3C.4,3,2,1D.1,4,2,37. 在一个循环队列中,队首指针指向队首元素的( )位置。
A. 前一个B. 后一个C. 当前D. 最后7. 在一个链队中,假设f与r分别为队首和队尾指针,则插入s所指结点的运算时( )A.f->next=s;f=sB.r->next=s;r=sC.s->next=r;r=sD.s->next=f;f=s8. 假定利用数组a[N]循环顺序存储一个队列,用f和r分别表示队首和队尾指针,并已知队未满,当元素X入队时执行的操作为( )。
第三章栈和队列习题
第三章栈和队列习题第三章栈和队列一,选择1. 对于栈操作数据的原则是()。
A. 先进先出B. 后进先出C. 后进后出D. 不分顺序 3. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是()。
A. (rear+1) MOD n=frontB. rear=frontC.rear+1=front D. (rear-l) MOD n=front4当利用大小为n的数组顺序存储一个栈时,假定用top= =n表示栈空,则向这个栈插入一个元素时首先应执行语句修改top指针。
A.top++ B.top-- C.top=0 D.top5. 若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pN,若pN是n,则pi是( )。
A. iB. n-iC. n-i+1D. 不确定 6. 一个递归算法必须包括()。
A. 递归部分B. 终止条件和递归部分C. 迭代部分D.终止条件和迭代部分 7. 执行完下列语句段后,i值为:()int f(int x){ return ((x>0) ? x* f(x-1):2);} int i ; i =f(f(1));A.2 B. 4 C. 8 D. 无限递归8. 设栈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 9. 栈和队列的共同点是()。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素 D. 没有共同点10. 设计一个判别表达式中左,右括号是否配对出现的算法,采用()数据结构最佳。
A.线性表的顺序存储结构 B. 队列 C. 线性表的链式存储结构 D. 栈 11. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( )。
数据结构习题精编:栈和队列-数据结构栈和队列考题
20.假设以数组A[n]存放循环队列的元素,其头指针front指向队头元素的前一个位
置、尾指针rear指向队尾元素所在的存储位置,则在少用一个元素空间的前提下,
队列满的判定条件为
A.rear= =frontB.(front+1)%n= =rear
A.3、2、8;# * ^ -B.3、2、4、1、1;# * ^ ( + * -
C.3、2、8;# * ^ ( -D.3、2、4、2、2;# * ^ ( -
19.设数组A[m]为循环队列Q的存储空间,front为队头指针,rear为队尾指针,则
判定Q为空队列的条件是
A..front= =rearB.(rear-front)%m= =1
C.rear+1= =frontD.(rear+1)%n= =front
21.循环队列sq中,用数组elem[0..25]存放数据元素,sq.front指示队头元素的前一
个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则
当前队列中的元素个数为
A.8B.16C.17D.18
C.top[1]+top[2]==mD.top[2]-top[1]!=0
17.表达式a*(b+c)-d的后缀表达式是
A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd
18.在表达式3* 2^(4+2*2-6*3)-5(其中^为乘幂)求值过程中,当扫描到6时,操作数
栈和操作符栈分别为
为25,则rear应指向的元素是
数据结构_栈和队列练习题
1. 对于栈操作数据的原则是(B )。
A. 先进先出 B.后进先出 C.后进后出D.不分顺序2.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是( B )。
A.不确定B.n-i+1 C.i D.n-i3. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是(D )。
A.i-j-1 B.i-j C.j-i+1 D.不确定的4. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pN,若pN是n,则pi是( D )。
A. i B.n-i C.n-i+1 D. 不确定5. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?(C )。
A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 66. 设栈的输入序列是1,2,3,4,则(D )不可能是其出栈序列。
A. 1,2,4,3,B. 2,1,3,4,C. 1,4,3,2,D. 4,3,1,2,E. 3,2,1,4,7. 设有三个元素X,Y,Z顺序进栈(进的过程中允许出栈),下列得不到的出栈排列是( C )。
A.XYZ B. YZX C. ZXY D. ZYX8. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( D )。
A.仅修改队头指针 B. 仅修改队尾指针 C. 队头、队尾指针都要修改 D. 队头,队尾指针都可能要修改9. 递归过程或函数调用时,处理参数及返回地址,要用一种称为(C )的数据结构。
A.队列 B.多维数组C.栈 D. 线性表1. 消除递归不一定需要使用栈,此说法(√ )2. 栈是实现过程和函数等子程序所必需的结构。
(√ )3. 两个栈共用静态存储空间,对头使用也存在空间溢出问题。
(√ )4.两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
第三章,栈和队列,练习题
第三章,栈和队列,练习题一、选择题1、栈结构通常采用的两种存储结构是。
A、顺序存储结构和链表存储结构B、散列和索引C、链表存储结构和数组D、线性链表和非线性存储2、设栈ST用顺序存储结构表示,则栈ST为空的条件是A、ST.top-ST.base0B、ST.top-ST.base==0C、ST.top-ST.basenD、ST.top-ST.base==n3、向一个栈顶指针为HS的链栈中插入一个s结点时,则执行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保存被删除结点的值,则执行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;7、一个队列的入列序列是1,2,3,4,则队列的输出序列是//尾插入元素,头删除元素。
A、4,3,2,1B、1,2,3,C、1,4,3,D、3,2,4,19、循环队列SQ采用数组空间SQ.base[0,n-1]存放其元素值,已知其头尾指针分别是front和rear,则判定此循环队列为满的条件是//不懂啊!!!A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==%nD、Q.front!=%n11、用单链表表示的链式队列的队头在链表的位置A、链头B、链尾C、链中12、判定一个链队列Q为空的条件是A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==%nD、Q.front!=%n14、在一个链队列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.栈的特点是(),队列的特点是().A.先进先出B.先进后出2.栈和队列的共同点是().A.都是先进后出B.都是先进先出C.只允许在端点处插入和删除元素D.没有共同点3.一个栈的进栈序列是a,b,c,d,e,则栈的不可能的输出序列是().A.edcbaB.decbaC.dceabD.abcde4.若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,p n。
若p1=n,则p i(1≤i<n)为().< p="">A.iB.n=iC.n-i+1D.不确定5.若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,p n。
若p n=n,则p i(1≤i<n)为().< p="">A.iB.n=iC.n-i+1D.不确定6.若已知一个栈的进栈序列是1,2,3,……,n,其输出序列为p1,p2,p3,……,p n。
若p1=3,则p2为().A.可能是2B.不可能是2C.可能是1D.一定是17. 若已知一个栈的进栈序列是p1,p2,p3,……,p n,其输出序列为1,2,3,……,n。
若p3=1,则p1为().A.可能是2B.一定是2C.不可能是2D.不可能是38.若已知一个栈的进栈序列是p1,p2,p3,……,p n,其输出序列为1,2,3,……,n。
若p n=1,则p i(1≤i<n)为()< p="">A.iB.n=iC.n-i+1D.不确定9.一个队列的入队序列是1,2,3,4,则队列的输出序列是().A.4,3,2,1B.1,2,3,4C.1,4,3,2D.3,2,4,110.判定一个队列Q为空的条件为().A.Q->rear-Q->front==MaxSizeB.Q->rear-Q->front-1==MaxSizeC.Q->front== Q->rearD.Q->front== Q->rear+111. 判定一个队列Q为满的条件为().A.Q->rear-Q->front==MaxSizeB.Q->rear-Q->front-1==MaxSizeC.Q->front== Q->rearD.Q->front== Q->rear+112.循环队列中是否可以插入下一个元素,().A.与队头指针和队尾指针的值有关B.只与队尾指针的值有关C.只与数组的大小有关,与队尾和队头指针的值无关D.与曾经进行过多少次插入操作有关13.判定一个循环队列Q为空的条件().A.Q->front==Q->rearB. Q->front!=Q->rearC. Q->front==(Q->rear+1)%MaxSizeD. Q->front!=(Q->rear+1)%MaxSize14. 判定一个循环队列Q为满的条件().A.Q->front==Q->rearB. Q->front!=Q->rearC. Q->front==(Q->rear+1)%MaxSizeD. Q->front!=(Q->rear+1)%MaxSize15.在一个链表中,假设f和r分别为队头和队尾指针,则插入s所指结点的运算时().A.f->next=s;f=s;B.r->next=s;r=s;C.s->next=r;r=s;D.s->next=f;f=s;16. 在一个链表中,假设f和r分别为队头和队尾指针,则删除一个结点的运算时().A. r=f->next;B. r=r->next;C. f=f->next;D. f= r->next;17.跟踪以下代码,显示每次调用后栈中的内容。
栈的入队和出队例题
栈的入队和出队例题
栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。
因此,栈的入队和出队操作并不是栈的常规操作,而是队列的操作。
下面我将给出一个例题,演示栈的入队和出队操作。
假设我们有一个栈,初始为空。
现在有一系列操作,其中包括入队和出队操作。
我们按照以下顺序进行操作:
1. 入队操作,将元素A、B、C、D依次入队。
2. 出队操作,出队一个元素。
3. 再次入队操作,将元素E入队。
4. 再次出队操作,出队一个元素。
根据上述操作序列,我们可以得到以下步骤:
1. 初始栈为空。
2. 入队操作,将元素A入栈,栈中元素为A。
3. 入队操作,将元素B入栈,栈中元素为B、A。
4. 入队操作,将元素C入栈,栈中元素为C、B、A。
5. 入队操作,将元素D入栈,栈中元素为D、C、B、A。
6. 出队操作,出栈一个元素,栈中元素为C、B、A,出队的元素为D。
7. 再次入队操作,将元素E入栈,栈中元素为E、C、B、A。
8. 再次出队操作,出栈一个元素,栈中元素为C、B、A,出队的元素为E。
通过上述操作,我们可以得到栈中的元素为C、B、A,按照出队操作的顺序,依次出队的元素为D和E。
需要注意的是,栈的入队和出队操作并不是栈的常规操作,因
为栈是后进先出的,而队列是先进先出的。
在实际应用中,我们通常使用队列来实现队列的入队和出队操作,而不是使用栈。
(完整word版)栈和队列练习
栈和队列一、选择题1 、一个栈的输入序列为: a , b , c , d , e ,则栈的不可能输出的序列是(C )。
A. a,b,c,d,eB. d,e,c,b,aC. d,c,e,a,bD. e,d,c,b,a2 、判断一个循环队列 Q (最多 n 个元素)为满的条件是(C )。
A. Q->rear==Q->frontB. Q->rear==Q->front+1C. Q->front==(Q->rear+1)%nD. Q->front==(Q->rear-1)%n3 、设计一个判别表达式中括号是否配对的算法,采用(D)数据结构最佳。
A. 顺序表B.链表C. 队列D. 栈4 、5 、一个栈的输入序列为:1,2,3,4,则栈的不可能输出的序列是(D )。
A. 1243B. 2134C. 1432D. 4312E. 32146 、若用一个大小为 6 的数组来实现循环队列,且当 rear 列中删除一个元素,再加入两个元素后,rear 和 front和5和4和2和 front 的值分别为 0 , 3。
当从队的值分别为( B)。
和17 、队列的插入操作是在(A)。
A. 队尾B. 队头C.8 、循环队列的队头和队尾指针分别为(A)。
队列任意位置front和 rear D. 队头元素后,则判断循环队列为空的条件是A. front==rearB. front==0C. rear==0D. front=rear+19 、一个顺序栈 S ,其栈顶指针为 A. *S->top=e;S->top++;top ,则将元素 e 入栈的操作是(AB. S->top++;*S->top=e;)。
C. *S->top=eD. S->top=e;10 、表达式a*(b+c)-d的后缀表达式是(B)。
A. abcd+-B. abc+*d-C. abc*+d-D. -+*abcd 11 、将递归算法转换成对应的非递归算法时,通常需要使用(A. 队列B. 栈C. 链表B )来保存中间结果。
第三章 栈与队列 习题及答案
第三章栈与队列习题及答案一、基础知识题3.1 设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:(1)若入、出栈次序为Push(1), Pop(),Push(2),Push(3), Pop(), Pop( ),Push(4), Pop( ),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop( )表示出栈)?(2) 能否得到出栈序列1423和1432?并说明为什么不能得到或者如何得到。
(3)请分析1,2 ,3 ,4 的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。
3.2 链栈中为何不设置头结点?答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。
3.3 循环队列的优点是什么? 如何判别它的空和满?答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。
判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。
二是少用一个元素的空间。
每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。
三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。
3.4 设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何? 若只设尾指针呢?答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。
若只设尾指针,则出入队时间均为1。
因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。
3.5 指出下述程序段的功能是什么?(1) void Demo1(SeqStack *S){int i; arr[64] ; n=0 ;while ( StackEmpty(S)) arr[n++]=Pop(S);for (i=0, i< n; i++) Push(S, arr[i]);} //Demo1(2) SeqStack S1, S2, tmp;DataType x;...//假设栈tmp和S2已做过初始化while ( ! StackEmpty (&S1)){x=Pop(&S1) ;Push(&tmp,x);}while ( ! StackEmpty (&tmp) ){x=Pop( &tmp);Push( &S1,x);Push( &S2, x);}(3) void Demo2( SeqStack *S, int m){ // 设DataType 为int 型SeqStack T; int i;InitStack (&T);while (! StackEmpty( S))if(( i=Pop(S)) !=m) Push( &T,i);while (! StackEmpty( &T)){i=Pop(&T); Push(S,i);}}(4)void Demo3( CirQueue *Q){ // 设DataType 为int 型int x; SeqStack S;InitStack( &S);while (! QueueEmpty( Q )){x=DeQueue( Q); Push( &S,x);}while (! StackEmpty( &s)){ x=Pop(&S); EnQueue( Q,x );}}// Demo3(5) CirQueue Q1, Q2; // 设DataType 为int 型int x, i , m = 0;... // 设Q1已有内容,Q2已初始化过while ( ! QueueEmpty( &Q1) ){ x=DeQueue( &Q1 ) ; EnQueue(&Q2, x); m++;}for (i=0; i< n; i++){ x=DeQueue(&Q2) ;EnQueue( &Q1, x) ; EnQueue( &Q2, x);}二、算法设计题3.6 回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。
第三章 栈和队列习题与解析good
第四章栈和队列习题一判断题(y/n)nyynnynnn1做进栈运算时应先判别,栈是否为空。
2,做退栈运算时应先判别,栈是否为空。
3,当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为n.4,为了增加内存空间的利用率和减少发生上溢的可能性,由两个栈共享一片连续的内存空间时,应将两栈的栈顶分别设在着片内存空间的两端。
5, 只有当两个基本栈的栈底在栈空间的某一位置相遇时,才产生上溢。
6, 栈是一种线性表,它的特点是后进先出。
7, 设一数列的顺序为1,2,3,4,5,6, 通过栈结构可以排成的顺序必须是3,2,5,6,4,1.8, 设有一个空栈,栈顶指针为1000H(十六进制,下同),现有输入序列1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH后,输出序列是2,1.9, 设有一个空栈,栈顶指针为1000H(十六进制,下同),现有输入序列1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH后,栈顶指针是不是1005H.二单选题(请从下列A,B,C,D选项中选择一项)1,栈的特点是:先进先出后进先出进优于出出优于进2,队列的特点是:先进先出后进先出进优于出出优于进3,栈与队列都是:顺序存储的线性结构链式存储的线性结构限制存取点的线性结构限制存取点的非线性结构4,若进栈序列为1,2,3,4,则()不可能是一个出栈序列。
3,2,1,43,2,4,14,2,3,14,3,2,11,2,3,41,3,2,45,若进栈队列的序列为1,2,3,4,则()是一个出队列序列。
3,2,1,43,2,4,14,2,3,14,3,2,11,2,3,41,3,2,46,若一个栈的输入序列是:1,2,3,...,n,输出序列的第一个元素是n,则第i个输出元素是:不确定n-in-i+1in-i-1三编程题1,以flag为标志位,写出循环队列中插入算法2,以flag为标志位,写出循环队列中删除算法4-2 改写顺序栈的进栈成员函数Push (x ),要求当栈满时执行一个stackFull ( )操作进行栈满处理。
第三章栈和队列习题
一、判断1. 队列中所有的插入操作都发生在表的一端,删除则发生在表的另一端2. 栈具有先进先出的特性3. 队列为先进后出的结构4. 栈用于实现子程序调用5. 栈、队列必须用数组来表示6. 队列用于操作系统中的作业调度7. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
8. 栈和链表是两种不同的数据结构。
9. 栈和队列的存储方式既可是顺序方式,也可是链接方式。
二、单项选择1.循环队列用数组A[maxsize] 表示,下面哪个选项表示该循环队列队满(A) rear==maxsize-1 (B) front==(rear+1)%maxsize(C) rear-front==maxsize (D) rear-front==maxsize-12.元素的入栈序列是a,b,c,d,则栈的不可能的输出序列是(A) dcba (B)abcd (C) dcab (D) cbad3.在用数组queue[maxsize]仿真队列时(temp为int型变量),假设队列中至少有一个元素,出队列操作应执行以下(A) temp=queue[rear];rear--; (B) rear++; temp=queue[rear];(C) temp=queue[front];front--; (D) front++; temp=queue[front];4.下列哪种数据结构常用于函数调用(A) 堆栈 (B) 队列 (C) 链表 (D) 数组5.编译器中通常以哪种数据结构处理递归程序调用(A)队列(B)数组(C)堆栈(D)记录6.下列哪些数据结构可用来实现堆栈(1)链表(2)数组(3)树(4)图(A)(2),(3)(B)(2),(4)(C)(1),(4)(D)(1),(2)7.下列哪种数据结构常用于系统程序的作业调度(A)栈(B)队列(C)链表(D)数组8.栈和队列的共同点是(A)都是先进后出(B)都是先进先出(C)只允许在端点处插入和删除元素(D)没有共同点9.若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为A.i B.n=i C.n-i+1 D.不确定10.判定一个栈ST(最多元素为m0)为空的条件是A.ST->top<>0 B.ST->top=0 C.ST->top<>m0 D.ST->top=m011.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为(A)r-f; (B)(n+f-r)% n; (C)n+r-f (D)(n+r-f)% n 12.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取出数据打印.该缓冲区应该是一个结构.(A) 堆栈 (B)队列 (C)数组 (D)线性表13、判断一个队列QU(最多元素为m0)为空的条件是A. rear- front==m0B. rear- front-1==m0C. front== rearD. front== rear+114、判断一个循环队列QU(最多元素为m0)为满队列的条件是A. front== rearB. front!= rearC. front==( rear+1)%m0D. front!=( rear+1)%m015.一个队列(数组仿真,最多元素为MaxSize)下列哪个选项表示了队列空间全部被利用?A. rear – front == MaxSizeB. rear – front == MaxSize –1C. rear == frontD. rear + 1 == front16.判定一个循环队列(数组仿真,最多元素为MaxSize)为空的条件是? A. front == rear B. front != rearC. front == (rear + 1)%MaxSizeD. front != (rear + 1)%MaxSize17、若用一个大小为6的数组来实现循环队列,且当rear和front的值分别为0和3。
数据结构(栈和队列)习题与答案
一、单选题1、元素A、B、C、D依次进栈后,栈顶元素是 _______。
A.BB.DC.CD.A正确答案:B2、经过以下运算后, x的值是 _______。
InitStack (s); Push(s, a); Push(s, b); Pop(s, x); GetTop(s,x)A.0B.bC.aD.1正确答案:C3、经过以下栈运算后,StackEmpty(s)的值是 _______。
InitStack (s); Push(s, a); Push(s, b); Pop(s, x); Pop(s,y)A.0B.bC.aD.1正确答案:D4、已知一个栈的进栈序列是ABC,出栈序列为CBA,经过栈的操作是 _______。
A.push, push, push, pop, pop, popB.push,pop,push, push,pop, popC.push, push,pop, pop,push,popD.push,pop,push,pop,push,pop正确答案:A5、若元素a、b、c、d、e、f依次进栈,允许进栈、退栈的操作交替进行,但不允许连续3次退栈工作,则不可能得到的出栈序列是 _______。
A. bcaefdB.afedcbC.cbdaefD.dcebfa正确答案:B6、设一个栈的输入序列为A、B、C、D,则借助一个栈所得的输出序列不可能是_______。
A.DCBAB.DABCC.ACDBD.ABCD正确答案:B7、一个栈的进栈序列是abcde,则栈的不可能的输出序列是 _______。
A.decbaB.abcdeC.dceabD.edcba正确答案:C8、已知一个栈的进栈序列是1,2,3,…n,其输出序列的第一个元素是i(1≤i≤n),则第j(1≤j≤n)个出栈元素是_______。
A.n-iB.j-i+1C.iD.不确定正确答案:D9、已知一个栈的进栈序列是1,2,3,…n,其输出序列是p1,p2,…pn,若p1=n,则pi的值是_______。
栈和队列习题及答案
栈和队列习题及答案【篇一:栈和队列练习题答案】xt>一、填空题1. 线性表、栈和队列都是结构,可以在线性表的在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。
2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为。
不允许插入和删除运算的一端称为栈底。
3. 是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
二、判断正误(√)1. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)2. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(√)4. 栈和队列的存储方式既可是顺序方式,也可是链接方式。
(√)5. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
错,有可能。
三、单项选择题(b)1.栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(c)2.若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为A.i B.n-iC.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,?,n,则出栈的序列是n,?,3,2,1。
(若不要求顺序出栈,则输出序列不确定)(d)3.数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素的公式为(A)r-f; (B)(n+f-r)% n; (C)n+r-f;(D)(n+r -f)% n e:①1 ②2 ③ 3 ④ 0四、阅读理解1. 【严题集3.3②】写出下列程序段的输出结果(栈的元素类型selem type为char)。
栈和队列习题集【精选】
栈和队列部分习题一、单项选择题1.栈的插入和删除操作在______进行。
A、栈顶B、栈底C、任意位置D、指定位置2.在栈中存取数据的原则是______。
A、先进先出B、后进先出C、后进后出D、随意进出3.当利用大小为N的数组顺序存储一个栈时,假定用top==N表示栈空,则向这个栈插入一个元素时,首先应执行______语句修改top指针。
A、top++;B、top--;C、top=0;D、top=N-1;4.判断一个由ST指向的栈(最多元素m0)为满的条件是______。
A、ST->top !=0B、ST->top= =0C、ST->top!=m0D、ST->top = =m0-15.对于顺序栈stack[0..m],假设栈底在stack[0]处,并用top指向栈顶元素之后的空位置,则判断栈空的条件是______。
A、top= = -1B、top= =0C、top= =1D、top==n-16.假定利用数组a[N+1]顺序存储一个栈,用top表示栈顶指针,用top=N+1表示栈空,该数组所存储的栈的最大长度为N,则表示栈满的条件为______。
A、top==1B、top==-1C、top=0D、top=N-17.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,用top==-1表示栈空,并已知栈未满,当元素x进栈时所执行的操作为______。
A、a[--top]=x;B、a[top--]=x;C、a[++top]=x;D、a[top++]=x;8.假定利用数组a[N]顺序存储一个栈,用top表示栈顶指针,用top==-1表示栈空,并已知栈未空,当退栈并返回栈顶元素时所执行的操作为______。
A、return a[--top];B、return a[top--];C、return a[++top];D、return a[top++];9.假定一个链式栈的栈顶指针用top表示,该链式栈为空的条件______。
最新版国家开放大学《数据结构(本)》期末练习1满分答案
2016秋国家开放大学《数据结构(本)》期末练习1一、单项选择题1.栈和队列的共同特点是()。
A.元素都可以随机进出B.都是先进先出C.都是先进后出D.都是操作受限的线性结构2.数据的存储结构包括数据元素的表示和()。
A.数据处理的方法B.数据元素间的关系的表示C.相关算法D.数据元素的类型3.对一个栈顶指针为top的链栈进行入栈操作,通过指针变量p生成入栈结点,则执行:p=(structnode*)malloc(sizeof(structnode);p->data=a;和()。
A.top->next=p;p=top;B.p->nex=top;top=p;C.top=top->next;p=top;D.p->next=top;p=top;4.树状结构中数据元素的位置之间存在()的关系。
A.每一个元素都有一个直接前驱和一个直接后继B.一对一C.多对多D.一对多5.设头指针为head的非空的单向链表,指针p指向尾结点,则通过以下操作()可使其成为单向循环链表。
A.p->next=NULL;B.head=p;C.p->next=head;D.p=head;6.设有一个长度为26的顺序表,要插入一个元素,并使它成为新表的第6个元素,需移动元素的个数为()。
A.21B.22C.20D.197.一种逻辑结构()。
A.只能有唯一的存储结构B.可以有不同的存储结构C.与存储该逻辑结构的计算机相关D.是指某一种数据元素的性质8.头指针为head的带头结点的单向循环链表,p所指向尾结点,要使该链表成为不带头结点的单向循环链表,可执行head=head->nex;和()。
A.p=head->nextB.head->next=pC.head->next=p->nextD.p->next=head;9.把数据存储到计算机中,并具体体现数据元素间的逻辑结构称为()。
第三章 栈和队列_1
9、Ackerman函数的定义如下, 请写出递归算法。
n+1
当 m=0 时
AKM(m, n)= AKM(m-1, 1)
当 m!=0, n=0时
AKM(m-1, AKM(m, n-1)) 当 m!=0, n!=0时
10、假设以带头结点的循环链表表示队列,并且 只设一个指针指向队尾元素站点(注意不设头 指针),试编写相应的队列初始化、判队空、 入队列和出队列的操作步骤(假设队尾的结点 指针为pr)。
11、假设以数组cycque[m]存放循环队列Q的元素, 同时设变量rear和quelen分别指示循环队列中 队尾元素位置和内含元素的个数。试给出此循 环队列的队满条件,并写出相应的队列初始化、 入队列和出队列的操作步骤。
12、某汽车轮渡口,过江渡船每次能载10辆车过 江。过江车辆分为客车类和货车类,上渡船有 如下规定:同类车先到先上船;客车先于货车 上渡船,且每上4辆客车,才允许上一辆货车; 若等待客车不足4辆,则以货车代替,若无货 车等待,允许客车都上船。试写一算法模拟渡 口管理。
列出算法执行到各步骤时栈中元素的动态变化 过程。
3.3 栈与递归的实现
1、求解n阶Hanoi塔问题的递归算法(p55 算法 3.5)
2、n=3或4时, n阶Hanoi塔问题的递归算法执行 过程中递归工作栈的动态变化过程(p57 图 3.7)
3.4 队列
一、抽象数据类型队列的定义
队列是一种先进先出的线性表(FIFO) 队头、队尾
循环队列
1、循环队列的顺序存储结构 # define MAXQSIZE 100 typedef struct { QElemType *base; int front; // 队列非空时指向队列头元素 int rear;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章栈和队列
一、选择题部分
1. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是(C)。
(A) edcba(B)decba(C)dceab (D)abcde
2.栈结构通常采用的两种存储结构是(A)。
(A)线性存储结构和链表存储结构(B)散列方式和索引方式
(C)链表存储结构和数组(D)线性存储结构和非线性存储结构
3.判定一个顺序栈ST(最多元素为m0)为空的条件是( B)。
(A) ST-〉top!=0 (B)ST-〉top==0
(C)ST-〉top!=m0 (D)ST-〉top=m0
4.判定一个栈ST(最多元素为m0)为栈满的条件是( C)。
(A)ST-〉top!=0 (B)ST-〉top==0
(C)ST-〉top==m0(D)ST-〉top==m0-1
5.一个队列的入列序列是1,2,3,4,则队列的输出序列是( B)。
(A)4,3,2,1(B)1,2,3,4(C)1,4,3,2(D)3,2,4,1
6.循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear 则当前队列中的元素个数是(B )
(A)(rear-front+m)%m (B) rear-front+1 (C)rear-front-1(D)rear-front
7.栈和队列的共同点是(C )
(A)都是先进后出(B)都是先进先出
(C)只允许在端点处插入和删除元素(D)没有共同点
8.表达式a*(b+c)-d的后缀表达式是(B)。
(A)abcd*+-(B)abc+*d- (C)abc*+d-(D)-+*abcd
9.4个元素a1,a2,a3和a4依次通过一个栈,在a4进栈前,栈的状态,则不可能的出栈序是(C)
(A)a4,a3,a2,a1 (B)a3,a2,a4,a1
(C)a3,a1,a4,a2 (D)a3,a4,a2,a1
10.以数组Q[0..m-1]存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际
位置是( D )
(A)rear-qulen (B)rear-qulen+m
(C)m-qulen (D)(1+rear+m-qulen)% m
二、填空题部分
1.栈的特点是(先进后出),队列的特点是(先进先出)。
2.线性表、栈和队列都是(线性)结构,可以在线性表的(任何)位置插入和删除元素,对于栈只能在(栈顶)插入和删除元素,对于队列只能在(队尾)插入元素和(队头)删除元素。
3.一个栈的输入序列是12345,则栈的输出序列12345是(可能的)。
4.设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6依次通过一个栈,一个元素出栈后即进入队列Q,若6个元素出队列的顺序是a3,a5,a4,a6,a2,a1则栈S至少应该容纳( 4 )个元素。
三. 选择题
1. 栈和队列的共同点是_C__
都是先进后出
都是先进先出
只允许在端点处插入和删除元素
没有共同点
2. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是
__C_
edcba
decba
dceab
abcde
3. 一个栈的入栈序列是1,2,3,4,则栈的可能的输出序列是__B_
1,4,2,3
2,1,4,3
4,2,1,3
4,2,3,1
4. 一个队列的入对序列是1,2,3,4,则队列的输出序列是_B___
4,3,2,1
1,2,3,4
1,4,3,2
3,2,4,1
5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为
p1,p2,p3,…,pn,若p1=n,则pi为___C_
I
n=I
n-I+1
不确定
6. 表达式a*(b+c)-d的后缀表达式是__B_
abcdd+-
abc+*d-
abc*+d-
-+*abcd
7. 向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行_C___
HS->next=s;
s->next=HS->next;HS->next=s;
s->next=HS;HS=s;
s->next=HS;HS=HS->next;
8. 从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行___D_
x=HS;HS=HS->next;
x=HS->data;
HS=HS->next;x=HS->data;
x=HS->data;HS=HS->next;
四、填空题
1、在一个具有n个单元的顺序栈中,假设以地址低端(即下标为1的单元)作为栈底,以top作为栈顶指针,则当做堆栈处理时,top变化为 top++ 。
2、在一个具有n个单元的顺序栈中,假设以地址高端(即下标为n 的单元)作为栈底,以top作为栈顶指针,则当作退栈处理时,top变化为 top++ 。
3、在一个循环队列中,队首指针指向队首元素的实际地
址。
4、从循环队列中删除一个元素时,其操作是
Q.front=(Q.front+1) % MAXSIZE。
5、在具有n个单元的循环队列中,队满时共有 n-1 个元素。
6、一个栈的输入序列是1,2,3,4,5,则栈的输出序列4,3,5,1,2是
不可能的。
7、一个栈的输入序列是1,2,3,4,5,则栈的输出序列1,2,3,4,5是
可能的。