《数据结构》习题集:第3章 栈和队列
数据结构第三章栈和队列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是指向栈顶的指针。
数据结构第三章堆栈和队列测试题及答案
堆栈和队列测试题一、选择题1. 对于栈操作数据的原则是(B)。
A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在做进栈运算时,应先判别栈是否( B),在做退栈运算时应先判别栈是否( A)。
当栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为( B )。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的( D )分别设在这片内存空间的两端。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D.n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底3. 一个栈的输入序列依次为1,2,3,…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是(B)。
A. 不确定B. n-i+1C. iD. n-i4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( D )。
A. i-j-1B. i-jC. j-i+1D. 不确定的5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则pi是( D )。
A. iB. n-iC. n-i+1D. 不确定6.有六个元素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 67. 设栈的输入序列是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,8. 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是( B )。
A. 2 3 4 1 5B. 5 4 1 3 2C. 2 3 1 4 5D. 1 5 4 3 29. 设一个栈的输入序列是1,2,3,4,5,则下列序列中,是栈的合法输出序列的是(D)。
数据结构练习题第三章栈、队列和数组习题及答案
第三章栈、队列和数组一、名词解释: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. 在作进栈运算时,应先判别栈是否(① ),在作退栈运算时应先判别栈是否(② )。
当栈中元素为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. 用链接方式存储的队列,在进行删除运算时()。
最新数据结构第三章栈和队列练习及答案
一、选择题1、栈中存取数据的原则()A、先进先出B、先进后出C、后进后出D、随意进出2、队列中存取数据的原则()A、先进先出B、后进先出C、先进后出D、随意进出3、插入和删除只能在一端进行的线性表,称为()A、队列B、循环队列C、栈D、循环栈4、在栈中,出栈操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)5、设长度为n的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)6、设长度为n的链队列用单循环链表表示,若只设头指针,则出队操作的时间复杂度为()A、O(1)B、O(log2n)C、O(n)D、O(n2)7、一个线性表的第一个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()A、110B、108C、100D、1208、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是()A、edcbaB、decbaC、dceabD、abcde9、若已知一个栈的入栈序列是1,2,3,……,n,其输出序列是p1,p2,p3,……,pn,若p1=n,则pi为()A、iB、n=iC、n-i+1D、不确定10、判断一个栈ST(最多元素m0)为空的条件是()A、ST->top==0B、ST->top==-1C、ST->top!=m0D、ST->top==m011、判断一个栈ST(最多元素m0)为满的条件是()A、ST->top!=0B、ST->top==0C、ST->top!=m0D、ST->top==m012、判断一个循环队列QU(最多元素为m0)为空的条件是()A、QU.front==QU.rearB、QU.front!=QU.rearC、QU.front==(QU.rear+1)%m0D、QU.front!=(QU.rear+1)%m013、判断一个循环队列QU(最多元素为m0)为满的条件是()A、QU.front==QU.rearB、QU.front!=QU.rearC、QU.front==(QU.rear+1)%m0D、QU.front!=(QU.rear+1)%m014、循环队列用数组存放其元素值A[0,m-1],已知其头尾指针分别是rear和front,则当前队列的元素个数是()A、(rear-front+m)%mB、rear-front+1C、rear-front-1D、rear-front15、栈和队列的共同特点是()A、都是先进后出B、都是先进先出C、只允许在端点处插入和删除D、没有共同点二、填空题1、设长度为n的链队列用单循环链表表示,若只设头指针,则入队和出队操作的时间复杂度分别为(O(N))和(O(1));若又设尾指针,则入队和出队操作的时间复杂度分别为(O(1))和(O(1))。
《数据结构》习题集:第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、队头尾指针都可能要修改。
数据结构第3章 栈和队列
第3章栈和队列习题1.选择题(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在()种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1(2)若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为()。
A.i B.n-i C.n-i+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 (4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。
A.x=top->data;top=top->link;B.top=top->link;x=top->link;C.x=top;top=top->link;D.x=top->link;(5)设有一个递归算法如下int fact(int n) { //n大于等于0if(n<=0) return 1;else return n*fact(n-1); }则计算fact(n)需要调用该函数的次数为()。
A. n+1 B. n-1 C.n D.n+2 (6)栈在()中有所应用。
A.递归调用B.函数调用C.表达式求值D.前三个选项都有(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。
主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是()。
A.队列 B.栈C.线性表D.有序表(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是()。
栈和队列习题及答案
栈和队列习题及答案第三章栈和队列⼀、选择题1、⼀个栈的输⼊序列为:a,b,c,d,e,则栈的不可能输出的序列是()。
A. a,b,c,d,eB. d,e,c,b,aC. d,c,e,a,bD. e,d,c,b,a2、判断⼀个循环队列Q(最多n个元素)为满的条件是()。
A. Q->rear==Q->frontB. Q->rear==Q->front+1C. Q->front==(Q->rear+1)%nD. Q->front==(Q->rear-1)%n3、设计⼀个判别表达式中括号是否配对的算法,采⽤()数据结构最佳。
A. 顺序表B. 链表C. 队列D. 栈4、带头结点的单链表head为空的判定条件是()。
A. head==NULLB. head->next==NULLC. head->next!=NULLD. head!=NULL5、⼀个栈的输⼊序列为:1,2,3,4,则栈的不可能输出的序列是()。
A. 1243B. 2134C. 1432D. 4312E. 32146、若⽤⼀个⼤⼩为6的数组来实现循环队列,且当rear和front的值分别为0,3。
当从队列中删除⼀个元素,再加⼊两个元素后,rear和front 的值分别为()。
A. 1和5B. 2和4C. 4和2D. 5和17、队列的插⼊操作是在()。
A. 队尾B. 队头C. 队列任意位置D. 队头元素后8、循环队列的队头和队尾指针分别为front和rear,则判断循环队列为空的条件是()。
A. front==rearB. front==0C. rear==0D. front=rear+19、⼀个顺序栈S,其栈顶指针为top,则将元素e⼊栈的操作是()。
A. *S->top=e;S->top++;B. S->top++;*S->top=e;C. *S->top=eD. S->top=e;10、表达式a*(b+c)-d的后缀表达式是()。
数据结构第三章栈和队列练习及答案
一、选择题一、选择题1、栈中存取数据的原则()、栈中存取数据的原则()A 、先进先出B 、先进后出C 、后进后出D 、随意进出、随意进出2、队列中存取数据的原则()、队列中存取数据的原则() A 、先进先出 B 、后进先出 C 、先进后出 D 、随意进出、随意进出3、插入和删除只能在一端进行的线性表,称为()、插入和删除只能在一端进行的线性表,称为()A 、队列B 、循环队列C 、栈D 、循环栈、循环栈4、在栈中,出栈操作的时间复杂度为()、在栈中,出栈操作的时间复杂度为()A 、O (1)B 、O (log 2n )C 、O (n )D 、O (n 2)5、设长度为n 的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为的链队列用单循环链表表示,若只设头指针,则入队操作的时间复杂度为()() A 、O (1) B 、O (log 2n ) C 、O (n ) D 、O (n 2)6、设长度为n 的链队列用单循环链表表示,若只设头指针,则出队操作的时间复杂度为的链队列用单循环链表表示,若只设头指针,则出队操作的时间复杂度为()() A 、O (1) B 、O (log 2n ) C 、O (n ) D 、O (n 2)7、一个线性表的第一个元素的存储地址是100,每个元素的长度是2,则第5个元素的地址是()是() A 、110 B 、108 C 、100 D 、1208、一个栈的入栈序列是a,b,c,d,e ,则栈的不可能的输出序列是(),则栈的不可能的输出序列是()A 、edcbaB 、decbaC 、dceabD 、abcde9、若已知一个栈的入栈序列是1,2,3,……,n ,其输出序列是p1,p2,p3,……,pn ,若p1=n ,则pi 为()为()A 、iB 、n=iC 、n-i+1D 、不确定、不确定10、判断一个栈ST (最多元素m0)为空的条件是())为空的条件是()A 、ST->top==0B 、ST->top==-1C 、ST->top!=m0D 、ST->top==m0 11、判断一个栈ST (最多元素m0)为满的条件是())为满的条件是()A 、ST->top!=0B 、ST->top==0C 、ST->top!=m0D 、ST->top==m0 12、判断一个循环队列QU (最多元素为m0)为空的条件是())为空的条件是() A 、QU.front==QU.rear B 、QU.front!=QU.rearC 、QU.front==(QU.rear+1)%m0D 、QU.front!=(QU.rear+1)%m013、判断一个循环队列QU (最多元素为m0)为满的条件是())为满的条件是()A 、QU.front==QU.rearB 、QU.front!=QU.rearC 、QU.front==(QU.rear+1)%m0D 、QU.front!=(QU.rear+1)%m0 14、循环队列用数组存放其元素值A[0,m-1],已知其头尾指针分别是rear 和front ,则当前队列的元素个数是()队列的元素个数是()A 、(rear-front+m)%mB 、rear-front+1C 、rear-front-1D 、rear-front 15、栈和队列的共同特点是()、栈和队列的共同特点是()A 、都是先进后出B 、都是先进先出、都是先进先出C 、只允许在端点处插入和删除D 、没有共同点、没有共同点二、填空题二、填空题1、设长度为n 的链队列用单循环链表表示,若只设头指针,则入队和出队操作的时间复杂度分别为(O(N))和(O(1));若又设尾指针,则入队和出队操作的时间复杂度分别为(O(1))和(O(1))。
《数据结构》习题汇编03第三章栈和队列试题
第三章栈和队列试题一、单项选择题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是指向栈顶的指针。
数据结构第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)的值。
数据结构第三章栈和队列习题
03栈和队列【单选题】1. 设入栈先后顺序为a,b,c,且在入栈过程中可出栈,则不可能得到的出栈序列是(B)。
A、a,b,cB、c,a,bC、b,c,aD、b,a,c2. 栈是一种(B)的线性表。
A、先进先出B、后进先出C、随意进出3. 在一个可存放n个数据元素的顺序栈中,假设以高地址端为栈底,以top为栈顶指针,当向栈中压入一个数据元素时,top的变化是(D)。
A、不变B、top=nC、top++D、top--4. 设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则删除一个结点的操作是(C)。
A、rear=front.nextB、rear=rear.nextC、front=front.nextD、front=rear.next5. 向一个栈顶指针为s且带头结点的链栈中插入一个p所指结点时,应执行(B)。
A、s.next=p;B、p.next=s.next;s.next=pC、p.next=s;s=p;D、p.next=s;s=s.next;6. 从一个栈顶指针为s且不带头结点的链栈中删除一个结点,用x保存被删结点的值,则执行(D)。
A、x=s;s=s.next;B、x=s.data;C、s=s.next;x=s.data;D、x=s.data;s=s.next;7. 设在一不带头结点的链队列中,front和rear分别为其队头和队尾指针,则插入p所指结点的操作是(B)。
A、front.next=p;front=p;B、rear.next=p;rear=p;C、p.next=rear;rear=p;D、p.next=front;front=p;8. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为(C)。
A、iB、n-iC、n-i+1D、不确定【计算题】1. 设入栈序列a、b、c、d,且在入栈的过程中允许出栈,试写出所有不可能得到的出栈序列。
数据结构第三章 栈和队列题库(30道)
数据结构第三章栈和队列1、栈的“先进后出”特性是指(——[单选题]A 最后进栈的元素总是最先出栈B 当同时进行进栈和出栈操作时,总是进栈优先C 每当有出栈操作时,总要先进行一次进栈操作D 每次出栈的元素总是最先进栈的元素正确答案:A2、设一个栈的进栈序列是A、B、C、D(即元素A~D依次通过该栈),则借助该栈所得到的输出序列不可能是( )。
——[单选题]A A,B,C,DB D,C,B,AC A,C,D,BD D,A,B,C正确答案:D3、一个栈的进栈序列是a、b、c、d、e,则栈的不可能的输出序列是( )。
——[单选题]A edcbaB decbaC dceabD abcde正确答案:C4、已知一个栈的进栈序列是1,2,3,…,n,其输出序列的第一个元素是i(1≤i≤n)则第j(1≤j≤n)个出栈元素是( )。
——[单选题]A iB n-iC j-i+1D 不确定正确答案:D5、设顺序栈st的栈顶指针top的初始时为-1,栈空间大小为MaxSize,则判定st栈为栈空的条件为( )。
——[单选题]A st.top==-1B st.top!=-1C st.top!=MaxSizeD st.top==MaxSize6、设顺序栈st的栈顶指针top的初始时为-1,栈空间大小为MaxSize,则判定st栈为栈满的条件是。
——[单选题]A st.top!=-1B st.top==-1C st.top!=MaxSize-1D st.top==MaxSize-1正确答案:D7、当用一个数组data[0..n- 1]存放栈中元素时,栈底最好(——[单选题]A 设置在data[0]处B 设置在data[n- 1]处C 设置在data[0]或data[n- 1]处D 设置在data数组的任何位置正确答案:C8、若一个栈用数组data[1..n]存储,初始栈顶指针top为0,则以下元素x进栈的正确操作是(——[单选题]A top++; data[top]=x;B data[top]=x; top++;C Top--; data[top]=x;D data[top]=x; top--;正确答案:A9、若一个栈用数组data[1..n]存储,初始栈顶指针top为n,则以下元素I进栈的正确操作是(——[单选题]A top++; data[top]= x;B data[top]=x; top++ ;C top--; data top]=x;D data[top]=x; top--;正确答案:D10、队列中元素的进出原则是( )。
数据结构 栈与队列升本习题答案
第三章栈与队列(答案)一、选择题1.栈的特点是( B ),队列的特点是( A )。
A、先进先出B、后进先出2.一个栈的队列顺序是a,b,c,d,e,则栈的不可能的输出序列是()。
A 、edcba B、decba C、dceab D 、abcde3. 判断一个队列QU(最多元素为MAXSIZE)为空的条件是()A 、QU->rear-QU->front== MAXSIZE B、QU->rear-QU->front-1==MAXSIZEC、QU->front==QU->rearD、QU->front==QU->rear+14.若已知一个栈的进栈序列是1,2,3,……..,n,其输出序列为p1,p2,p3,…..,pn,若p1=n,则pi(1<=i<n)为()A、i B 、n=i C、n-i+1 D、不确定5.循环顺序队列中是否可以插入下一个元素,()A、与队首指针和队尾指针的值有关B、只与队尾指针的值有关,与队首指针的值无关C、只与数组大小有关,与队首指针和队尾指针的值无关D、与曾经进行过多少次插入操作有关二、填空题1. 设有编号为1,2,3,4的四辆车,顺序进入一个栈式结构的站台(栈的大小为4),试写出这四辆车开出站的所有可能的顺序(每辆车入站后出站的时间未知):1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,43212.将下列各中缀表达式转换成后缀表达式。
(A*(B+C)+D)*E-F*G ABC+*D+E*FG*- ;A*(B-D)+H/(D+E)-S/N*T ABD-*HDE+/+SN/T*- ;(A-C)*(B+D)+(E-F)/(G+H) AC-BD+*EF-GH+/+3.顺序栈的入栈操作Sqstack *push_seqstack(Sqstack *s,elementtype x){ if(s->top= =MAXLEN-1){ printf(“上溢\n”);return 0;}else{ s->top++;s->element[s->top] =x;return s;}}4.链栈的出栈操作int *pop_linkstack(linkstack *s,elementtype y) {linkstack *p;if(s==NULL ){ printf(“下溢\n”);return 0;}else{ p=s;y=s->data;s= s->next ;(或者s=p->next)free(p);return 1;}}5.循环队列的出队操作elementtype delete_cyqueue(Cqueue *cp,elementtype y) { if( cp->front= =cp->rear ){ printf(“下溢\n”);return NULL;}else{ cp->front= (cp->font+1)%MAXLEN ;y=cp->element[cp->front];return y;} }。
数据结构习题第三章栈和队列答案
第三章栈和队列一、选择题二、判断题部份答案解释如下。
1、尾递归的消除就不需用栈2、这个数是前序序列为1,2,3,…,n,所能取得的不相似的二叉树的数量。
三、填空题1、操作受限(或限定仅在表尾进行插入和删除操作)后进先出2、栈3、3 1 24、23 100CH5、0 n+1 top[1]+1=top[2]六、两栈顶指针值相减的绝对值为1(或两栈顶指针相邻)。
7、(1)满(2)空(3)n (4)栈底(5)两栈顶指针相邻(即值之差的绝对值为1)八、链式存储结构九、S×SS×S××10、data[++top]=x;1一、(注:表达式中的点(.)表示将数隔开,如是三个数)1二、假溢出时大量移动数据元素。
13、(M+1) MOD N (M+1)% N;14、队列1五、先进先出1六、先进先出17、s=(LinkedList)malloc(sizeof(LNode));s->data=x;s->next=r->next;r->next=s;r=s;1八、捐躯一个存储单元设标记1九、(TAIL+1)MOD M=FRONT (数组下标0到M-1,若必然利用1到M,则取模为0者,值改取M20、=+1)%(M+1);return);+1)%(M+1)==;2一、栈2二、(rear-front+m)% m;23、(R-P+N)% N;24、(1)a[i]或a[1] (2)a[i] (3)pop(s)或s[1];2五、(1)PUSH(OPTR,w)(2)POP(OPTR)(3)PUSH(OPND,operate (a,theta,b))26、(1)T>0(2)i<n(3)T>0(4)top<n(5)top+1(6)true(7)i-1(8)top-1(9)T+w[i](10)false四、应用题1、栈是只准在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。
数据结构第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,pop C.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,…,pn,若p1=3,则p2的值。
A.一定是2 B.一定是1 C.不可能是1 D.以上都不对9.设n个元素进栈序列是p1,p2,…,pn,其输出序列是1,2,3,……,n,若p3=1,则p1的值。
A.可能是2 B.一定是1 C.不可能是2 D.不可能是310.设n个元素进栈序列是p1,p2,…,pn,其输出序列是1,2,3,……,n,若p 3=3,则p1的值。
A.可能是2 B.一定是2 C.不可能是1 D.一定是111.设n个元素进栈序列是p1,p2,…,pn,其输出序列是1,2,3,……,n,若p n =1,则pi(1≤i≤n-1)的值。
第3章 栈与队列习题参考答案
习题三参考答案备注: 红色字体标明的是与书本内容有改动的内容。
一、选择题1.在栈中存取数据的原则是( B )。
A.先进先出 B. 先进后出C. 后进后出D. 没有限制2.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。
A.1234 B. 1324 C. 4321 D. 14233.在链栈中,进行出栈操作时(B )。
A.需要判断栈是否满 B. 需要判断栈是否为空C. 需要判断栈元素的类型D. 无需对栈作任何差别4.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize,则顺序栈的判空条件是( A )。
A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-15.在顺序栈中,若栈顶指针top指向栈顶元素的下一个存储单元,且顺序栈的最大容量是maxSize。
则顺序栈的判满的条件是( C )。
A.top==0 B.top==-1 C. top==maxSize D.top==maxSize-16.在队列中存取数据元素的原则是( A )。
A.先进先出 B. 先进后出C. 后进后出D. 没有限制7.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判空条件是(A )。
A.front==rear B. front!=rearC. front==rear+1D. front==(rear+1)% maxSize8.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的判满条件是(D )。
A.front==rear B. front!=rearC. front==rear+1D. front==(rear+1)% maxSize9.在循环顺序队列中,假设以少用一个存储单元的方法来区分队列判满和判空的条件,front和rear分别为队首和队尾指针,它们分别指向队首元素和队尾元素的下一个存储单元,队列的最大存储容量为maxSize,则队列的长度是(C )。
数据结构-第3章--栈和队列练习题.doc
第3章栈和队列一选择题1. 对于栈操作数据的原则是()。
A. 先进先出B. 后进先出C. 后进后出D. 不分顺序2. 在作进栈运算时,应先判别栈是否( ① ),在作退栈运算时应先判别栈是否( ② )。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( ③ )。
为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 ( ④ )分别设在这片内存空间的两端,这样,当( ⑤ )时,才产生上溢。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/2④: A. 长度 B. 深度 C. 栈顶 D. 栈底⑤: A. 两个栈的栈顶同时到达栈空间的中心点.B. 其中一个栈的栈顶到达栈空间的中心点.C. 两个栈的栈顶在栈空间的某一位置相遇.D. 两个栈均不空,且一个栈的栈顶到达另一个栈的栈底.3. 一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A. 不确定B. n-i+1C. iD. n-i4. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是()。
A. i-j-1B. i-jC. j-i+1D. 不确定的5. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,p N,若p N是n,则p i是( )。
A. iB. n-iC. n-i+1D. 不确定6. 有六个元素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 67. 设栈的输入序列是1,2,3,4,则()不可能是其出栈序列。
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,8. 一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是()。
《数据结构》习题汇编03 第三章 栈和队列 试题(答案)
第三章栈和队列一、单项选择题参考答案: 1. A 2. B 3. C 4. A 5. B6. B7. D8. D9. C 10. A11. D 12. A 13. A 14. D 15. C二、填空题参考答案:1. 先进后出2. 先进先出3. 队尾,队头4. 栈顶指针5. 栈顶指针6. MaxSize-17. top==08. 空栈9. 栈顶指针10. p->link=top,top=p11. top=top->link 12. Q.front==Q.rear 13. (Q.rear+1)%MaxSize==Q.front14. 队尾指针15. 空,只含有一个结点16. front == rear && front != NULL或者front == rear && rear != NULL17. 两端18. 3x2+*5- 19. 15 20. 3三、判断题参考答案: 1. 是 2. 是 3. 否 4. 是 5. 是6. 否7. 否8. 是9. 否10. 否11. 否12. 是13. 否14. 是15. 否16. 否四、运算题参考答案:1.根据以上规则,给出计算中缀表达式a + b * c – d / e时两个栈的变化。
步扫描项项类型动作OPND栈OPTR栈0 OPTR栈与OPND栈初始化, ‘#’ 进OPTR栈,#取第一个符号1 a 操作数a进OPND栈, 取下一符号 a #2 + 操作符icp (‘+’ ) > isp (‘#’ ), 进OPTR栈, 取a # +下一符号3 b 操作数b进OPND栈, 取下一符号 a b # +a b # + *4 * 操作符icp (‘*’ ) > isp (‘+’ ), 进OPTR栈, 取下一符号5 c 操作数c进OPND栈, 取下一符号 a b c # + *a s1# +6 - 操作符icp (‘-’ ) < isp (‘*’ ), 退OPND栈‘c’,退OPND栈‘b’, 退OPTR栈‘*’, 计算 b * c→ s1,结果进OPND栈s2#7 同上同上ic p (‘-’ ) < isp (‘+’ ), 退OPND栈‘s’,1退OPND栈‘a’, 退OPTR栈‘+’, 计算 a * s1→s2, 结果进OPND栈8 同上同上icp (‘-’ ) > isp (‘#’ ), 进OPTR栈, 取下一符号s2# -9 d 操作数d进OPND栈, 取下一符号s2 d # -10 / 操作符icp (‘/’ ) > isp (‘-’ ), 进OPTR栈, 取下一符号s2 d # - /11 e 操作数e进OPND栈, 取下一符号s2 d e # - /12 # 操作符icp (‘#’ ) < isp (‘/’ ), 退OPND栈‘e’,退OPND栈‘d’, 退OPTR栈‘/’, 计算 d / e →s5, 结果进OPND栈s2 s3# -13 同上同上icp (‘#’ ) < isp (‘-’ ), 退OPND栈‘s3’,退OPND栈‘s2’, 退OPTR栈‘-’, 计算 s2– s3→s4, 结果进OPND栈s4#14 同上同上 icp (‘#’ ) == isp (‘#’ ), 退OPND栈‘s4’, 结束#2.利用运算符优先数,画出将中缀表达式a + b * c - d / e 改为后缀表达式时运算符栈OPTR的变化。
数据结构 第三章栈和队列
第三章栈和队列:习题习题一、选择题1.栈和队列都是( )。
A.顺序存储的线性结构B.限制存取点的线性结构C.链接存储的线性结构 D.限制存取点的非线性结构2.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是( )。
A. edcbaB. decbaC. dceabD. abcde3.若已知一个栈的入栈序列是l,2,3,…,n,其输出序列为p1,p2,p3,…,p n,若p =n,则P i为( )。
1A.iB. n-iC. n-i+lD.不确定4.循环队列SQ采用数组空间SQ.data[0,n-l]存放其元素值,已知其头尾指标分别是front 和rear,则当前队列中的元素个数是( )。
A. (rear-front+n)%nB. rear-front+lC. rear-front-lD. rear-front5.中缀表达式A-(B+C/D)*E的后缀形式是( )。
A. AB-C+D/E*B. ABC+D/E*C. ABCD/E*+-D. ABCD/+E*-6.一个队列的入列序列是1,2,3,4,则队列的输出序列是( )。
A.4,3,2,1 B.1,2,3,4C.1,4,3,2 D.3,2,4,17.若在一个大小为6的数组上实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为( )。
A.1和5B.2和4C.4和2D.5和l8.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指标指向队尾结点,则在进行出队运算时( )。
A.仅修改队头指针B.仅修改队尾指针C.对头、队尾指针都要修改D.对头、对尾指针都可能要修改9.若进栈序列为a,b,c,则通过入出栈运算可能得到的a,b,c的不同排列个数为( )。
A.4B.5C.6D.710.设数组data[m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执行出队运算后其头指针front值为( )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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)(注:当有头结点选B)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,则队列的输出序列是(C)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,则判定此循环队列为空的条件是(C)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,则判定此循环队列为满的条件是(C)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 的值分别为(B)A、1,5B、2, 4C、4,2D、5,111.用单链表表示的链式队列的队头在链表的(A)位置A、链头B、链尾C、链中12.判定一个链队列Q(最多元素为n 个)为空的条件是(A)A、Q.front==Q.rearB、Q.front!=Q.rearC、Q.front==(Q.rear+1)%nD、Q.front!=(Q.rear+1)%n13.在链队列Q 中,插入s 所指结点需顺序执行的指令是(B)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 中,删除一个结点需要执行的指令是(C)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.用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时(D)A、仅修改队头指针B、仅修改队尾指针C、队头尾指针都要修改D、队头尾指针都可能要修改。
16.栈和队列的共同点是(C)A、都是先进后出B、都是先进先出C、只允许在端点处插入和删除元素D、没有共同点17.消除递归(B)需要使用栈。
A、一定B、不一定18.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6 依次进栈,如果6 个元素出栈的顺序是s2,s3,s4,s6,s5,s1,则栈的容量至少应该是(B)A、2B、3C、5D、619.若一个栈的输入序列是a,b,c,则通过入、出栈操作可能得到a,b,c 的不同排列个数为(B)A、4B、5C、6D、720.设有一顺序栈已经含有3 个元素,如图3.1 所示元素a4 正等待进栈。
下列不可能出现的出栈序列是(A)A、a3,a1,a4,a2B、a3,a2,a4,a1C、a3,a4,a2,a1D、a4,a3,a2,a1图3.121.链栈和顺序栈相比,有一个比较明显的优势是(A)A、通常不会出现栈满的情况B、通常不会出现栈空的情况C、插入操作更容易实现D、删除操作更加容易实现22.若一个栈的输入序列是1,2,3,4,…,n,输出序列的第一个元素是n,则第i 个输出元素是(C)A、不确定B、n-iC、n-i+1D、n-i-123.以下说法正确的是(A)A、因链栈本身没有容量限制,故在用户内存空间的范围内不会出现栈满情况B、因顺序栈本身没有容量限制,故在用户内存空间的范围内不会出现栈满情况C、对于链栈而言,在栈满状态下,如果此时再作进栈运算,则会发生“上溢”D、对于顺序栈而言在栈满状态下如果此时再作进栈运算,则会发生“下溢”。
二、判断题1.在顺序栈栈满情况下,不能做进栈运算,否则会产生“上溢”。
V2.链栈与顺序栈相比的一个优点是链栈插入和删除操作更加方便。
X3.若一个栈的输入序列为1,2,3,…,n,其输出序列的第一个元素为n,则其输出序列的每个元素一定满足a i=i+1(i=1,2, …,n)。
X4.在链队列中,即使不设置尾指针也能进行入队操作。
V5.在对链队列(带头指针)做出队操作时,不会改变front 指针的值。
V6.循环队列中元素个数为rear-front。
X7.一个栈的输入序列是1,2,3,4,则在栈的输出序列中可以得到4,3,1,2。
X8.一个栈的输入序列是1,2,3,4,则在栈的输出序列中可以得到1,2,3,4。
V9.若以链表作为栈的存储结构,则进栈需要判断栈是否满。
X10.若以链表作为栈的存储结构,则出栈需要判断栈是否空。
V三、填空题1.栈的特点是(后进先出),队列的特点是(先进先出)。
2.线性表、栈、队列都是(线性)结构,可以在线性表的(任意)位置插入和删除元素;对于栈只能在(栈顶)插入和删除元素;对于队列只能在(队尾)插入元素和在(队首)位置删除元素。
3.有程序如下,则此程序的输出结果(栈的元素类型是SelemType 为char)是(Stact)。
void main(){stack s;char x,y;initstack (s);x=’c’;y=’k’;push(s,x);push(s,’a’);push(s,y);pop(s,x);push(s,’t’);push(s,x);pop(s,x);push(s,’s’);while(!stackempty(s)){pop(s,y);printf(y);}printf(x);}4.在栈顶指针为HS 的链栈中,判定栈空的条件是(HS==NULL )。
5.向栈中压入元素的操作是先(存入元素)后(移动栈顶指针)。
6.对栈进行退栈操作是先(移动栈顶指针)后(取出元素)。
7.用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是(O(1))和(O(n));若只设尾指针,则出队和入队的时间复杂度分别是(O(1))和(O(1))。
8.从循环队列中删除一个元素时,其操作是(先取出元素,再移动头指针)。
9.在一个循环队列中,队首指针指向队首元素的(当前位置)。
10.在具有n 个单元的循环队列中,队满时共有(n-1 )个元素。
11.在HQ 的链队列中,判断只有一个结点的条件是(HQ.front->next=HQ.rear )。
12.设栈S 和队列Q 的初始状态为空,元素a、b、c、d、e、f 依次通过栈S,一个元素出栈后即进入队列Q。
若这6个元素出队列的顺序是b、d、c、f、e、a 则栈S 的容量至少应该是(3 )。
13.有程序如下,则此程序的输出结果(队列的元素类型是QSelemType 为char)是(char )。
void main(){char x=’e’,y=’c’;enqueue(q,’h’);enqueue(q,’r’);enqueue(q,y);dequeue(q,x);enqueue(q,x);degueue(q,x);enqueue(q,’a’);while(!queueempty(q)){dequeue(q,y);printf(y);}printf(x);}14.有如下递归函数:int dunno(int m){int value;if(m==0)value=3;elsevalue=dunno(m-1)+5;return(value);}执行语句printf(“%d\n”,dunno(3));的结果是(18 )。
四、简答题1.对于堆栈,给出三个输入项A,B,C,如果输入项序列为ABC,试给出全部可能的输出序列,并写出每种序列对应的操作。
例如:A 进B 进C 进C 出B 出A 出,产生的序列为CBA。
答案:利用栈的“后进先出”的特点,共有如下 5 种情况:A 进A 出B 进B 出C 进C 出产生输出序列ABCA 进A 出B 进C 进C 出B 出产生输出序列ACBA 进B 进B 出A 出C 进C 出产生输出序列BACA 进B 进B 出C 进C 出A 出产生输出序列BCAA 进B 进C 进C 出B 出A 出产生输出序列CBA2.简述以下算法的功能(栈的元素类型是SelemType 为int)。
(1)status algo1(stack s){int I,n,a[255];n=0;while(!stackempty(s)){n++;pop(s,a[n]);}for(I=1;I<=n;I++)push(s,a[I]);}利用数组a 将栈s 中的元素逆置。
(2) status algo2(stack s,int e){stack t;int d;initstack(t);while(!stackempty(s)){pop(s,d);if(d!=e)push(t,d);}while(!stackempty(t)){pop(t,d);push(s,d);}}(2)利用栈t 将栈s 中的数据元素e 删除。