首页 栈和队列练习题

栈和队列练习题

举报
开通vip

栈和队列练习题选择题: 1、设abcdef 以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为(  D  ) 。 A.fedcba      B. bcafed        C. dcefba        D. cabdef 2、若已知一个栈的入栈序列是 1,2,3,…,n,其输出序列为 p1,p2,p3,…,pN,若pN 是 n,则 pi 是(  D )。 A. i            B. n-i        C. n-i+1      D. 不确定 3、设计一个判别表达式中左,右括号是否配...

栈和队列练习题
选择题: 1、设abcdef 以所给的次序进栈,若在进栈操作时,允许退栈操作,则下面得不到的序列为(  D  ) 。 A.fedcba      B. bcafed        C. dcefba        D. cabdef 2、若已知一个栈的入栈序列是 1,2,3,…,n,其输出序列为 p1,p2,p3,…,pN,若pN 是 n,则 pi 是(  D )。 A. i            B. n-i        C. n-i+1      D. 不确定 3、设计一个判别表达式中左,右括号是否配对出现的算法,采用( D  )数据结构最佳。 A.线性表的顺序存储结构      B. 队列    C. 线性表的链式存储结构      D. 栈 4、用链接方式存储的队列,在进行删除运算时(  D  ) 。 A. 仅修改头指针  B. 仅修改尾指针    C. 头、尾指针都要修改    D. 头、尾指针可能都要修改 5、递归过程或函数调用时,处理参数及返回地址,要用一种称为(  C )的数据结构。 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)%m 7、若用一个大小为 6的数组来实现循环队列,且当前 rear和 front 的值分别为 0和 3,当从队列中删除一个元素,再加入两个元素后,rear 和 front 的值分别为多少?( B ) A. 1 和 5        B. 2 和4          C. 4 和2        D. 5 和1  8、最大容量为 n 的循环队列,队尾指针是 rear,队头是 front,则队空的条件是  (  A  ) 。 A. (rear+1) MOD n=front                  B. rear=front C.rear+1=front                          D. (rear-l) MOD n=front 9、栈和队列的共同点是(  C  ) 。 A. 都是先进先出                        B. 都是先进后出    C. 只允许在端点处插入和删除元素        D. 没有共同点 10、设栈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)递归程序的优、缺点是什么? (3) 递归程序在执行时,应借助于什么来完成? (4) 递归程序的入口语句、出口语句一般用什么语句实现? 算法题: 1、已知数组a[],有n个元素,用递归实现以下算法: 求和,求最大值,求平均数。 判断是否为一个递增数组。 大则继续,否则返回false结束: 2、试将下列递归过程改写为非递归过程。 void  test(int  *sum) { int  x; scanf(“%d”, &x); if(x == 0) *sum=0 else {test(sum); *sum+=x;} printf("%d ",*sum); } 3、请利用两个栈 S1 和 S2 来模拟一个队列。 已知栈的三个运算定义如下:PUSH(ST , x):元素 x 入 ST 栈;POP(ST , &x):ST 栈顶元素出栈,赋给变量 x;Sempty(ST):判断 ST 栈是否为空。 那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列;dequeue:删除一个元素出队列;queue_empty:判断队列为空。(请写明算法的思想及必要的注释,不需要代码实现) [题目分析]栈的特点是后进先出,队列的特点是先进先出。 所以,用两个栈s1和s2模拟一个队列时,s1作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈s1退栈并逐个压入栈s2中,s1中最先入栈的元素,在s2中处于栈顶。s2退栈,相当于队列的出队,实现了先进先出。显然,只有栈s2为空且s1也为空,才算是队列空。 [算法讨论]算法中假定栈s1和栈s2容量相同。 出队从栈s2出,当s2为空时,若s1不空,则将s1倒入s2再出栈。元素从栈s1倒入s2,必须在s2空的情况下才能进行,即在要求出队操作时,若s2空,则不论s1元素多少(只要不空),就要全部倒入s2中。 入队在s1,当s1满后,若s2空,则将s1倒入s2,之后再入队。因此队列的容量为两栈容量之和。 (1) int enqueue(stack s1,elemtp x) //s1是容量为n的栈,栈中元素类型是elemtp。本算法将x入栈,若入栈成功返回1,否则返回0。 {if(top1==n && !Sempty(s2)) //top1是栈s1的栈顶指针,是全局变量。 {printf(“栈满”);return(0);} //s1满s2非空,这时s1不能再入栈。 if(top1==n && Sempty(s2)) //若s2为空,先将s1退栈,元素再压栈到s2。 {while(!Sempty(s1)) {POP(s1,x);PUSH(s2,x);} PUSH(s1,x); return(1); //x入栈,实现了队列元素的入队。 } (2) void dequeue(stack s2,s1) //s2是输出栈,本算法将s2栈顶元素退栈,实现队列元素的出队。 {if(!Sempty(s2)) //栈s2不空,则直接出队。 {POP(s2,x); printf(“出队元素为”,x); } else //处理s2空栈。 if(Sempty(s1)) {printf(“队列空”);exit(0);}//若输入栈也为空,则判定队空。 else //先将栈s1倒入s2中,再作出队操作。 {while(!Sempty(s1)) {POP(s1,x);PUSH(s2,x);} POP(s2,x); //s2退栈相当队列出队。 printf(“出队元素”,x); } }//结束算法dequue。 (3) int queue_empty() //本算法判用栈s1和s2模拟的队列是否为空。 {if(Sempty(s1)&&Sempty(s2)) return(1);//队列空。 else return(0); //队列不空。 }   D  D  D  D  C A  B  A  C  C T T T T 1、栈是只准在一端进行插入和删除操作的线性表,允许插入和删除的一端叫栈顶,另一端叫栈底。最后插入的元素最先删除,故栈也称后进先出(LIFO)表。 2、队列是允许在一端插入而在另一端删除的线性表,允许插入的一端叫队尾,允许删除的一端叫队头。最先插入队的元素最先离开(删除),故队列也常称先进先出(FIFO)表。 3、用常规意义下顺序存储结构的一维数组表示队列,由于队列的性质(队尾插入和队头删除),容易造成“假溢出”现象,即队尾已到达一维数组的高下标,不能再插入,然而队中元素个数小于队列的长度(容量)。循环队列是解决“假溢出”的一种方法。通常把一维数组看成首尾相接。在循环队列下,通常采用“牺牲一个存储单元”或“作标记”的方法解决“队满”和“队空”的判定问题。 (1)一个函数在结束本函数之前,直接或间接调用函数自身,称为递归。例如,函数f在执行中,又调用函数f自身,这称为直接递归;若函数f在执行中,调用函数g,而g在执行中,又调用函数f,这称为间接递归。在实际应用中,多为直接递归,也常简称为递归。 (2)递归程序的优点是程序结构简单、清晰,易证明其正确性。缺点是执行中占内存空间较多,运行效率低。 (3)递归程序执行中需借助栈这种数据结构来实现。 (4)递归程序的入口语句和出口语句一般用条件判断语句来实现。递归程序由基本项和归纳项组成。基本项是递归程序出口,即不再递归即可求出结果的部分;归纳项是将原来问题化成简单的且与原来形式一样的问题,即向着“基本项”发展,最终“到达”基本项。
本文档为【栈和队列练习题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_954223
暂无简介~
格式:doc
大小:22KB
软件:Word
页数:0
分类:高中语文
上传时间:2019-07-29
浏览量:26