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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

第3章栈和队列1.docx

1、第3章 栈和队列1第3章 栈和队列一 选择题1. 对于栈操作数据的原则是B. 后进先出2. 在作进栈运算时,应先判别栈是否(满 ),在作退栈运算时应先判别栈是否(空 )。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为( n )。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的 (栈底 )分别设在这片内存空间的两端,这样,当( 两个栈的栈顶在栈空间的某一位置相遇 )时,才产生上溢。 3. 一个栈的输入序列为123n,若输出序列的第一个元素是n,输出第i(1=i0) ? x* f(x-1):2); int i ; i =f(f(1);19.

2、表达式a*(b+c)-d的后缀表达式是(abc+*d-)。20. 表达式3* 2(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为( 3,2,8;(*(- ),其中为乘幂 。21. 设计一个判别表达式中左,右括号是否配对出现的算法,采用( 栈 )数据结构最佳。22. 用链接方式存储的队列,在进行删除运算时(头、尾指针可能都要修改 )。23. 用不带头结点的单链表存储队列时,其队头指针指向队头结点,其队尾指针指向队尾结点,则在进行删除操作时( 队头,队尾指针都可能要修改)。24. 递归过程或函数调用时,处理参数及返回地址,要用一种称为( 栈 )的数据结构。25. 假设以数组Am存

3、放循环队列的元素,其头尾指针分别为front和rear,则当前队列中的元素个数为( (rear-front+m)%m )。26. 循环队列A0.m-1存放其元素值,用front和rear分别表示队头和队尾,则当前队列中的元素数是(rear-front+m)%m )。27. 循环队列存储在数组A0.m中,则入队时的操作为(rear=(rear+1)mod(m+1))。28. 若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少?(2和4) 29. 已知输入序列为abcd 经过输出受限的双向队

4、列后能得到的输出序列有( cadb和bdac )。30. 若以1234作为双端队列的输入序列,则既不能由输入受限的双端队列得到,也不能由输出受限的双端队列得到的输出序列是(4231 )。 31. 最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是 (rear=front)。32. 栈和队列的共同点是(只允许在端点处插入和删除元素)。33. 栈的特点是(后进先出),队列的特点是(先进先出),栈和队列都是(限制存取点的线性结构)。若进栈序列为1,2,3,4 则(4,2,3,1)不可能是一个出栈序列(不一定全部进栈后再出栈);若进队列的序列为1,2,3,4 则(1,2,3,

5、4)是一个出队列序列。34. 栈和队都是(限制存取点的线性结构)35. 设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素出栈后即进队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是(3)。36. 用单链表表示的链式队列的队头在链表的(链头)位置。37. 依次读入数据元素序列a,b,c,d,e,f,g进栈,每进一个元素,机器可要求下一个元素进栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下哪些序列? Ad ,e,c,f,b,g,a D. c,d,b,e,f,a,g二 判断题1. 尾递归的消除就不需用栈2. 栈是实

6、现过程和函数等子程序所必需的结构。3. 两个栈共用静态存储空间,对头使用也存在空间溢出问题。4两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。6. 有n个数顺序(依次)进栈,出栈序列有Cn种,Cn=1/(n+1)*(2n)!/(n!)*(n!)。7. 栈与队列是一种特殊操作的线性表。8. 若输入序列为1,2,3,4,5,6,则通过一个栈可以输出序列3,2,5,6,4,1. 9. 栈和队列都是限制存取点的线性结构。11. 任何一个递归过程都可以转换成非递归过程。15. 队列逻辑上是一个下端和上端既能增加又能减少的线性表。16. 循环队列通

7、常用指针来实现队列的头尾相接。( x)17. 循环队列也存在空间溢出问题。19. 栈和队列都是线性表,只是在插入和删除时受到了一些限制。20. 栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。三 填空题 1栈是_操作受限(或限定仅在表尾进行插入和删除操作)_的线性表,其运算遵循_后进先出_的原则。2_栈_是限定仅在表尾进行插入或删除操作的线性表。3. 一个栈的输入序列是:1,2,3则不可能的栈输出序列是_312_。4. 设有一个空栈,栈顶指针为1000H(十六进制),现有输入序列为1,2,3,4,5,经过PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH之后,输出序列是_

8、23_,而栈顶指针值是_100CH。设栈为顺序栈,每个元素占4个字节。5. 当两个栈共享一存储区时,栈利用一维数组stack(1,n)表示,两栈顶指针为top1与top2,则当栈1空时,top1为_0_,栈2空时 ,top2为_n+1_,栈满时为_ top1+1=top2_。6两个栈共享空间时栈满的条件_两栈顶指针值相减的绝对值为1(或两栈顶指针相邻)。_。7在作进栈运算时应先判别栈是否_满_;在作退栈运算时应先判别栈是否_空_;当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为_n_。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的空间时,应将两栈的_栈底_分别

9、设在内存空间的两端,这样只有当_两栈顶指针相邻(即值之差的绝对值为1_时才产生溢出。8. 多个栈共存时,最好用_链式存储结构_作为存储结构。9用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为_ SSSS_。10. 顺序栈用data1.n存储数据,栈顶指针是top,则值为x的元素入栈的操作是_ data+top=x _。11表达式23+(12*3-2)/4+34*5/7)+108/9的后缀表达式是_23.12.3*2-4/34.5*7/+108.9/+_12. 循环队列的引入,目的是为了克服_假溢出时大量移动数据元素_。 13用下标0

10、开始的N元数组实现循环队列时,为实现下标变量M加1后在数组有效下标范围内循环,可采用的表达式是: M= _(M+1)% N _14_队列_又称作先进先出表。15. 队列的特点是_先进先出_。16队列是限制插入只能在表的一端,而删除在表的另一端进行的线性表,其特点是_先进先出_。17. 已知链队列的头尾指针分别是f和r,则将值x入队的操作序列是_ s=(LinkedList)malloc(sizeof(LNode); s-data=x;s-next=r-next;r-next=s;r=s;_。18区分循环队列的满与空,只有两种方法,它们是_牺牲一个存储单元_和_设标记_。19设循环队列用数组A1

11、.M表示,队首、队尾指针分别是FRONT和TAIL,判定队满的条件为_ TAIL+1)MOD M=FRONT _。20. 设循环队列存放在向量sq.data0:M中,则队头指针sq.front在循环意义下的出队操作可表示为_ sq.front=(sq.front+1)%(M+1)_,若用牺牲一个单元的办法来区分队满和队空(设队尾指针sq.rear),则队满的条件为_ return(sq.data(sq.front);(sq.rear+1)%(M+1)=sq.front; _。21表达式求值是_栈_应用的一个典型例子。22循环队列用数组A0.m-1存放其元素值,已知其头尾指针分别是front和r

12、ear ,则当前队列的元素个数是_(rear-front+m)% m _。23设Q0.N-1为循环队列,其头、尾指针分别为P和R,则队Q中当前所含元素个数为_(RP+N)%N_。24完善下面算法。【中山大学 1998 四、2(6分)】后缀表达式求值,表达式13/25+61的后缀表达式格式为: 13, 25/61, +FUNC compute(a):real; 后缀表达式存储在数组a1.m中。BEGIN setnull(s);i:=1;ch:= (1)_; WHILE ch DO BEGIN CASE ch OF 0.9: x:=0; WHILE ch,DO BEGIN x:=x*10+ord(

13、ch)-ord(0); i:=i+1;ch:= (2)_; END+: x:=pop(s)+pop(s);-: x:=pop(s);x:=pop(s)-x;*: x:=pop(s)*pop(s);/: x:=pop(s);x:=pop(s)/x;ENDCASEpush(s,x);i:=i+1;ch:=ai;END;comput:= (3)_;END;25. 算术表达式求值的流程,其中OPTR为算术符栈,OPND为操作数栈,precede(oper1,oper2)是比较运算符优先级别的函数,operate(opnd1,oper,opnd2)为两操作数的运算结果函数。(#表示运算起始和终止符号)【

14、西北工业大学 1999 六、2 (7分)】 FUNCTION exp_reduced:operandtype; INITSTACK(OPTR);PUSH(OPTR#);INITSTACK(OPND);read(w); WHILE NOT(w=#) AND (GETTOP(OPTR)=#) DO IF NOT w in op THEN PUSH(OPND,w); ELSE CASE precede(GETTOP(OPTR),w)OF :theta:=POP(OPTR);b:=POP(OPND);a:=POP(OPND);(3)_; ENDC;RETURN(GETTOP(OPND);ENDF; 2

15、6根据需要,用适当的语句填入下面算法的_中:问题:设有n件物品,重量分别为w1,w2,w3,wn和一个能装载总重量为T的背包。能否从n件物品中选择若干件恰好使它们的重量之和等于T。若能,则背包问题有解,否则无解。解此问题的算法如下: FUNCTION kanp_stack(VAR stack,w:ARRAY1.n OF real; VAR top:integer; T:real):boolean; w1:n 存放n件物品的重量,依次从中取出物品放入背包中,检查背包重量,若不超过T,则装入,否则弃之,取下一个物品试之。若有解则返回函数值true,否则返回falseBEGIN top:=0; i:

16、=1; i指示待选物品 WHILE (1)_ AND(2)_DO IF (3)_ OR (4)_ AND (i0) THEN i:=(7)_;取出栈顶物品 top:= (8)_ ;T:= (9)_ ; 恢复T值 i:=i+1 准备挑选下一件物品 ; ; RETURN(10)_) 背包无解END;【北京邮电大学 1996 四(10分)】四 应用题1. 名词解释:栈。栈是只准在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。最后插入的元素最先删除,故栈也称后进先出(LIFO)表。2. 名词解释:队列 队列是允许在一端插入而在另一端删除的线性表,允许插入的一端叫队尾,允许删

17、除的一端叫队头。最先插入队的元素最先离开(删除),故队列也常称先进先出(FIFO)表。3. 什么是循环队列?4. 假设以S和X分别表示入栈和出栈操作,则对初态和终态均为空的栈操作可由S和X组成的序列表示(如SXSX)。(1)试指出判别给定序列是否合法的一般规则。通常有两条规则。第一是给定序列中S的个数和X的个数相等;第二是从给定序列的开始,到给定序列中的任一位置,S的个数要大于或等于X的个数。(2)两个不同合法序列(对同一输入序列)能否得到相同的输出元素序列?如能得到,请举列说明。可以得到相同的输出元素序列。例如,输入元素为A,B,C,则两个输入的合法序列ABC和BAC均可得到输出元素序列AB

18、C。对于合法序列ABC,我们使用本题约定的SSS操作序列;对于合法序列BAC,我们使用SSS操作序列。5. 有5 个元素,其入栈次序为:A,B,C,D,E,在各种可能的出栈次序中,以元素C,D最先出栈(即C第一个且D第二个出栈)的次序有哪几个? 6. 如果输入序列为1 2 3 4 5 6,试问能否通过栈结构得到以下两个序列:4 3 5 6 1 2和1 3 5 4 2 6;请说明为什么不能或如何才能得到。【武汉交通科技大学 1996 二、3 (3分)】7. 若元素的进栈序列为:A、B、C、D、E,运用栈操作,能否得到出栈序列B、C、A、E、D和D、B、A、C、E?为什么?【北京科技大学 1998

19、 一、2】8. 设输入序列为a,b,c,d,试写出借助一个栈可得到的两个输出序列和两个不能得到的输出序列。【北京科技大学 2001 一、4(2分)】9. 设输入序列为2,3,4,5,6,利用一个栈能得到序列2,5,3,4,6吗?栈可以用单链表实现吗?【山东师范大学 1996 五、4(2分)】10. 试证明:若借助栈由输入序列1,2,n得到输出序列为P1,P2,Pn(它是输入序列的一个排列),则在输出序列中不可能出现这样的情形:存在着ijk,使PjPk0 THEN BEGIN p(w-1); writeln(w);输出W p(w-1)END; END;【西北大学 2001 三、7】17. 用一个

20、数组S(设大小为MAX)作为两个堆栈的共享空间。请说明共享方法,栈满/栈空的判断条件,并用C或PASCAL设计公用的入栈操作push(i,x),其中i为0或1,用于表示栈号,x为入栈值。【浙江大学 1998 五、2 (7分)】18. 简述下列程序段的功能。PROC algo(VAR S : stack; k:integer);VAR T: stack; temp: integer; WHILE NOT empty(S) DO temp:=POP(S); IF tempk THEN PUSH(T,temp); WHILE NOT empty(T) DO temp:=POP(T);PUSH(S,t

21、emp);【山东科技大学 2002 一、1(4分)】19. 用栈实现将中缀表达式8-(3+5)*(5-6/2)转换成后缀表达式,画出栈的变化过程图。20. 在表达式中,有的运算符要求从右到左计算,如A*B*C的计算次序应为(A*(B*C),这在由中缀生成后缀的算法中是怎样实现的?(以*为例说明)21. 有递归算法如下: FUNCTION sum (n:integer):intger;BEGIN IF n=0 THEN sum:=0 ELSE BEGIN read(x);sum:=sum(n-1)+x END;END; 设初值n=4,读入 x=4,9,6,2 问:(1) 若x为局部变量时;该函数

22、递归结束后返回调用程序的sum=? 并画出在递归过程中栈状态的变化过程; (2) 若x为全程变量递归结束时返回调用程序的sum=?22. 画出对算术表达式A-B*C/D-EF求值时操作数栈和运算符栈的变化过程。23. 计算算术表达式的值时,可用两个栈作辅助工具。对于给出的一个表达式,从左向右扫描它的字符,并将操作数放入栈S1中,运算符放入栈S2中,但每次扫描到运算符时,要把它同S2的栈顶运算符进行优先级比较,当扫描到的运算符的优先级不高于栈顶运算符的优先级时,取出栈S1的栈顶和次栈顶的两个元素,以及栈S2的栈顶运算符进行运算将结果放入栈S1中(得到的结果依次用T1、T2等表示)。为方便比较,假

23、设栈S2的初始栈顶为(运算符的优先级低于加、减、乘、除中任何一种运算)。现假设要计算表达式: A-B*C/D+E/F。写出栈S1和S2的变化过程。【山东科技大学 2001 一、4 (7分)】24. 有字符串次序为3*-y-a/y2,利用栈,给出将次序改为3y-*ay2/-的操作步骤。(可用X代表扫描该字符串过程中顺序取一个字符进栈的操作,用S代表从栈中取出一个字符加入到新字符串尾的出栈操作。例如,ABC变为BCA的操作步骤为XXSXSS)【东北大学 2001 一、4 ( 4分)】25. 内存中一片连续空间(不妨假设地址从1到m)提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈

24、,仅当这部分空间全满时才发生上溢。【东北大学 2000 一、1 (3分)】26. 将两个栈存入数组V1.m应如何安排最好?这时栈空、栈满的条件是什么?【东南大学1998一、5】27. 在一个算法中需要建立多个堆栈时可以选用下列三种方案之一,试问:这三种方案之间相比较各有什么优缺点?(1)分别用多个顺序存储空间建立多个独立的堆栈;(2)多个堆栈共享一个顺序存储空间;(3)分别建立多个独立的链接堆栈。【北京航空航天大学 1998 一、6(4分)】28在某程序中,有两个栈共享一个一维数组空间SPACEN、SPACE0、SPACEN-1 分别是两个栈的栈底。(1)对栈1、栈2,试分别写出(元素x)入栈

25、的主要语句和出栈的主要语句。(2)对栈1、栈2,试分别写出栈满、栈空的条件。【北京理工大学 1999 二、2(8分)】29. 简述顺序存储队列的假溢出的避免方法及队列满和空的条件。【山东大学 2000 一、2 (4分)】30. 举例说明顺序队的“假溢出”现象,并给出解决方案。【福州大学 1998 三、5 (6分)】31. 怎样判定循环队列的空和满?【燕山大学 1999 二、3(4分)】32. 简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队首指针与队尾指针的值。 【南京航空航天大学 1995 七(5分)】33. 利用两个栈sl,s2模拟一个队列时,如何用栈的运算实现队列的插入

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

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