第-3-章-栈和队列课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第-3-章-栈和队列课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- _3_ 队列 课件
- 资源描述:
-
1、数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞1、栈和队列的定义及特点;、栈和队列的定义及特点;2、栈的顺序存储表示;、栈的顺序存储表示;3、队列的顺序存储表示;队列的链接存储表示;、队列的顺序存储表示;队列的链接存储表示;4、栈和队列的应用举例。、栈和队列的应用举例。教学内容教学内容 数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞学习指南 在这一章中,主要是学习如何在求解应用在这一章中,主要是学习如何在求解应用问题中适当地应用栈和队列
2、,栈和队列在两种问题中适当地应用栈和队列,栈和队列在两种存储结构中的实现都不难,但应该对它们了如存储结构中的实现都不难,但应该对它们了如指掌,特别要注意它们的基本操作实现时的一指掌,特别要注意它们的基本操作实现时的一些特殊情况,如栈满和栈空、队满和队空的条些特殊情况,如栈满和栈空、队满和队空的条件以及它们的描述方法。件以及它们的描述方法。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞 本章学习目标和重点、难点本章学习目标和重点、难点【】1.掌握栈和队列这两种抽象数据类型的特点,并能在相掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们
3、。应的应用问题中正确选用它们。2.熟练掌握栈类型的两种实现方法。熟练掌握栈类型的两种实现方法。3.熟练掌握循环队列和链队列的基本操作实现算法。熟练掌握循环队列和链队列的基本操作实现算法。4.理解递归算法执行过程中栈的状态变化过程。理解递归算法执行过程中栈的状态变化过程。【】栈和队列是在程序设计中被广泛使用的两种线性数栈和队列是在程序设计中被广泛使用的两种线性数据结构,因此本章的学习重点在于掌握这两种结构的特点,据结构,因此本章的学习重点在于掌握这两种结构的特点,以便能在应用问题中正确使用。以便能在应用问题中正确使用。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院
4、 王霞限定仅在表尾进行插入或删除操作。限定仅在表尾进行插入或删除操作。3.1 栈栈 3.1.1 抽象数据类型栈的定义抽象数据类型栈的定义 栈的定义栈的定义 a1 a2 an-1 an 栈顶栈顶(top)栈底栈底(bottom)出栈出栈 进栈进栈 栈底元素栈底元素 线性表线性表 后进先出后进先出(LIFO结构结构)。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞 栈的抽象数据类型的定义栈的抽象数据类型的定义 ADT Stack 数据对象:数据对象:D ai|ai ElemSet,i=1,2,.,n,n0 数据关系:数据关系:R|ai-1,aiD,i=2,.,
5、n 约定约定an 端为栈顶,端为栈顶,a1 端为栈底。端为栈底。基本操作:基本操作:操作结果:操作结果:构造一个空栈构造一个空栈 S。初始条件:初始条件:栈栈 S 已存在。已存在。操作结果:操作结果:栈栈 S 被销毁。被销毁。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞 初始条件:初始条件:栈栈 S 已存在且非空。已存在且非空。操作结果:操作结果:用用 e 返回返回 S 的栈顶元素。的栈顶元素。初始条件:初始条件:栈栈 S 已存在。已存在。操作结果操作结果:若栈若栈 S 为空栈,则返回为空栈,则返回 TRUE,否则,否则 FALSE。初始条件初始条件:栈
6、栈 S 已存在。已存在。操作结果:操作结果:返回返回 S 的元素个数,即栈的长度。的元素个数,即栈的长度。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞初始条件:初始条件:栈栈 S 已存在。已存在。操作结果:操作结果:将将 S 清为空栈。清为空栈。初始条件:初始条件:栈栈 S 已存在。已存在。操作结果:操作结果:插入元素插入元素 e 为新的栈顶元素。为新的栈顶元素。初始条件:初始条件:栈栈 S 已存在且非空。已存在且非空。操作结果:操作结果:删除删除 S 的栈顶元素,并用的栈顶元素,并用 e 返回其值。返回其值。ADT Stack 数据结构数据结构 第三章
7、第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞312 栈的存储表示与算法实现栈的存储表示与算法实现 一、一、栈的顺序存储结构及其算法实现栈的顺序存储结构及其算法实现1栈的生成方式栈的生成方式(1)向下生成的栈。栈顶在)向下生成的栈。栈顶在高地址端,栈底在低地址端。高地址端,栈底在低地址端。如图如图(a)所示。入栈时所示。入栈时top+;出栈时出栈时top-。(2)向上生成的栈。栈顶在)向上生成的栈。栈顶在低地址端,栈底在高地址端。低地址端,栈底在高地址端。如图如图(b)所示。入栈时所示。入栈时top-;出栈时出栈时top+。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:
8、制作:信息科学技术学院 王霞栈的存储表示与算法实现栈的存储表示与算法实现2栈顶指针的两种指示方式。栈顶指针的两种指示方式。栈顶指针指向什么位置,对入栈和出栈时的操作语句有栈顶指针指向什么位置,对入栈和出栈时的操作语句有直接影响。通常有两种指示方式:直接影响。通常有两种指示方式:(1)栈顶指针指向第一个空单元。使用这种指示方式,入)栈顶指针指向第一个空单元。使用这种指示方式,入栈时,先写元素,后修改栈顶指针;出栈时先修改栈顶栈时,先写元素,后修改栈顶指针;出栈时先修改栈顶指针,后读元素。指针,后读元素。(2)栈顶指针指向栈顶处的元素。使用这种指示方式,入)栈顶指针指向栈顶处的元素。使用这种指示方
9、式,入栈时,先修改栈顶指针,后写元素;出栈时先读元素,栈时,先修改栈顶指针,后写元素;出栈时先读元素,后修改栈顶指针。后修改栈顶指针。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞3.1.2 栈的存储表示和算法实现栈的存储表示和算法实现 3.3.栈的顺序存储结构栈的顺序存储结构 利用一组地址连续的存储单元依次存放自利用一组地址连续的存储单元依次存放自 栈底到栈顶的数据元素,同时附设指针栈底到栈顶的数据元素,同时附设指针 top 指示栈顶元指示栈顶元 素在顺序栈中的位置。素在顺序栈中的位置。top base A top B top C top D top E
10、 top 若再进行元若再进行元 素素“出栈出栈”操操 作,将产生作,将产生“下溢下溢”。top 若再进行元若再进行元 素素“入栈入栈”操操 作,将产生作,将产生“上溢上溢”。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞栈的存储表示与算法实现栈的存储表示与算法实现(1)静态顺序栈。用一维数组Stack 0.MaxSize-1存储表示一个栈,大小MaxSize预先定义。Stack 0 端表示栈底,设置一个栈顶指针int top 指向栈顶。存储结构如图所示:顺序栈的类型描述:顺序栈的类型描述:#define MaxSize 100 /定义栈大小 typedef
11、 SElmeType Stack MaxSize ;/定义栈类型名 int top;/定义栈顶指针 Stack S;/定义栈变量 入栈操作语句:S top+=e;出栈操作语句:e=S-top 。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞#define LIST_INIT_SIZE 100 /线性表存储空间的初始分配量线性表存储空间的初始分配量#define LISTINCREMENT 10 /线性表存储空间的分配增量线性表存储空间的分配增量typedef struct ElemType *elem;/数组指针,指示线性表的基地址数组指针,指示线性表的基
12、地址 int length;/当前长度当前长度 int listsize;/当前分配的存储容量当前分配的存储容量(以以sizeof(ElemType)为单位为单位)SqList;SelemType*base;/栈底指针,它始终指向栈底的位置。栈底指针,它始终指向栈底的位置。SelemType*top;/栈顶指针。栈顶指针。int stacksize;/当前分配的栈可使用的最大存储容量。当前分配的栈可使用的最大存储容量。Sqstack;base 的值为的值为 NULL,表明栈结构不存在。,表明栈结构不存在。#define STACK_INIT_SIZE 100 /栈存储空间的初始分配量栈存储空间
13、的初始分配量#define STACKINCREMENT 10 /栈存储空间的分配增量栈存储空间的分配增量 (2)动态顺序栈数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞栈的存储表示与算法实现栈的存储表示与算法实现顺序栈基本操作的实现:栈顶的初始化:S.top=S.base栈空:S.base=S.top栈满:S.top-S.base=S.stacksize 入栈:*S.top+=e,出栈:e=*-S.top 数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞栈的存储表示与算法实现栈的存储表示与算法实现 3双栈。为了共享存储
14、空间,有时将两个栈用一块存储空间存放,两栈的栈顶相对,如图。当base1=top1 且base2=top2 时,两个栈都空.top1=top2 时两个栈都满。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞 栈的基本操作在顺序栈中的实现栈的基本操作在顺序栈中的实现#define maxs 9;main()while(top0)e=stacktop-1;top-=1;InitStack Push Pop top 1 2 top top top 2 top GetTop 2 1 Status InitStack(SqStack&S)S.base=(SElemTy
15、pe*)malloc(STACK_INIT_SIZE*sizeof(SElemtype);if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;/InitStackStatus Push(SqStack&S,SElemType e)if(S.top-S.base=S.stacksize)S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemtype);if(!S.base)exit(OVERFLOW)
16、;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;return OK;/Push Status GetTop(SqStack S,SElemType&e)if(S.top=S.base)return ERROR;e=*(S.top 1);return OK;/GetTop Status Pop(SqStack&S,SElemType&e)if(S.top=S.base)return ERROR;e=*-S.top;return OK;/Pop 数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术
17、学院 王霞二、栈的链式存储结构及其算法实现二、栈的链式存储结构及其算法实现1、存储方式:、存储方式:同一般线性表的单链式存储结构完全相同。那么链表的哪端应该作为栈顶?.top如果链表头作为栈顶,则入、出栈操作的时间复杂性为O(1),所以,一般把链表头作为栈顶。栈顶.l需要不需要头结?为什么?需要不需要头结?为什么?如果链表尾作为栈顶,会是什么情况?入栈、出栈入栈、出栈O(n)数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞栈的链式存储结构及其算法实现栈的链式存储结构及其算法实现2栈的链接存储结构定义(链栈)栈的链接存储结构定义(链栈)用不带头结点的单链表表示
18、一个栈,设置一个栈顶指针top。入栈、出栈都在top端进行。如下图所示:类型定义如下:typedef struct SNode SElemTyoe data;struct SNode *next;SNode,*LinkStack;LinkStack top;数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞栈的链式存储结构及其算法实现栈的链式存储结构及其算法实现(1)置空栈)置空栈 void InitLinkStack(LinkStack&top)top=NULL;(2)判栈空)判栈空Bool LinkStackEmpty(LinkStack top)if(!
19、top)return TRUE;else return FALSE;数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞(3)入栈void Push(LinkStack*top,SElemType e)StackNode *s;s=(SNode*)malloc(sizeof(SNode);s-data=x;s-next=top;top=s;入栈算法数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞(4)出栈Bool Pop(LinkStack top,SElemType&e)LinkStack p;if(!top)return
20、EEEOR;else p=top;x=top-data;top=top-next;free(p);return OK;出栈算法数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞int StackLength(LinkStackint StackLength(LinkStack top)top)LinkStack p;int LinkStack p;int n=0;n=0;p=top;p=top;while(p)while(p)/每移动一个结点,个数n加1 n+;p=p-next;n+;p=p-next;return n;return n;(5)求栈长)求栈长数
21、据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞3.2 栈的应用举例栈的应用举例 1 数制转换数制转换 十进制数十进制数 N 和其他和其他 d 进制数进制数 M 的转换是计算机实现的转换是计算机实现 计算的基本问题,其解决方法很多,其中一个简单算法是计算的基本问题,其解决方法很多,其中一个简单算法是 逐次除以基数逐次除以基数 d 取余法,它基于下列原理:取余法,它基于下列原理:N=(N div d)*d+N mod d 具体作法为:具体作法为:首先用首先用 N 除以除以 d,得到的余数是,得到的余数是 d 进制进制 数数 M 的最低位的最低位 M0,接着以前一
22、步得到的商作为被除数,接着以前一步得到的商作为被除数,再除以再除以 d,得到的余数是,得到的余数是 d 进制数进制数 M 的次最低位的次最低位 M1,依,依 次类推,直到商为次类推,直到商为 0 时得到的余数是时得到的余数是 M 的最高位的最高位 Ms(假(假 定定 M 共有共有 s+1 位)。位)。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞例:例:(1348)10=(2504)8,其运算过程如下:,其运算过程如下:N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2计计 算算 顺顺 序序 输输 出出 顺
23、顺 序序 数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞bottom top 4 0 5 2 top 1348 168 void conversion()int stack4;int top=0;int N;scanf(“%d”,N);while(N)stacktop=N%8;top+;N=N/8;for(top=top-1;top=0;top-)printf(“%d”,stacktop);21 top 2 top 0 top 2504 InitStack(S)Push(S,N%S)While(!Stackempty(S)Pop(S,e);printf(“
24、%d”,e);数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞2 括号匹配的检验括号匹配的检验 假设表达式中允许括号嵌套,则检验括号是否匹配的假设表达式中允许括号嵌套,则检验括号是否匹配的 方法可用方法可用“期待的急迫程度期待的急迫程度”这个概念来描述。这个概念来描述。例:例:()1 2 3 4 5 6 7 8 bottom top (top top top top top top top top 可能出现的可能出现的的情况:的情况:盼来的右括号盼来的右括号不是所不是所“期待期待”的;的;到来的是到来的是“不速之客不速之客”(右括号多右括号多);到结束也未盼
25、来到结束也未盼来所所“期待期待”的括号的括号 (左括号多左括号多)。)。数据结构数据结构 第三章第三章 栈和队列栈和队列 制作:制作:信息科学技术学院 王霞算法的设计思想:算法的设计思想:1)凡出现)凡出现左括号左括号,则,则进栈进栈;2)凡出现右括号,首先检查栈是否空。)凡出现右括号,首先检查栈是否空。若栈空,则表明该若栈空,则表明该“右括号右括号”多余;多余;否则和栈顶元素比较,否则和栈顶元素比较,若相匹配,则若相匹配,则“左括号出栈左括号出栈”,否则表明不匹配。否则表明不匹配。3)表达式检验结束时,)表达式检验结束时,若栈空,则表明表达式中匹配正确,若栈空,则表明表达式中匹配正确,否则表
展开阅读全文