《栈和队列》PPT课件.ppt
《《栈和队列》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《栈和队列》PPT课件.ppt(52页珍藏版)》请在三一办公上搜索。
1、3.1 栈 第3章 栈和队列,栈(Stack)是限定仅在表的一端(一般指表尾)进行插入和删除操作的线性表。允许插入、删除的这一端称为栈顶(Top),另一端称为栈底(Bottom)。栈的插入操作通常称为入栈或进栈(push),而栈的删除操作则称为出栈或退栈(pop)。,3.1 栈 数据结构 第3章 栈和队列,假设栈S=(a0,a1,a2,an-1),则a0称为栈底元素,an-1称为栈顶元素。栈中元素按a0,a1,a2,an-1的次序入栈,出栈的第一个元素应为栈顶元素an-1。也就是说,栈的操作是按后进先出的原则进行的。因此,栈又称为后进先出(Last In First Out)的线性表(简称LI
2、FO表)。,栈底,栈顶,3.1 栈 数据结构 第3章 栈和队列,栈的基本运算如下:InitStack(s):栈初始化。初始条件:栈s不存在 操作结果:构造了一个空栈。StackEmpty(s):判栈空。初始条件:栈s已存在 操作结果:若s为空栈则返回1,否则返回0。Push(s,e):入栈。初始条件:栈s已存在 操作结果:在栈s的顶部插入一个新元素e,e成为新的栈顶元素。栈发生变化。,3.1 栈 数据结构 第3章 栈和队列,Pop(s,e):出栈。初始条件:栈s存在且非空 操作结果:将栈s的栈顶元素从栈中删除,并用e返回其值。栈发生变化。GetTop(s,e):读栈顶元素。初始条件:栈s存在且
3、非空 操作结果:读栈顶元素并用e返回其值。栈不变化。,栈是一种特殊的线性表,因此栈也可采用两种存储结构:顺序存储结构链式存储结构,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,1.顺序栈(1)顺序栈的存储结构顺序栈是指采用顺序存储结构存储的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针(下标)top,指示栈顶元素的当前位置。对于用C语言描述的顺序栈通常用top=-1表示空栈;入栈时,栈顶指针top增1;出栈时,栈顶指针top减1。,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,3.2 栈的存储结构及其基本运算的实现 数据
4、结构 第3章 栈和队列,top,top,top,top,顺序栈的类型定义如下:#define MAXSIZE 100 typedef int ElemType;typedef struct stack ElemType elemMAXSIZE;/存栈顺序表 int top;/栈顶下标 SQSTACK;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,(2)顺序栈的基本操作 栈的初始化(即构造一个空栈)void InitStack(SQSTACK*ps)ps-top=-1;判栈空 int StackEmpty(SQSTACK s)if(s.top=-1)return 1;el
5、se return 0;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,入栈 int Push(SQSTACK*ps,ElemType e)if(ps-top=MAXSIZE-1)/判栈满 cout top+;ps-elemps-top=e;return 0;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,出栈int Pop(SQSTACK*ps,ElemType*pe)if(ps-top=-1)/判栈空 cout elemps-top;ps-top-;return 0;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,读取栈顶元
6、素int GetTop(SQSTACK s,ElemType*pe)if(s.top=-1)/判栈空 printf(Stack is emptyn);return 1;*pe=s.elems.top;return 0;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,2.链栈(1)链栈的存储结构 链栈是指采用链式存储结构存储的栈。链栈是一种特殊的单链表,即限定仅在表头进行插入和删除操作的单链表,因此链栈的结点结构与单链表的结点结构相同。,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,top,data next,栈顶,栈底,(1)链栈中指针的方向是从栈顶
7、指向栈底(区别于顺序栈,顺序栈是将表尾作为栈顶)。(2)链栈中没必要附加一个表头结点(因为在表头进行插入、删除操作,带头结点和不带头结点都是一样的)。,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,链栈的类型定义如下:typedef struct snode ElemType data;struct node*next;SNODE;SNODE top;,(2)链栈的基本操作 入栈 链栈的入栈操作,相当于在单链表的第一个结点之前进行插入操作。由于是链式存储,不需要像顺序存储那样需要判断栈是否为满。void
8、push(SNODE*pps,ElemType e)SNODE*p;p=new SNODE;p-data=e;p-next=*pps;*pps=p;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,出栈 链栈的出栈操作相当于在单链表中删除第一个结点。int pop(SNODE*pps,ElemType*pe)SNODE*p;if(*pps=NULL)/出栈前仍需判栈空 cout data;p=*pps;*pps=p-next;delete p;return 0;,3.2 栈的存储结构及其基本运算的实现 数据结构 第3章 栈和队列,由于栈具有“后进先出”的特点,在程序设计中,
9、尤其在系统软件的设计中,栈是应用最多的一种数据结构。输入输出中数制的转换,编译过程中常量表达式的计算,嵌套调用中返回地址和调用参数的传递以及各种递归函数的实现,都离不开栈。,3.3 栈的应用 数据结构 第3章 栈和队列,数制转换 将十进制数 N 转换为 r 进制数,其转换方法利用辗转相除法。以N=1348,r=8为例,转换过程如下:N N/8(整除)N%8(求余)1348 168 4 低 168 21 0 21 2 5 2 0 2 高结果为:(1348)10=(2504)8,3.3 栈的应用 数据结构 第3章 栈和队列,void conversion(int N,int r)SQSTACK*p
10、s;int x;InitStack(ps);/构造空栈 while(N)Push(ps,N%r);/余数入栈 N=N/r;/商作为被除数继续运算 while(!StackEmpty(*ps)Pop(ps,3.3 栈的应用 数据结构 第3章 栈和队列,3.3 栈的应用 数据结构 第3章 栈和队列,2.迷宫求解,求迷宫中从入口到出口的所有路径,所求路径必须是简单路径,即某一位置不能重复走两遍。求解思想:使用回溯法,即从入口出发,按某一方向向前探索,若能走通(未走过的),则到达新点,否则试探下一方向;若所有的方向均没有通路,则沿原路返回前一点,换下一个方向再继续试探,直到所有可能的通路都探索到,或找
11、到一条通路,或无路可走又返回到入口点。在求解过程中,为了保证无路可行时,能沿原路返回前一点以便继续下一个方向向前试探,则需要用一个栈来保存所能够到达的每一点的坐标及从该点前进的方向。,3.3 栈的应用 数据结构 第3章 栈和队列,需要解决的四个问题:(1)表示迷宫的数据结构设迷宫为m行n列,利用mazem+2n+2 来表示一个带围墙的迷宫。mazeij=0或1,其中0表示通道,1表示墙(不通)。迷宫四周为围墙,因此值全部为1。迷宫可定义如下:#define M 6/迷宫的实际行#define N 8/迷宫的实际列 int maze M+2N+2;,3.3 栈的应用 数据结构 第3章 栈和队列,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 栈和队列 队列 PPT 课件

链接地址:https://www.31ppt.com/p-5532544.html