收藏 分享(赏)

栈与队列(习题课).ppt

上传人:hyngb9260 文档编号:5907820 上传时间:2019-03-20 格式:PPT 页数:33 大小:952KB
下载 相关 举报
栈与队列(习题课).ppt_第1页
第1页 / 共33页
栈与队列(习题课).ppt_第2页
第2页 / 共33页
栈与队列(习题课).ppt_第3页
第3页 / 共33页
栈与队列(习题课).ppt_第4页
第4页 / 共33页
栈与队列(习题课).ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、第三章习题,填空题,1.线性表、栈和队列从逻辑上来说都是_结构。可以在线性表的_位置插入和删除元素;对于栈只能在_插入和删除元素;对于队列只能在_插入元素和在_删除元素。 线性,任何,栈顶,队尾,队头 2.栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为_表;队列的插入和删除运算分别在队列的两端进行,进行插入的一端叫做_,进行删除的一端叫做_,先进队的元素必定先出队,所以又把队列称为_表。 先进后出(FILO),队尾,队头,先进先出(FIFO) 3.假设用向量S1:m来存储顺序栈,指针top指向当前栈顶的位置。则当栈为空时满足的条件是_;当栈为满时满足的条件是_。 to

2、p=0,top=m 4.设有一个空栈,现有输入序列1、2、3、4、5,经过push、push、pop、push、pop、push、push、pop、pop、 pop后,输出序列为_。 23541,5.在一个顺序循环队列中为了方便入队列和出队列的操作通常约定头指针front指向实际队头元素的_,尾指针rear指向当前实际队尾元素的_。若该顺序循环队列有m个存储单元,则队列满时共有_个元素。 前一个位置,所在位置,m-1 分析:在顺序循环队列中约定头指针front和尾指针rear所指向的位置,是牺牲掉一个存储单元而方便表示队列空和队列满的条件,因此顺序循环队列中实际可用的存储单元只有m-1个 6.

3、设有一个顺序循环队列如上题中的约定,则该队列满的条件是_,队列空的条件是_。 (rear+1)%m=front,rear=front,7.不论是顺序栈(队列)还是链式栈(队列),插入(删除)运算的时间复杂度均为_。 O(1) 8.系统在函数调用前自动把调用后的_压入堆栈;当函数调用结束后,系统又自动作退栈处理,并将程序执行流程无条件转移到所保存的_处继续执行。 返回地址,返回地址,选择题,1.设栈的输入序列是1、2、3、n,输出序列的第一个元素是n,则第i个输出元素是( )。 n-i n-i-1 n-i+1 不确定 (3) 分析:设栈的输入序列是1、2、3、n,输出序列的第一个元素是n,则输出

4、序列必定是n、n-1、n-2、1,因此第i个输出元素是n+1-i。,2设元素进栈次序为A、B、C、D、E,则下列不可能的出栈序列是( )。 ABCDE BCDEA EABCD EDCBA (3) 3设用一维数组sm表示栈的存储空间,用top指向当前栈顶元素(其初始值为-1),则进行出栈时的操作序列是( )。 x=sop; x=stop;top=0; x=stop;top=top-1; x=stop;top=top+1; (3),4.设指针hs指向栈顶,指针s指向插入的结点A,则插入结点A时的操作为( )。 hs-next=s; s-next=hs; hs=s; s-next=hs-next;

5、hs-next=s; s-next=hs; hs=hs-next; (2) 5设用一维数组sm表示栈的存储空间,用top指向当前栈顶元素(其初始值为-1),则进行入栈时的操作序列是( )。 stop =x; top=top+1;stop=x; top=top-1;stop=x; stop=x;top=top+1; (2) 6设front是链式队列的头指针,rear是链式队列的尾指针,s指向插入的结点A,则插入结点A的操作为( )。 front-next=s; front=s; s-next=rear; rear=s; rear-next=s; rear=s; s-next=front; fro

6、nt=s; (3),7.设front是链式队列的头指针,rear是链式队列的尾指针,则删除队头元素的操作为( )。 front=front-next; rear=rear-next ; rear=front-next ; front=rear-next; (1) 8对于一个具有m个存储单元的顺序循环队列,设front为队头指针,rear为队尾指针,则该队列中队列元素的个数计算公式为( )。 rear-front front-rear (rear-front)%m (rear-front+m)%m (4) 分析:顺序循环队列中的元素个数= ,整理合并可写成(rear-front+m)%m。,9.

7、设用一维数组qm作为顺序循环队列的存储空间,front指向队头元素的前一个位置,rear指向队尾元素的当前位置,则入队列的操作序列为( )。 qrear =x;rear=rear+1; qrear=x;rear=rear-1; rear=(rear+1)%m;qrear =x; rear=(rear-1)%m;qrear=x; (3) 10.设用一维数组qm作为顺序循环队列的存储空间,front指向队头元素的前一个位置,rear指向队尾元素的当前位置,则出队列的操作序列为( )。 x=qfront;front=front+1; x=qfront;front=(front+1)%m; x=qfr

8、ont;front=front-1; x=qfront; front=(front-1)%m; (2),算法设计题,1.设有两个顺序栈S1和S2共享一个存储区S0:m-1,为了尽量利用存储空间减少溢出的可能性,采用栈顶相向、迎面增长的存储方式,要求分别设计两个栈的入栈和出栈操作。,分析:本题算法思想是引入形式参数flag,当形式参数flag的值为1时表示对栈1进行操作,flag的值为2时表示对栈2进行操作。 typedef struct int sm; int top1; int top2; sqstack; void push(sqstack ,2.设计算法判断表达式中的圆括号是否配对出现。

9、,分析:本题的算法思想是顺序扫描表达式,当扫描到左圆括号时进栈而扫描到右圆括号时出栈,如果扫描到右圆括号时不能出栈或扫描表达式结束时栈中仍有左圆括号则意味表达式中圆括号不匹配,否则表达式中圆括号匹配。 typedef struct int sm; int top; sqstack; int matchbracket() char ch; sqstack stack; stack.top= -1; do ch=getchar(); if (ch=() stack.top=stack.top+1; stack.sstack.top=ch; else if (ch=) if (stack.top0)

10、 return(0); else stack.top=stack.top-1; while(ch!= #); if (stack.top0) return(1); else return(0); ,3.设用一个单向循环链表来表示队列(也称循环队列),该队列只设一个队尾指针rear,不设队头指针front,要求设计出该队列的入队列和出队列操作。,设用一个单向循环链表来表示队列(也称链式循环队列),该队列只设一个队尾指针rear,不设队头指针front,要求设计出该队列的入队列和出队列操作。 typedef struct node int data; struct node *next; lkli

11、st; void inlkqueue(lklist * ,4.假设以一个一维向量q0:m-1作为顺序循环队列的存储空间,同时设变量rear和len分别指示顺序循环队列中的队尾元素的位置和实际队列中的元素个数,要求设计出该队列的入队列和出队列操作。,分析:本题中出队列的算法思路是设置一个临时变量front指向当前队列中队头元素的实际位置,考虑到表达式queue.rear+1-queue.len的值可能为负,因此设置front的值为(queue.rear+1-queue.len+m)%m。 typedef struct int qm; int rear; int len; sqqueue; voi

12、d insqqueue(sqqueue ,5.将数字1、2、n按顺时针方向排列成环形,按顺时针方向从1开始计数,计满时则输出该位置上的数字并从环中删除该数字,然后从下一个数字开始继续计数,直到环中所有数字均被输出为止,要求设计一个算法完成此功能。,分析:本题的算法思路是设置变量sum和num,其中变量 sum表示当前已经离开圆桌的人数个数,变量num表示当前的报数。 void Josephus( int n, int k) int i,num,sum,r100; for(i=0;in; i+) ri=i; for(sum=num=i=0; sumn; i=(i+1)%n)if (ri!=-1) num+; if (num % k=0) printf(“%dt“,i); num=0;sum+; ri= -1; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报