ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:302.44KB ,
资源ID:8528662      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8528662.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第3章栈和队列讲解.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第3章栈和队列讲解.docx

1、第3章栈和队列讲解数据结构第3章 栈和队列 共85题一、单选1.(1)分题目ID号:10705题目难度:容易设对一组数据的处理具有“后进先出”的特点,则应采用的数据结构是【1】A.队列B.栈C.顺序表D.二叉树题目答案:B2.(1)分题目ID号:10706题目难度:容易若进栈序列为3、5、7、9,进栈和出栈可穿插进行,则不可能的出栈序列是【1】A.7,5,3,9B.9,5,7,3C.9,7,5,3D.7,5,9,3题目答案:B3.(1)分题目ID号:10707题目难度:较难设用一维数组Am存储栈,令Am-1为栈底,t指示当前栈顶的位置。如果栈不空,则出栈时应使【1】A.t=t+lB.t=t-1

2、C.t=m-1D.不改变t题目答案:A4.(1)分题目ID号:10708题目难度:容易设用一维数组Am存储栈,令A0为栈底,top指示当前钱顶的位置,当把栈清空时所要执行的操作是【1】A.top-B.top=0C.top=-1D.top=m-1题目答案:C5.(1)分题目ID号:10709题目难度:容易设栈s的初始状态为空,如果进栈序列为1、2、3、4、5、6,出栈序列为3、2、5、6、4、1,则s的容量至少是【1】A.6B.4C.2D.3题目答案:D6.(1)分题目ID号:10710题目难度:容易设栈s最多能容纳4个元素,现有A、B、C、D、E、F六个元素按顺序进栈,以下可能的出栈序列是【1

3、】A.E、D、C、B、A、FB.B、C、E、F、A、DC.C、B、E、D、A、FD.A、D、F、E、B、C题目答案:C7.(1)分题目ID号:10711题目难度:容易链式栈与顺序栈相比,一个比较明显的优点是【1】A.插入操作更加方便B.通常不会出现栈满的情况C.不会出现栈空的情况D.删除操作更加方便题目答案:B8.(1)分题目ID号:10712题目难度:容易在完成出栈操作时,【1】A.必须判断栈是否满B.要判断栈元素的类型C.必须判断栈是否空D.不必做任何判断题目答案:C9.(1)分题目ID号:10713题目难度:容易已知栈的入栈序列是1、2、3、n,出栈序列是e1、e2、en。若e1=n,则

4、ei为【1】A.iB.n-i+1C.n-iD.不能确定题目答案:B10.(1)分题目ID号:10714题目难度:容易在解决计算机主机与打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,打印机则从该缓冲区取出数据打印,该缓冲区应该是一个【1】结构。A.栈B.队列C.线性表D.数组题目答案:B11.(1)分题目ID号:10715题目难度:容易【1】不是队的基本运算。A.向队尾插入一个元素B.读队头元素C.删除队中第i个元素D.判队是否为空题目答案:C12.(1)分题目ID号:10716题目难度:容易当以顺序方式存储队列时,解决“假溢出”较为有效的方法是采用

5、【1】A.顺序队列B.链式队列C.顺序循环队列D.三种都可以题目答案:C13.(1)分题目ID号:10717题目难度:容易设一维数组Qm用于存放循环队列中的元素,同时用f指示当前队头元素的位置,r指示当前队尾元素的下一个位置。假定队中元素个数总小于m,则计算队列中元素个数的公式为【1】A.(m+r-f)mB.r-fC.m-(f-r)D.(m+(f-r)m题目答案:A题目分析:循环队列是解决假溢出的问题,通常把一维数组看成首尾相接。在循环意义下的求元素个数的运算可以利用求模运算。14.(1)分题目ID号:10718题目难度:容易若用一个大小为10的一维数组存储顺序循环队列,且当前rear和fro

6、nt的值分别为4和8,当从队列中删除3个元素再加入2个元素后,rear和front的值分别是【1】A.无法完成要求的操作B.6和lC.7和0D.6和11题目答案:B题目分析:循环队列是解决假溢出的问题,通常把一维数组看成首尾相接。在循环意义下的加1运算通常用求模运算来实现。所以入队和出队时的操作分别为:rear=(rear+1)%m,front=(front+1)%m。15.(1)分题目ID号:10719题目难度:容易栈和队列都是运算受限的线性表,它们的共同点是【1】A.只允许在端点处插入和删除元素B.元素都是后进先出C.元素都是先进先出D.必须采用顺序存储结构题目答案:A题目分析:栈和队列都

7、是运算受限的线性表,只允许在表端点处进行操作。16.(1)分题目ID号:11091题目难度:容易在一个链式队列中,假设front和rear分别为队头和队尾指针,则插入s所指结点的操作为【1】A.rear-next=s;rear=s;B.front-next=s;front=s;C.s-next=front;front=s;D.s-next=rear;rear=s;题目答案:A题目分析:队列是运算受限的线性表(FIFO),插入元素只能插在队尾,所以需修改队尾指针。17.(1)分题目ID号:11096题目难度:容易用链接方式存储的队列,在进行删除运算时【1】A.仅修改头指针B.头、尾指针可能都要修

8、改C.头、尾指针都要修改D.仅修改尾指针题目答案:B题目分析:若队列中的元素多于一个,删除队列中的队尾元素,只需修改队尾指针;若队列中只有一个元素,删除该元素后,队头队尾指针都需要修改。18.(1)分题目ID号:11097题目难度:容易设计一个判别表达式中左,右括号是否配对出现的算法,采用【1】数据结构最佳。A.线性表的顺序存储结构B.队列C.线性表的链式存储结构D.栈题目答案:D19.(1)分题目ID号:11099题目难度:容易表达式a*(b+c)-d的后缀表达式是【1】A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd题目答案:B20.(1)分题目ID号:11228题

9、目难度:容易已知队列(4,41,5,7,1826,15),第一个进入队列的元素是4,则第五个出队列的元素是【1】A.5B.41C.18D.7题目答案:C21.(1)分题目ID号:11229题目难度:容易对于顺序存储的循环队列,存储空间大小为N,头指针为F,尾指针为R,队列中元素的个数应为【1】A.R-FB.N+R-FC.(RF十1)ND.(N+R-F)%N题目答案:D22.(1)分题目ID号:11230题目难度:容易一个队列的进队列顺序是1,2,3,4,则出队列顺序为【1】A.4,3,2,1B.2,4,3,1C.1,2,3,4D.3,2,1,4题目答案:C23.(1)分题目ID号:11231题

10、目难度:容易下列关于栈的叙述中正确的是【1】A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表题目答案:D24.(1)分题目ID号:11232题目难度:容易设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈S的容量至少应该是【1】A.6B.4C.3D.2题目答案:C题目分析:根据栈的性质(LIFO)得,e2出栈前,栈中存有e1和e2两个元素,e4出栈前,栈中存有e1、e3和e4三个元素,e4和e3出栈以后,e5和e6入栈,栈中同样存在

11、e1、e5和e6三个元素,然后三个元素依次出栈,所以栈的容量至少应该为3。25.(1)分题目ID号:11651题目难度:容易若一个栈以向量V1.n存储,初始栈顶指针top为n+1,则下面x进栈的正确操作是【1】A.top=top+1;Vtop=xB.Vtop=x;top=top+1C.top=top-1;Vtop=xD.Vtop=x;top=top-1题目答案:C题目分析:栈式运算受限的线性表,只允许在栈顶进行插入和删除操作。本题中栈顶指针为n+1,该数组将栈顶放在了下标大的一端,所以在进行入栈操作时top指针应该进行减一操作。通常元素进栈的操作为:先移动栈顶指针后存入元素。26.(1)分题目

12、ID号:11652题目难度:容易一个栈的输入序列为123n,若输出序列的第一个元素是n,输出第i(1in)个元素是【1】A.不确定B.n-i+1C.iD.n-i题目答案:B题目分析:【解析】根据栈的性质(LIFO),若输出的第一个元素是n,则表明所有的元素已经入栈,则出栈顺序为n,n-1,3,2,1。27.(1)分题目ID号:11653题目难度:容易如果我们用数组A1.100来实现一个大小为100的栈,并且用变量top来指示栈顶,top的初值为0,表示栈空。请问在top为100时,再进行入栈操作,会产生【1】A.正常动作B.溢出C.下溢D.同步题目答案:B题目分析:当top为100时,表示栈已

13、经满了,此时再进行入栈操作,则会造成溢出。28.(1)分题目ID号:11654题目难度:容易栈在【1】中应用。A.递归调用B.子程序调用C.表达式求值D.A,题目答案:D29.(1)分题目ID号:11655题目难度:容易若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?【1】A.1和5B.2和4C.4和2D.5和1题目答案:B题目分析:循环队列是解决假溢出的问题,通常把一维数组看成首尾相接。在循环意义下的加1运算通常用求模运算来实现。所以入队和出队时的操作分别为:rear=(rear+

14、1)%m,front=(front+1)%m。30.(1)分题目ID号:11656题目难度:容易栈和队列的共同点是【1】A.都是先进先出B.都是先进后出C.只允许在端点处插入和删除元素D.没有共同点题目答案:C题目分析:栈和队列都是运算受限的线性表,只允许在表端点处进行操作。31.(1)分题目ID号:11657题目难度:容易判定一个栈S(元素个数最多为MAXSIZE)为空和满的条件分别为【1】A.S-top!=-1S-top!=MAXSIZE-1B.S-top=-1S-top=MAXSIZE-1C.S-top=-1S-top!=MAXSIZE-1D.S-top!=-1S-top=MAXSIZE

15、-1题目答案:B二、多选1.(1)分题目ID号:11227题目难度:容易已知元素(8,25,14,87,51,90,6,19,20)。这些元素以怎样的顺序进入栈;才能使出栈的顺序满足:8在51前面;90在87后面;20在14后面;25在6前面;19在90后面【1】A.20,6,8,51,90,25,14,19,87B.51,6,19,20,14,8,87,90,25C.19,20,90,8,6,25,51,14,87D.6,25,51,8,20,19,90,87,14题目答案:BCD三、是非1.(1)分题目ID号:11233题目难度:容易【1】栈和队列逻辑上都是线性表。题目答案:T2.(1)分

16、题目ID号:11234题目难度:容易【1】采用循环链表作为存储结构的队列就是循环队列。题目答案:F3.(1)分题目ID号:11235题目难度:容易【1】栈和队列都是顺序存取的线性表,但它们对存取位置的限制不同。题目答案:T4.(1)分题目ID号:11236题目难度:容易【1】在栈中只能插入数据。题目答案:F5.(1)分题目ID号:11237题目难度:容易【1】在栈满情况下不能做进栈运算,否则产生“上溢”。题目答案:T6.(1)分题目ID号:11238题目难度:容易【1】判定一个队列q(最多元素为m)为空的条件是(q一rear十1)mq一front.题目答案:F四、填空1.(3)分题目ID号:1

17、0746题目难度:容易一个理发店有两名理发师,一名理发师专为年纪最大的顾客服务,另一名理发师为进入理发店时间最长的顾客服务,进入理发店的顾客根据到达的时间先后顺序都排人一个队列。假设用程序来模拟理发店顾客队列的变化情况,该顾客队列在逻辑上可视为哪种数据结构?【1】要存储相关信息应采用哪一种存储结构?【2】为什么?【3】题目答案:线性表】链式存储结构】因为顾客出队没有限定在一端;新来的顾客要加入队列,接受理发师服务的顾客要离开队列,对顾客队列这个线性表来说,需要经常的插入和删除操作。】2.(2)分题目ID号:10782题目难度:容易在以顺序方式存储队列时,会出现“假溢出”现象,请解释这一现象【1

18、】,并说明解决“假溢出”的方法及其原理。【2】题目答案:“假溢出”是指存储队列的空间中还有空余,但不能进行入队操作,它是由队列的操作方式决定的。】解决“假溢出”的方法有:建立一个足够大的存储空间,但这样会造成空间的浪费。采用循环队列方式。把存储队列的一维空间看成是一个首尾相接的圆环,这样就可以实现对由于元素出队而空出来的空间的循环使用。采用平移元素的方法。每当出现“假溢出”时,将队列中所有元素平移,使当前队头元素位于数组的最前端,并修改队头和队尾指示器。此方法效率很低。】3.(5)分题目ID号:10785题目难度:较难有n个人排成一排,每个人的编号为i(0in),现让这n个人从左到右1、2、l

19、、2、报数,凡报“1”的人出列,报“2”的人立即站到队的最右端,此过程反复进行,直到n个人都已出列。设已知n个人原来在队列中的顺序,以下程序可求出他们出列的顺序。例如,设n6,韧始顺序为1、2、3、4、5、6,则出列顺序为1、3、5、2、6、4。算法说明:此问题可利用队列结构处理。设一维数组Pn存放循环队列,f和r分别为队列的队头和队尾指示器,首先让n个人的初始序号依次入队,然后反复执行以下操作,直到队列为空。输出队头元素,并删除之:若刚刚离队的元素值在当时的队列中最大,则记录下当前队列中最大元素值,否则将队头元素插入到队尾。程序如下:#includeiostreamusingstd:cout

20、;usingstd:endl;constintN20;intmain()intpN;intf0,r0,qmN;for(inti1;iN;i十十)p【1】i;r=(r十1)N;dointt=pf;coutt”;f【2】;if(tqm)qm-;else【3】pf;r【4】;f【5】;while(f!r);coutendl:return0;题目答案:r】(f+1)%N】pr】(r+1)N】(f+1)N】4.(5)分题目ID号:10791题目难度:较难以下函数用于检验一个表达式中括号是否匹配。如果匹配返回1,否则返回0。设表达式中只使用了括号()和方括号,表达式在一维数组exp中。算法说明:为检查表达

21、式中括号的匹配情况,可设置一个栈s。从左到右扫描表达式,若当前字符为左括号,则将其压入栈s中。若当前字符为右括号,则检查它是否与栈顶的左括号相匹配。若相匹配,则删去这一对括号;不相匹配,则表示表达式中括号不匹配。若扫描完表达式时栈为空,则说明表达式中括号是匹配的,否则是不匹配的。函数中使用变量flag作为括号匹配的标志,flag为1表示匹配,flag为0表示不匹配。程序如下:constintMaxSize=100;intmatching(charexpMaxSize)charsMaxSize;inttop=-1;/s作为顺序栈,top为栈顶指示器intflag,i;flag=1;i=0;whi

22、le(expi&flag)switch(expi)case(:case:【1】=expi;break;case):if(【2】)top-;elseflag=0;break;case:if(【3】)top-;elseflag=0;break;【4】if(【5】)return1;elsereturn0;题目答案:s+top】top!=-1&stop=(】top!=-1&stop=】i+】flag&top=-1】5.(3)分题目ID号:10796题目难度:较难编写一个函数,利用队列和栈的基本运算将指定队列中的元素进行逆转。算法说明:利用一个临时栈tempst,将指定队列que中所有元素出队并入栈到t

23、empst,然后再将栈tempst中的所有元素出栈并入队到que,此时,队列que中的元素已发生逆转。在以下函数中使用了STL的容器适配器定义队列和栈。程序如下:#include#includeusingnamespacestd;templatevoidreverse_que(quedu&que)Tx;stacktempst;while(【1】)x=que.front();/取队头元素到xtempst.push(x);/x入栈【2】;while(!tempst.empty()/当栈不为空时x=tempst.top();/取栈顶元素到x【3】;tempst.pop();/出栈题目答案:!que.empty()】que.pop()】que.push(x)】6.(1)分题目ID号:11104题目难度:容易循环队列的引入,目的是为了克服【1】题目答案:假溢出时大量移动数据元素】7.(1)分题目ID号:11105

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1