栈和队列答案
栈和队列习题答案
![栈和队列习题答案](https://img.taocdn.com/s3/m/a404978dc5da50e2524d7fe3.png)
第三章栈和队列习题答案一、基础知识题设将整数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种排列中,哪些序列是可以通过相应的入出栈操作得到的。
答:(1)出栈序列为:1324(2)不能得到1423序列。
因为要得到14的出栈序列,则应做Push(1),Pop(),Push(2),Push(3),Push(4),Pop()。
这样,3在栈顶,2在栈底,所以不能得到23的出栈序列。
能得到1432的出栈序列。
具体操作为:Push(1), Pop(),Push(2),Push(3),Push(4),Pop(),Pop(),Pop()。
(3)在1,2 ,3 ,4 的24种排列中,可通过相应入出栈操作得到的序列是:1234,1243,1324,1342,1432,2134,2143,2314,2341,2431,3214,3241,3421,4321不能得到的序列是:1423,2413,3124,3142,3412,4123,4132,4213,4231,4312链栈中为何不设置头结点答:链栈不需要在头部附加头结点,因为栈都是在头部进行操作的,如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂,所以只要有链表的头指针就可以了。
循环队列的优点是什么如何判别它的空和满答:循环队列的优点是:它可以克服顺序队列的"假上溢"现象,能够使存储队列的向量空间得到充分的利用。
判别循环队列的"空"或"满"不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。
数据结构:栈和队单元测验与答案
![数据结构:栈和队单元测验与答案](https://img.taocdn.com/s3/m/09b028ba3b3567ec112d8ae4.png)
一、单选题1、链栈与顺序栈相比有一个明显的优点,即_____。
A.插入操作更方便B.删除操作更加方便C.不会出现栈空的情况D.通常不会出现栈满的情况正确答案:D2、设进栈序列是1,2,3,…,n,输出序列为p1,p2,p3,…,pn。
若p1=3,则p2为_____。
A.可能是1B.不可能是2C.可能是2D.必是1正确答案:C3、已知hs为首指针的简单单向链表存储一个栈,使指针s所指结点进栈的操作是____。
A.s->next=hs;hs=s;B.hs->next=s;C.s->next=hs->next; hs->next=s;D.s->next=hs;hs=hs->next;正确答案:A4、数组q[M](M等于6)存储一个循环队,first和last分别是首尾指针。
已知first和last的当前值分别等于2和5,且q[5]存放的是队尾元素。
当从队列中删除两个元素,再插入一个元素后,first和last的值分别等于_____。
A.3和6B.5和1C.4和0D.1和3正确答案:C5、设进栈序列是1,2,3,…,n,输出序列为p1,p2,p3,…,pn。
若p3=1,则p1为_____。
A.必定是3B.必是2C.不可能是3D.可能是3正确答案:D6、数组q[M]存储一个循环队,first和last分别是首尾指针,如果使元素x进队操作的语句为“q[last]=x,last=(last+1)%m;”那么判断队满的条件是_____。
st= =M-1st= =firstC.(last+1)%m= =firstst+1= =first7、数组q[M]存储一个循环队,first和last分别是首尾指针。
如果使元素x出队操作的语句为“first=(first+1)%m, x=q[first];”。
那么元素x进队的语句是_____。
A.q[(last+1)%m]=x;B.q[last+1]=x;st=(last+1)%m,q[last]=x;D.x=q[last], last =(last+1)%m;正确答案:C8、首尾指针分别是f和r的单向加头链表存储一个队,元素x出队的语句为“f=f->next, x=f->data;”,那么判断队空否的条件是_____。
《数据结构及其应用》笔记含答案 第三章_栈和队列
![《数据结构及其应用》笔记含答案 第三章_栈和队列](https://img.taocdn.com/s3/m/d0975b5c3968011ca2009111.png)
第3章栈和队列一、填空题1、栈是限定仅在表尾进行插入或删除操作的线性表。
2、栈的修改是按照后进先出的原则进行的。
3、队是一种先进先出的线性表。
4、把队列头尾相接的顺序存储结构称为循环队列。
5、队列也是一种操作受限的线性表,允许插入的一端叫做__队尾___,允许删除的一端叫做__队头__。
二、判断题1、栈和队列的存储,既可以采用顺序存储结构,又可以采用链式存储结构。
(√)2、任何一个递归过程都可以转换成非递归过程。
(√)3、若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1。
(√)4、通常使用队列来处理函数的调用。
(╳)5、循环队列通常用指针来实现队列的头尾相接。
(╳)三、单项选择题1、若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在(C)种情况。
A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1解释:栈是后进先出的线性表,不难发现C选项中元素1比元素2先出栈,违背了栈的后进先出原则,所以不可能出现C选项所示的情况。
2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为(C)。
A.i B.n-i C.n-i+1 D.不确定解释:栈是后进先出的线性表,一个栈的入栈序列是1,2,3,…,n,而输出序列的第一个元素为n,说明1,2,3,…,n一次性全部进栈,再进行输出,所以p1=n,p2=n-1,…,pi=n-i+1。
3、数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为(D)。
A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n解释:对于非循环队列,尾指针和头指针的差值便是队列的长度,而对于循环队列,差值可能为负数,所以需要将差值加上MAXSIZE(本题为n),然后与MAXSIZE(本题为n)求余,即(n+r-f)%n。
数据结构-第三次作业(答案)
![数据结构-第三次作业(答案)](https://img.taocdn.com/s3/m/412af2d38ad63186bceb19e8b8f67c1cfbd6ee57.png)
第三次作业第三章栈和队列一、选择题1. 若一个栈的输入序列为1,2,3,…,n,输出序列的第一个元素是i,则第j个输出元素是( D )。
A. i-j-1B. i-jC. j-i+1D. 不确定的2. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是( AD )。
A. |top[2]-top[1]|=0B. top[1]+1=top[2]C. top[1]+top[2]=mD.top[1]=top[2]3. 栈在( D )中应用。
A. 递归调用B. 子程序调用C. 表达式求值D. A,B,C4. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为( D ),其中^为乘幂。
A. 3,2,4,1,1;(*^(+*-B. 3,2,8;(*^-C. 3,2,4,2,2;(*^(-D. 3,2,8;(*^(-5. 用链接方式存储的队列,在进行删除运算时( D )。
A. 仅修改头指针B. 仅修改尾指针C. 头、尾指针都要修改D. 头、尾指针可能都要修改6. 假设以数组A[m]存放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( A )。
A.(rear-front+m)%m B.rear-front+1 C.(front-rear+m)%m D.(rear-front)%m7. 栈和队列的共同点是( C )。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点8. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是( C )。
A. 6 B. 4 C. 3 D. 2二、判断题1.消除递归不一定需要使用栈,此说法(√)2. 栈是实现过程和函数等子程序所必需的结构。
数据结构习题参考答案
![数据结构习题参考答案](https://img.taocdn.com/s3/m/38ee0384fc0a79563c1ec5da50e2524de518d03c.png)
数据结构习题参考答案一、栈和队列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)题目描述:使用队列实现栈的功能。
解答:使用两个队列,一个用于入栈操作,一个用于出栈操作。
入栈操作:直接将元素入队入栈队列中;出栈操作:如果出栈队列为空,则将入栈队列的元素逐个出队并入队出栈队列,此时出栈队列的队首元素即为要出栈的元素。
数据结构第三章栈和队列习题及答案
![数据结构第三章栈和队列习题及答案](https://img.taocdn.com/s3/m/4c8c421090c69ec3d5bb7542.png)
习题三栈和队列一单项选择题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. 用链接方式存储的队列,在进行删除运算时()。
栈和队列答案
![栈和队列答案](https://img.taocdn.com/s3/m/74467e57227916888486d7e8.png)
第3章栈和队列答案一、填空题1. 向量、栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。
2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为栈顶。
不允许插入和删除运算的一端称为栈底。
3. 队列是被限定为只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表。
4. 在具有n个单元的循环队列中,队满时共有 n-1 个元素。
5. 带表头结点的空循环双向链表的长度等于0。
解:Array二、判断正误(×)1. 在表结构中最常用的是线性表,栈和队列不太常用。
错,不一定吧调用子程序或函数常用,CPU中也用队列。
(√)2. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。
(√)3. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。
正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(×)4. 栈和链表是两种不同的数据结构。
错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。
(×)5. 栈和队列是一种非线性数据结构。
错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。
(√)6. 栈和队列的存储方式既可是顺序方式,也可是链接方式。
(√)7. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。
(×)8. 队是一种插入与删除操作分别在表的两端进行的线性表,是一种先进后出型结构。
错,后半句不对。
(×)9. 一个栈的输入序列是12345,则栈的输出序列不可能是12345。
错,有可能。
三、单项选择题( B)1. 栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(C)2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为A.i B.n=i C.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,…,n,则出栈的序列是n,…,3,2,1。
(完整版)第3章栈与队列习题参考答案
![(完整版)第3章栈与队列习题参考答案](https://img.taocdn.com/s3/m/c0e4a36fb14e852458fb57f4.png)
A.1234
B. 1324
C. 4321
D. 1423
3.在链栈中,进行出栈操作时( B )。
A.需要判断栈是否满
B. 需要判断栈是否为空
C. 需要判断栈元素的类型
D. 无需对栈作任何差别
4.在顺序栈中,若栈顶指针 top 指向栈顶元素的下一个存储单元,且顺序栈的最大容量是 maxSize,则顺序栈 的判空条件是( A )。
The shortest way to do many things is
习题三参考答案 备注: 红色字体标明的是与书本内容有改动的内容。
一、选择题
1. 在栈中存取数据的原则是( B )。
A. 先进先出
B. 先进后出
C. 后进后出
D. 没有限制
2.若将整数 1、2、3、4 依次进栈,则不可能得到的出栈序列是( D )。
else if (i==1) if (top1==base1) throw new Exception("第 0 号栈为空"); else x=stackElem[++top1];
The shortest way to do many things is
return x; } } // DuSqStack 类结束 4. 循环顺序队列类采用设置一个计数器的方法来区分循环队列的判空和判满。试分别编写顺序循环队列中入 队和出队操作的函数。 参考答案: //循环顺序队列存储结构类描述如下: class CircleSqQueue_num { private Object[] queueElem; // 队列存储空间 private int front;// 队首的引用,若队列不空,指向队首元素,初值为 0 private int rear;// 队尾的引用,若队列不空,指向队尾元素的下一个位置,初值为 0 private int num; // 计数器用来记录队列中的数据元素个数
栈和队列练习题答案
![栈和队列练习题答案](https://img.taocdn.com/s3/m/1d6a72d3bb68a98270fefa6a.png)
栈和队列(答案)1. 一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是__ C __。
A. edcbaB. decbaC. dceabD. abcde2. 若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi为__ C __。
A. iB. n=iC. n-i+1D. 不确定3. 栈结构通常采用的两种存储结构是__ A __。
A. 顺序存储结构和链式存储结构散列方式和索引方式链表存储结构和数组线性存储结构和非线性存储结构4. 判定一个顺序栈ST(最多元素为m0)为空的条件是_ B ___。
A. top !=0B. top= =0C. top !=m0D. top= =m0-15. 判定一个顺序栈ST(最多元素为m0)为栈满的条件是__ D __。
A. top!=0B. top= =0C. top!=m0D. top= =m0-16. PUSH 和POP 命令常用于(C)操作。
A 队列B 数组C 栈D 记录7. 向一个栈顶指针为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;8. 从一个栈顶指针为HS的链栈中删除一个结点时,用x 保存被删结点的值,则执行_ B _ __。
(不带空的头结点)A. x=HS; HS= HS—>next;B. x=HS—>data;C. HS= HS—>next; x=HS—>data;D. x=HS—>data; HS= HS—>next;9. 一个队列的数据入队序列是1,2,3,4,则队列出队时的输出序列是__ B __ 。
二级MS Office高级应用(新大纲)选择题题目、解析及答案(栈、队列)
![二级MS Office高级应用(新大纲)选择题题目、解析及答案(栈、队列)](https://img.taocdn.com/s3/m/7342bbc60242a8956bece4aa.png)
二级MS Office高级应用(新大纲)选择题题目、解析及答案(栈、队列)1.一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。
A) 12345ABCDEB) EDCBA54321C) ABCDE12345D) 54321EDCBA参考答案:B解析:栈是只允许在表的一端进行插入和删除的线性表,如下图所示,允许插入的一端称为栈顶,它又称为“先进后出”或“后进先出”表。
例如:往弹夹中压子弹。
2.下列叙述中正确的是()。
A)栈是"先进先出"的线性表B)队列是"先进后出"的线性表C)循环队列是非线性结构D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构参考答案:D解析:栈是“先进后出”或“后进先出”;队列是“先进先出”。
3.支持子程序调用的数据结构是()。
A)栈B)树C)队列D)二叉树参考答案:A解析:主程序调用子程序时,使用栈先存储主程序,再存储子程序。
4.下列叙述中正确的是()。
A) 循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B) 在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C) 在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D) 循环队列中元素的个数是由队头指针和队尾指针共同决定参考答案:D解析:循环队列是首尾相连的队列,如下图所示:元素个数=(front+n-rear)%n。
5.下列关于栈的叙述正确的是()。
A) 栈按“先进先出”组织数据B) 栈按“先进后出”组织数据C) 只能在栈底插入数据D) 不能删除数据参考答案:B解析:栈是只允许在表的一端进行插入和删除的线性表,允许插入的一端称为栈顶,它以称为“先进后出”或“后进先出”表。
6.下列数据结构中,属于非线性结构的是()。
A) 循环队列B) 带链队列C) 二叉树D) 带链栈参考答案:C解析:队列、栈是线性结构;树是非线性结构。
第二单元栈和队列 答案
![第二单元栈和队列 答案](https://img.taocdn.com/s3/m/64039e3d43323968001c9204.png)
A.通常不会出现栈满的情况B.通常不会出现栈空的情况
C.插入操作更容易实现D.删除操作更容易实现
15.若一个顺序栈中元素为n个,做进栈运算时发生上溢,则说明该栈的最大容量为(B)。
A. n-1B. n C. n+1 D. n/2
16.允许对队列进行的操作有D。
6.栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为__LIFO表;队列的插入和删除运算分别在队列的两端进行,先进队列的元素必定先出队列,所以又把队列称为___FIFO__表。
7.设F和R分别表示顺序循环队列的头指针和尾指针,或F指向队头元素的前一个位置,R指向队尾元素则判断该循环队列为空的条件为F==R。
13.对于顺序存储结构的栈,在做入栈运算时应先判断栈是否栈满;在做出栈运算时应先判断栈是否空栈;当栈中元素为n个,做入栈运算时发生上溢,则说明该栈的最大容量为n个元素空间。
三、判断题(每题1分,共12分)
1.队列是一种插入和删除操作分别在表的两端进行的线性表,是一种先进后出的结构。(×)
2.不论是入队列操作还是入栈操作,在顺序存储结构上都需要考虑“溢出”情况。(√)
A.i B.n-i C.n-i+1 D.不确定
7.设计一个判别表达式中左、右括号是否配对出现的算法,采用D数据结构最佳。A.线性表的顺序存储结构B.队列C.线性表的链式存储结构D.栈
8.判定一个顺序栈st(最多元素为MaxSize)为满的条件是D。
A.st->top != -1 B.st->top == -1
Int fact(inrn 1;
Else return n*fact(n-1);
}
大学《数据结构》第三章:栈和队列-第一节-栈
![大学《数据结构》第三章:栈和队列-第一节-栈](https://img.taocdn.com/s3/m/8b4bc54fb94ae45c3b3567ec102de2bd9605de2d.png)
第一节栈
一、栈的定义及其运算
1、栈的定义
栈(Stack):是限定在表的一端进行插入和删除运算的线性表,通常将插入、删除的一端称为栈项(top),另一端称为栈底(bottom)。
不含元素的空表称为空栈。
栈的修改是按后进先出的原则进行的,因此,栈又称为后进先出(Last In First Out)的线性表,简称为LIFO表。
真题选解
(例题·填空题)1、如图所示,设输入元素的顺序是(A,B,C,D),通过栈的变换,在输出端可得到各种排列。
若输出序列的第一个元素为D,则输出序列为。
隐藏答案
【答案】DCBA
【解析】根据堆栈"先进后出"的原则,若输出序列的第一个元素为D,则ABCD入栈,输出序列为DCBA
2、栈的基本运算
(1)置空栈InitStack(&S):构造一个空栈S。
数据结构(栈和队列)习题与答案
![数据结构(栈和队列)习题与答案](https://img.taocdn.com/s3/m/ade631cadd3383c4bb4cd2ec.png)
一、单选题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的值是_______。
第3课 栈、队列和数组
![第3课 栈、队列和数组](https://img.taocdn.com/s3/m/3daf6ddc0242a8956bece4ad.png)
第三课栈、队列和数组一选择题1.对于栈操作数据的原则是()。
A.先进先出B.后进先出C.后进后出D.不分顺序参考答案:B2.一个栈的输入序列为123…n,若输出序列的第一个元素是n,输出第i(1<=i<=n)个元素是()。
A.不确定B.n-i+1 C.i D.n-i参考答案:B3.设abcdef以所给的次序进栈,若在进栈操作时,允许出栈操作,则下面得不到的出栈序列为()。
A.fedcba B.bcafed C.dcefba D.cabdef参考答案:D4.若一个栈以向量V[1..n]存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是()。
A.top=top+1; V[top]=x B.V[top]=x; top=top+1C.top=top-1; V[top]=x D.V[top]=x; top=top-1参考答案:C5.若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈(i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A.|top[2]-top[1]|==0 B.top[1]+1==top[2] C.top[1]+top[2]==m D.top[1]==top[2]参考答案:B6.执行完下列语句段后,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.无限递归参考答案:B7.表达式a*(b+c)-d的后缀表达式是()。
A.abcd*+- B.abc+*d- C.abc*+d- D.-+*abcd参考答案:B8.表达式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;(*^(-参考答案:D9.用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时()。
算法与数据结构C语言版课后习题答案(机械工业出版社)第3,4章习题参考答案
![算法与数据结构C语言版课后习题答案(机械工业出版社)第3,4章习题参考答案](https://img.taocdn.com/s3/m/286a7d1c78563c1ec5da50e2524de518964bd3b9.png)
算法与数据结构C语⾔版课后习题答案(机械⼯业出版社)第3,4章习题参考答案第3章栈和队列⼀、基础知识题3.1有五个数依次进栈:1,2,3,4,5。
在各种出栈的序列中,以3,4先出的序列有哪⼏个。
(3在4之前出栈)。
【解答】34215 ,34251,345213.2铁路进⾏列车调度时,常把站台设计成栈式结构,若进站的六辆列车顺序为:1,2,3,4,5,6,那么是否能够得到435612, 325641, 154623和135426的出站序列,如果不能,说明为什么不能;如果能,说明如何得到(即写出"进栈"或"出栈"的序列)。
【解答】输⼊序列为123456,不能得出435612和154623。
不能得到435612的理由是,输出序列最后两元素是12,前⾯4个元素(4356)得到后,栈中元素剩12,且2在栈顶,不可能让栈底元素1在栈顶元素2之前出栈。
不能得到154623的理由类似,当栈中元素只剩23,且3在栈顶,2不可能先于3出栈。
得到325641的过程如下:1 2 3顺序⼊栈,32出栈,得到部分输出序列32;然后45⼊栈,5出栈,部分输出序列变为325;接着6⼊栈并退栈,部分输出序列变为3256;最后41退栈,得最终结果325641。
得到135426的过程如下:1⼊栈并出栈,得到部分输出序列1;然后2和3⼊栈,3出栈,部分输出序列变为13;接着4和5⼊栈,5,4和2依次出栈,部分输出序列变为13542;最后6⼊栈并退栈,得最终结果135426。
3.3若⽤⼀个⼤⼩为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除⼀个元素,再加⼊两个元素后,rear和front的值分别为多少?【解答】2和43.4设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,⼀个元素出栈后即进队列Q,若6个元素出队的序列是e3,e5,e4,e6,e2,e1,则栈S的容量⾄少应该是多少?【解答】43.5循环队列的优点是什么,如何判断“空”和“满”。
数据结构课后答案第3章
![数据结构课后答案第3章](https://img.taocdn.com/s3/m/71306caad1f34693daef3edb.png)
第 3 章特殊线性表——栈、队列和串2005-07-14第 3 章特殊线性表——栈、队列和串课后习题讲解1. 填空⑴设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5,经过push,push,pop,push,pop,push,push后,输出序列是(),栈顶指针为()。
【解答】23,1003H⑵栈通常采用的两种存储结构是();其判定栈空的条件分别是(),判定栈满的条件分别是()。
【解答】顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top= -1和top=NULL,栈顶指针top等于数组的长度和内存无可用空间⑶()可作为实现递归函数调用的一种数据结构。
【解答】栈【分析】递归函数的调用和返回正好符合后进先出性。
⑷表达式a*(b+c)-d的后缀表达式是()。
【解答】abc+*d-【分析】将中缀表达式变为后缀表达式有一个技巧:将操作数依次写下来,再将算符插在它的两个操作数的后面。
⑸栈和队列是两种特殊的线性表,栈的操作特性是(),队列的操作特性是(),栈和队列的主要区别在于()。
【解答】后进先出,先进先出,对插入和删除操作限定的位置不同⑹循环队列的引入是为了克服()。
【解答】假溢出⑺数组Q[n]用来表示一个循环队列,front为队头元素的前一个位置,rear为队尾元素的位置,计算队列中元素个数的公式为()。
【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。
⑻用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是()和()。
【解答】O(1),O(n)【分析】在带头指针的循环链表中,出队即是删除开始结点,这只需修改相应指针;入队即是在终端结点的后面插入一个结点,这需要从头指针开始查找终端结点的地址。
⑼串是一种特殊的线性表,其特殊性体现在()。
第3章 栈与队列习题参考答案
![第3章 栈与队列习题参考答案](https://img.taocdn.com/s3/m/5e82e4374431b90d6c85c7ba.png)
习题三参考答案备注: 红色字体标明的是与书本内容有改动的内容。
一、选择题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 )。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
个排列),则在输出序列中不可能出现这样的情形:存在着i<j<k使pj <pk<Pi。
解:这个问题和3.1题比较相似。因为输入序列是从小到大排列的,
则可以理解为通过输入序列PjPkPi可以得到输出序列PiPjPk,显然通过序列123是无
} DestoryStack(s);
}
3.11
解:栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。
队列也是一种运算受限的线性表,
端进行删除。
3.12
void mai n()
{
Queue Q;
Ini tQueue(Q);
char x=‘e', y=‘c';
EnQueue(Q,‘h');
Push(S,
Pop(S,x);
Push(S,
char x,y;
a');Push(S,y); t');Push(S,x); s');
whiIe(!StackEmpty(S)){Pop(S,y); printf(y);}printf(x);
}
解:stack
3.4
(1)status aIgo1(Stack S)
{
test(sum); sum+=x;
}
cout<<sum;
}
解:
void test(i nt &sum)
{
Stack s;
In itStack(s);
int x;
do{
cin> >x; Push(s,x);
}while(x>0);
while(!StackEmpty(s)){
Pop(s,x);
sum+=x; cout<<sum<<e ndl;
int i;
i = n;
while(i>1) cout<<i--;
}
解:
void ditu i(int j)
{
if(j>1){
cout<<j;
ditui(j-1);
} return;
}
3.10
void test(i nt &sum)
{
int x;
cin> >x;
if(x==0) sum=0; else
12
#+
I
EAF#
PUSH(OPND,E)
13
#+
I E
AF#
PUSH(OPTR,a)
14
#+A
I E
F#
PUSH(OPND,F)
15
#+A
I E F
#
Operate(E,A,F)
16
#+
I J
#
Operate(I,+,J)
17
#
K
#
RETURN
3.8
解:
3.9
void ditu i(int n)
{
{
int i,n,A[255];
n=0;
whiIe(!StackEmpty(S)){n++; Pop(S,A[n]);}for(i=1;i<=n;i++) Push(S,A[i]);
}
(2)status aIgo2(Stack S,int e)
{
Stack T; int d; InitStack(T);
法得到312的,参见3.1题。所以不可能存在着i<j<k使PjVPkVpj。
3.7按照四则运算加、减、乘、除和幕运算(f)优先关系的惯例,并仿照教科书3.2节例
3-2的格式,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程:
A-BXC/D+Ef F
解:BC=G G/D=H A-H=I EAF=J l+J=K
6
#-*
A B C
/D+EAF#
Operate(B,*,C)
7
#-
A G
/D+EAF#
PUSHQPTR,/)
8
#-/
A G
D+EAF#
PUSH(OPND,D)
9
#-/
A G D
+EAF#
Operate(G,/,D)
10
#-
A H
+EAF#
Operate(A,-,H)
11
#
I
+EAF#
PUSH(OPTR,+)
3.1
(1)
(2)
作序列)。
解:(1) 123 231 321 213 132
(2)
3.2
解:线性表是具有相同特性的数据元素的一个有限序列。 栈是限定仅在表尾进行插入或 删除操作的线性表。
3.3
void main()
{
Stack S;
x=‘c';y=
‘k';
Push(S,x);
Push(S,
Pop(S,x);
假定前n个操作都相同,从第n+1个操作开始,为序列不同的起始操作点情况完全相同,假设此时栈顶元素均
为a。
第n+1个操作不同,不妨T1的第n+1个操作为S, T2的第n+1个操作为X。T1为入栈 操作,假设将b压栈,则T1的输出顺序一定是先b后a;而T2将a退栈,则其输出顺序一 定是先a后b。由于T1的输出为……ba……,而T2的输出顺序为……ab……,说明两个不 同的合法栈操作序列的输出元素的序列一定不同。
EnQueue(Q,‘r');
En Queue(Q, y);
DeQueue(Q, x);
En Queue(Q, x);
DeQueue(Q, x);
EnQueue(Q,‘a');
While(!QueueEmpty(Q)) {
DeQueue(Q,y); cout<<y;
}
cout<<x;
}
解:char
3.13
whiIe(!StackEmpty(S)){ Pop(S,d);
if(d!=e) Push(T,d);
}
whiIe(!StackEmpty(T)){
Pop(T,d);
Push(S,d);
}
}
解:(1)栈中的数据元素逆置(2)如果栈中存在元素e,将其从栈中清除
3.5假设以S和X分别表示入栈和出栈的操作,则初态和终态均为空栈的入栈和出栈的操 作序列可以表示为仅由S和X组成的序列。称可以操作的序列为合法序列(例如,SXSX为
步骤
OPTR栈
OPND栈
输入字符
主要操作
1
#
A-B*C/D+EAF#
PUSH(OPND,A)
2
#
A
:B*C/D+EAF#
PUSHQPTR,-)
3
#-
A
B *C/D+EAF#
PUSH(OPND,B)
4
#-
A B
*C/D+EAF#
PUSHQPTR,*)
5
#-*
A B
C/D+EAF#
PUSH(OPND,C)
合法序列,SXXS为非法序列)。试给出区分给定序列为合法序列或非法序列的一般准则,并
证明:两个不同的合法(栈操作)序列(对同一输入序列)不可能得到相同的输出元素(注 意:在此指的是兀素实体,而不是值)序列。
解:任何前n个序列中S的个数一定大于X的个数。
设两个合法序列为:
T仁S……X……S……
T2=S……X……X••…
void algo3(Queue &Q)
{
Stack S;
int d;