数据结构第3章栈和队列.ppt
《数据结构第3章栈和队列.ppt》由会员分享,可在线阅读,更多相关《数据结构第3章栈和队列.ppt(80页珍藏版)》请在三一办公上搜索。
1、,特殊线性表,栈,队列,串,逻辑结构,逻辑结构,逻辑结构,物理结构,物理结构,物理结构,顺序栈,链式栈,顺序队列,顺序存储,链式队列,链式存储,栈的定义操作特性ADT定义,队列定义操作特性ADT定义,串的定义操作特性ADT定义,基本操作的实现时间性能,基本操作的实现时间性能,模式匹配,第三章 栈和队列,栈和队列是两种特殊的线性表,是操作受限的线性表,称限定性DS,“取”操作必须在这端进行,“放”操作必须在同一端进行,3.1 栈(stack)定义:限定仅在表尾进行插入或删除操作的线性表。,表尾栈顶表头栈底不含元素的空表称空栈特点:先进后出(FILO),抽象数据类型栈的定义,ADT Stack数据
2、对象:Dai|aiElemSet,i=0,1,.,n-1,n0 数据关系:R1|ai-1,aiD,i=1,.,n-1 约定an-1端为栈顶,a0端为栈底。基本操作:InitStack(ADT Stack,3.1.2 栈的表示与实现,顺序栈:是利用一块地址连续的存储单元来存放栈中的元素,同时要利用一个指针top 来指示栈顶元素的位置。,/-栈的顺序存储表示-#define STACK_INIT_SIZE 100;#define STACKINCREMENT 10;typedef struct SElemType*base;SElemType*top;int stacksize;SqStack;,
3、顺序栈示意图,初始空栈,*top=*base;stacksize=STACK_INIT_SIZE,顺序栈,栈的几种状态示意图,栈顶指针top,指向实际栈顶后的空位置,初值为0,进栈,A,出栈,栈满,B,C,D,E,F,设数组维数为Mtop=0,栈空,此时出栈,则下溢(underflow)top=M,栈满,此时入栈,则上溢(overflow),栈空,Status InitStack(SqStack,在此存储结构下的基本操作实现:,Status Push(SqStack,Status Pop(SqStack,2.链栈(1)链栈的存储结构 链栈是指采用链式存储结构存储的栈。链栈是一种特殊的单链表,即
4、限定仅在表头进行插入和删除操作的单链表,因此链栈的结点结构与单链表的结点结构相同。,top,data next,栈顶,栈底,3.2 栈的应用举例,3.2.1 数制转换十进制N和其它进制数的转换是计算机实现计算的基本问题,其中一个简单算法基于下列原理:N=(N div d)10d+N mod d例如:(1348)10=283+582+08+4=(2504)8 N N div 8 N mod 81348 168 4 168 21 0 21 25 2 0 2,结果:2 5 0 4,计算时从低位到高位顺序产生八进制数的各个数位,显示时按从高位到低位的顺序输出,void conversion()Init
5、Stack(s);/建空栈 scanf(“%d”,3.2.2 括号匹配的检验假设在表达式中()或()等为正确的格式,()或()或())均为不正确的格式。,则 检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。,例如:考虑下列括号序列:()1 2 3 4 5 6 7 8,到来的右括弧并非是所“期待”的;到来的是“不速之客”;直到结束,也没有到来所“期待”的括弧,分析可能出现的不匹配的情况:,算法的设计思想:,1)凡出现左括弧,则进栈;,2)凡出现右括弧,首先检查栈是否空 若栈空,则表明该“右括弧”多余,否则和栈顶元素比较,若相匹配,则“左括弧出栈”,否则表明不匹配。,3)表达式检验结束
6、时,若栈空,则表明表达式中匹配正确,否则表明“左括弧”有余。,Status matching(SELemType*p)int flag=1;SELemType c;Stack1 S;InitStack1(S);while(*p,3.2.3 行编辑程序,行编辑器的功能为:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端进行输入时,不能保证不出差错,所以在编辑程序中,“每接受一个字符即存入用户数据区”的做法不当。因此,在编辑程序中,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入错误,并在发现有误时可以及时更正。如果约定为退格符,以表示前一个字
7、符无效,为退行符,表示当前行所有字符均无效。则whli#ilr#e(s#*s)outchaputchar(*s=#+)应为while(*s)putchar(*s+),字符在存入缓冲区时是按“后进先出”的规律进行的,所以用栈表示输入缓冲区最合适。当从终端接受了一个字符后做如下判断:如果它既不是退格符也不是退行符,则将该字符压入栈顶;如果它是一个退格符,则从栈顶删去一个字符;如果它是一个退行符,则将栈清空。,void LineEdit()InitStack(S);/构造空栈Sch=getchar();/从终端接收第一字符while(ch!=EOF)/EOF为全文结束符 while(ch!=EOF,
8、3.2.4 迷宫求解 入口,出口,迷宫问题:求迷宫中从入口点到出口点所有可能的简单路径,所谓的简单路径是指:在求出的任何一条路径上,不能重现某一通道块,否则总有任意多条路径 迷宫问题是许多实际问题的抽象,求解这类问题时,没有现成的数学公式可以套用,只能采用系统化的试探方法。下面规定:通道用空格“”表示 墙壁用“#”表示 足迹用“0”表示 从入口点到当前立足点间,具有足迹标志的相连的通道块构成的简单路径叫当前路径 将迷宫模型用二维字符型数组表示:char mazen+1n+1;并假定入口为 maze00,出口为 mazenn 考虑一般情况,设 maze i j 为当前立足点,并纳入当前路径(即印
9、上足迹标志“0”),则从当前立足点继续试探的算法如下:,if maze i j 是出口then 打印刚找到的一条简单路径,并回溯一步;else if 东面的是通道块then 前进一步else if 南面的是通道块then 前进一步else if 西面的是通道块then 前进一步else if 北面的是通道块then 前进一步else 回溯一步,(i,j),东,南,西,北,前进一步:将下一通道块印上“0”作为当前立足点(切换当前立足 点),并保存原立足点的信息以便回溯。回溯一步:去掉当前立足点的足迹“0”;把最近的原立足点重新切换为当前立足点;试探尚未试探过的方向。上述的活动均需要在迷宫中移动,
10、并且具有方向性,这种活动可以使用二维数组下标增量技术来实现:行下标增量 di k 列下标增量 dj k 方向及其序号 k 东 0 南 1 西 2 北 3int di4=0,1,0,-1;int dj4=1,0,-1,0;,0,1,1,0,0,1,1,0,在上述的规定下:k=0 时,mazei+dikj+djk 为立足点的东面下一块;k=1 时,mazei+dikj+djk 为立足点的南面下一块;k=2 时,mazei+dikj+djk 为立足点的西面下一块;k=3 时,mazei+dikj+djk 为立足点的北面下一块;客体的表示方法设计:从上述的用试探法走迷宫的过程可知,其中 所管理的信息是
11、立足点的信息。可以用三元组(i,j,k)来表 示立足点,其中(i,j)表示立足点的位置信息,k 表示立足点 的下一个试探方向。可以将三元组定义成一个结构:struct items int i,j,k;数据的组织方法设计:考察上述用试探法走迷宫的过程:前进一步时,需要保存原立足点的信息;回溯一步时,需要取出最近的原立足点的信息,并且遵循 后保存的先取出的原则,即“后进先出”的原则,因此可以用栈 来记录立足点的信息。迷宫问题的算法框架:,1Stack s(sz);/栈初始化:创建一个大小为 sz 的栈,其数据元素类型为 items2items e;int k;3e.i=0;e.j=0;e.k=0;
12、s.Push(e);maze e.i e.j=0;/将入口作为立足点并入栈4while(!s.IsEmpty()/若栈不空则继续循环试探/若空表示已找到所有简单路径,可以结束程序5e=s.Pop();/出栈,准备试探下一方向或实现回溯一步操作6 if(e.k=4)maze e.i e.j=;/四个方向均试探完毕/消足迹,当再执行到 5 时回溯一步 else if(e.i=n,3.2.5 表达式求值1)问题的提出 设计一个小计算器:对键入的表达式进行求值。,高级语言中的赋值语句:变量=表达式;,2)表达式的构成 操作数+运算符+界符(如括号)3)表达式的求值:例 5+6(1+2)-4 按照四则运
13、算法则,上述表达式的计算过程为:5+6(1+2)-4=5+6 3-4=5+18-4=23-4=19,1,2,3,4,运算符和界限符统称为算符。根据算术四则运算的规则(即中缀式的运算规则),任两个相继出现的算符1和2之间的优先关系至多是下面三种关系之一:1 2 1的优先权高于2,算符间的优先关系,2,1,算法需两个栈。一个是运算符栈(OPTR);另一个是操作数或运算结果栈(OPND)。算法的基本思想是:(1)首先置操作数栈为空栈;为了使表达式中第一个运算符能够进栈,首先将一个优先权最低的运算符#压入运算符栈中成为其栈底。(2)从左向右依次读出表达式中的每一个字符,若为操作数,则将其压入操作数栈中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 队列
链接地址:https://www.31ppt.com/p-6050264.html