栈、队列及其应用.ppt
《栈、队列及其应用.ppt》由会员分享,可在线阅读,更多相关《栈、队列及其应用.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、线性表的应用1、【问题描述问题描述】线性表线性表a和和b分别表示两个线性表,它们的数据元素类型相同,现要分别表示两个线性表,它们的数据元素类型相同,现要将将b中存在而中存在而a中不存在的数据元素插入到线性表中不存在的数据元素插入到线性表a中。设线性表中。设线性表a的长的长度与线性表度与线性表b的长度之和不超过线性表的长度之和不超过线性表a允许的最大长度。允许的最大长度。【参考程序参考程序】proceduIre union(var a:list;b:list);begin n:=length(a);for i:=1 to length(b)do begin getlist(b,i,x);取线性表
2、取线性表b中第中第i位上的数给位上的数给T k:=loclist(a,x);返回返回z在线性表在线性表a中的位置中的位置 if k=0 then begin inslist(a,n+1,x);将将z插入线性表插入线性表a的末尾的末尾 n:=n+1;end;end;end;线性表的应用2、【问题描述问题描述】已知线性表。和已知线性表。和b中的数据元素按递增的顺序排列,现中的数据元素按递增的顺序排列,现要求将要求将a和和b归并为一个新的线性表归并为一个新的线性表c,c中的数据元素仍按中的数据元素仍按递增排列。递增排列。用数组实现用数组实现用链表实现用链表实现线性表的应用3、Joseph(约瑟夫约瑟
3、夫)问题问题 【问题描述问题描述】m只猴子要选大王,选举办法如下:所有猴子按只猴子要选大王,选举办法如下:所有猴子按1m编号围坐一圈,从第编号围坐一圈,从第1号开始按号开始按顺序顺序1,2,n报数,凡报到竹的猴子退出到圈外,如此循环,直到圈内只剩下一只报数,凡报到竹的猴子退出到圈外,如此循环,直到圈内只剩下一只猴子时,猴子时,这只猴子就是大王。这只猴子就是大王。m和咒由键盘输入,打印出最后剩下的那只猴子的编号。和咒由键盘输入,打印出最后剩下的那只猴子的编号。运行示例:运行示例:Input m,n:8 3 The monkey king is no7 用数组实现用数组实现 【算法分析算法分析】在
4、确定程序设计方法之前首先来考虑如何组织数据,由于要记录在确定程序设计方法之前首先来考虑如何组织数据,由于要记录m只猴子的状态,只猴子的状态,可利用含可利用含m个元素的数组个元素的数组monkey来实现。利用元素下标代表猴子的编号,元素的值表来实现。利用元素下标代表猴子的编号,元素的值表示猴子的状态,用示猴子的状态,用monkeyEk=l表示第表示第k只猴子仍在圈中,只猴子仍在圈中,monkeyEk-=0则表示第则表示第k只猴子已经出圈。只猴子已经出圈。程序采用模拟选举过程的方法,开始时将报数变量程序采用模拟选举过程的方法,开始时将报数变量count置为置为1;用变量;用变量current表示当
5、表示当前报数的猴子的编号,初始时也置为前报数的猴子的编号,初始时也置为1;变量。;变量。out记录出圈猴子数。当记录出圈猴子数。当count=n时,时,对当前报数的猴子做出圈处理,即对当前报数的猴子做出圈处理,即monkeycurrent:=O,count:=0,out:=out+1。然后继续往下报数,直到圈中只剩一只猴子为止然后继续往下报数,直到圈中只剩一只猴子为止(即即out=m-1)。用数组实现用数组实现 【算法分析算法分析】在组织数据时,也可以考虑只记录仍在圈中的猴子的情况。用一个在组织数据时,也可以考虑只记录仍在圈中的猴子的情况。用一个线性表按编号由小到大依次记录圈中所有猴子的编号,
6、每当有猴子出线性表按编号由小到大依次记录圈中所有猴子的编号,每当有猴子出圈时,即从线性表中删除对应元素,表中元素减少一个。程序中用变圈时,即从线性表中删除对应元素,表中元素减少一个。程序中用变量量rest表示圈中剩余的猴子数,即线性表中元素的总数。表示圈中剩余的猴子数,即线性表中元素的总数。用单向循环链表实现用单向循环链表实现 【算法分析算法分析】结点的数据域为猴子的编号,指针域指向下一个猴子。结点的数据域为猴子的编号,指针域指向下一个猴子。报数实际上是计数,只要设一个计数器就可以了。当计数器由报数实际上是计数,只要设一个计数器就可以了。当计数器由0变化变化到到n时,删除该结点,计数器回时,删
7、除该结点,计数器回0继续计数继续计数(或者用求余运算或者用求余运算)。直到链。直到链表中剩下一个结点。表中剩下一个结点。线性表的应用4、一元多项式加减运算一元多项式加减运算 【问题描述问题描述】给定一个一元给定一个一元n次多项式次多项式p和一个一元和一个一元m次多项式次多项式Q,求它们的和与,求它们的和与差。差。【算法分析算法分析】选方法选方法。遍历两个单链表根据指数和系数进行相应的加减,生。遍历两个单链表根据指数和系数进行相应的加减,生成一个新链表系数为成一个新链表系数为0的结点删除掉的结点删除掉(或不生成这种结点或不生成这种结点),输出该链,输出该链表。表。特殊线性结构栈 栈(stack)
8、是一种特殊的线性表,这种线性表限定其只能在表尾进行插入或删除数据元素。栈顶栈顶栈底栈底a1a2an进栈进栈出栈出栈栈的存储方式顺序存储:通常栈可以用顺序的方式存储,就是用一组连续的存储单元依次存放自栈底到栈顶的数据元素,同时设立指针top(称为栈顶指针)以指示栈顶元素的当前位置。1.用记录方式实现:Type stack=record data:array1.smaxsize of selement;top:0.smaxsize;end;2.用数组方式实现Type atype=array1.smaxsize of selement;Var stack:arraytype;top:integer;
9、栈的存储方式链接存储:即链栈,目的是提高空间利用率,但编程复杂度提高了。type link=node;node=record data:element;next:link;end;Var top:link;栈基本操作的实现顺序存储栈的操作栈的初始化Procedure inistack(var s:stack);begin s.top=0 end;判断栈空function sempty(s:stack):boolean;begin sempty:=(s.top=0)end;入栈Procedure push(var s:stack;x:selement);begin if s.top=smaxsi
10、ze then writeln(overflow)else begin s.top:=s.top+1;s.datas.top end;栈基本操作的实现顺序存储栈的操作出栈Procedure pop(var s:stack);begin if sempty(s)then writeln(underflow)else s.top:=s.top-1;end;取栈顶元素function gettop(s:stack):selement;begin if sempty(s)then writeln(underflow)then gettop:=s.datas.top end;栈基本操作的实现链栈的基本操
11、作进栈算法procedure push(hs:link;x:element);begin new(p);p.data:=x;p.next:=hs;hs:=p;end;出栈 function pop(var hs:link):element;begin if hs=nil then writeln(underflow)else begin pop:=hs.data;p:=hs;hs:=hs.next;dispose(p)end end;括号匹配【问题描述问题描述】假设一个表达式由英文字母假设一个表达式由英文字母(小写小写)、运算符、运算符(+,一,一,*,)和左右小和左右小(圆圆)括号构成,以括
12、号构成,以“”作为表达式的结束符。作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回匹配,则返回“yes”,否则返回,否则返回“NO。假设表达式长。假设表达式长度小于度小于255,左圆括号少于,左圆括号少于20个。个。【算法分析算法分析】将输人的字符串存储在将输人的字符串存储在c中中(var c:string255)。定义一个栈用于存放表达式中从左往右的左圆括号定义一个栈用于存放表达式中从左往右的左圆括号(maXn=20)。var s:array1maxnof char;top:integer;顺序顺序(从左往右
13、从左往右)扫描表达式的每个字符扫描表达式的每个字符ci,若是,若是“(“则让它进栈;若遇到的是则让它进栈;若遇到的是“)”,则让栈顶元素出栈;,则让栈顶元素出栈;当栈发生当栈发生“下溢下溢或当表达式处理完毕而栈非空时,都或当表达式处理完毕而栈非空时,都表示不匹配,返回表示不匹配,返回“NO”;否则表示匹配,返回;否则表示匹配,返回“YES”。栈与递归递归调用的过程递归调用的过程,实质上是不断调用子过程或子函数的过,实质上是不断调用子过程或子函数的过程,由于递归调用一次,所有子程序的变量程,由于递归调用一次,所有子程序的变量(局部变量、局部变量、变参等变参等)、地址在计算机内部都是用特殊的管理方
14、法、地址在计算机内部都是用特殊的管理方法栈栈(先进后出先进后出)来管理,一旦递归调用结束,计算机便开始来管理,一旦递归调用结束,计算机便开始根据栈中存储的地址返回各子程序变量的值,并进行相应根据栈中存储的地址返回各子程序变量的值,并进行相应操作。操作。递归实现的条件递归实现的条件:边界条件:是所描述问题的最简单情况,它本身不再边界条件:是所描述问题的最简单情况,它本身不再使用递归的定义。如求使用递归的定义。如求N!,当,当n=0时,时,f(n)=1,不再使用,不再使用f(n-1)来定义。来定义。递归关系:使问题向边界条件转化的规则。递归定义递归关系:使问题向边界条件转化的规则。递归定义必须能使
15、问题的规模越来越简单。必须能使问题的规模越来越简单。【例】折半查找【问题描述问题描述】设有设有”个数已经按从大到小的顺序排列,现在从键盘上输入个数已经按从大到小的顺序排列,现在从键盘上输入x,判断它,判断它是否在这是否在这”个数中,如果存在,则输出所在位置,否则输出个数中,如果存在,则输出所在位置,否则输出“no”。【算法分析算法分析】该问题属于数据的查找问题,常用方法有顺序查找和折半查找,当行个该问题属于数据的查找问题,常用方法有顺序查找和折半查找,当行个数排好序时,用折半查找方法的速度会大大加快。折半查找算法如下:数排好序时,用折半查找方法的速度会大大加快。折半查找算法如下:设有设有n个数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 队列 及其 应用
限制150内