数据结构课件:第3章栈.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构课件:第3章栈.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 章栈
- 资源描述:
-
1、数数 据据 结结 构构 测测 绘绘 学学 院院数数 据据 结结 构构 测测 绘绘 学学 院院二、教学要求:二、教学要求:1 1、掌握栈和队列的定义、特性,并能正确应用它、掌握栈和队列的定义、特性,并能正确应用它们解决实际问题;们解决实际问题;2 2、熟练掌握栈的顺序表示、链表表示以及相应操、熟练掌握栈的顺序表示、链表表示以及相应操作的实现。特别注意栈空和栈满的条件;作的实现。特别注意栈空和栈满的条件;3 3、熟练掌握队列的顺序表示、链表表示以及相应、熟练掌握队列的顺序表示、链表表示以及相应操作的实现。特别是循环队列中队头与队尾指针操作的实现。特别是循环队列中队头与队尾指针的变化情况的变化情况数
2、数 据据 结结 构构 测测 绘绘 学学 院院栈和队列是两种特殊的线性表,是栈和队列是两种特殊的线性表,是的线性表,称限定性数据结构。的线性表,称限定性数据结构。 队列的应用队列的应用数数 据据 结结 构构 测测 绘绘 学学 院院3.1 栈(栈(stack)一、一、 栈的定义:限定仅在栈的定义:限定仅在表尾表尾进行插入或删除操进行插入或删除操作的线性表,表尾作的线性表,表尾栈顶栈顶,表头,表头栈底栈底,不含元,不含元素的空表称空栈素的空表称空栈 特点:先进后出(特点:先进后出(FILO)或后进先出(或后进先出(LIFO)ana1a2.栈底栈底栈栈顶顶.出栈出栈进栈进栈栈栈s=(a1,a2,an)
3、数数 据据 结结 构构 测测 绘绘 学学 院院栈的基本操作栈的基本操作1.初始化栈:初始化栈:INISTACK(&S)将栈将栈S置为一个空栈置为一个空栈(不含任何元素不含任何元素)。2.进栈:进栈:PUSH(&S,X)将元素将元素X插入到栈插入到栈S中,也称为中,也称为 “入栈入栈”、 “插入插入”、 “压入压入”。3.出栈:出栈: POP(&S) 删除栈删除栈S中的栈顶元素,也称为中的栈顶元素,也称为”退栈退栈”、 “删除删除”、 “弹出弹出”。4.取栈顶元素:取栈顶元素: GETTOP(S,&e)取栈取栈S中栈顶元素。中栈顶元素。5.判栈空:判栈空: StackEmpty(S)判断栈判断栈
4、S是否为空,若为空,返回值为是否为空,若为空,返回值为true,否则返回值为,否则返回值为false。数数 据据 结结 构构 测测 绘绘 学学 院院例例1:对于一个栈,给出输入项对于一个栈,给出输入项A、B、C,如果输入项序列,如果输入项序列由由ABC组成,试给出所有可能的输出序列。组成,试给出所有可能的输出序列。A进进 A出出 B进进 B出出 C进进 C出出 ABCA进进 A出出 B进进 C进进 C出出 B出出 ACBA进进 B进进 B出出 A出出 C进进 C出出 BACA进进 B进进 B出出 C进进 C出出 A出出 BCAA进进 B进进 C进进 C出出 B出出 A出出 CBA不可能产生输出
5、序列不可能产生输出序列CAB数数 据据 结结 构构 测测 绘绘 学学 院院 43512不可能实现,主要是其中的不可能实现,主要是其中的12顺序不能顺序不能实现;实现; 12345的输出可以实现,只需压入一个立即弹的输出可以实现,只需压入一个立即弹出一个即可。出一个即可。 答:答:数数 据据 结结 构构 测测 绘绘 学学 院院二、二、 顺序栈顺序栈 由于栈是运算受限的线性表,因此线性表的存储由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。结构对栈也适应。 栈的顺序存储结构简称为顺序栈,它是运算受限栈的顺序存储结构简称为顺序栈,它是运算受限的线性表。因此,可用数组来实现顺序栈。因为栈底的
6、线性表。因此,可用数组来实现顺序栈。因为栈底位置是固定不变的,所以可以将栈底位置设置在数组位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,故需用一个整型变量操作而变化的,故需用一个整型变量top来指示当前来指示当前栈顶的位置,通常称栈顶的位置,通常称top为栈顶指针。为栈顶指针。数数 据据 结结 构构 测测 绘绘 学学 院院因此,顺序栈的类型定义只需将顺序表的类因此,顺序栈的类型定义只需将顺序表的类型定义中的长度属性改为型定义中的长度属性改为top即可。顺序栈即可。顺序栈的类型定义如下(的类
7、型定义如下(静态)静态) # define StackSize 100 typedef struct ElemType dataStackSize; int top; SeqStack; 数数 据据 结结 构构 测测 绘绘 学学 院院/- 栈的顺序存储表示栈的顺序存储表示 -(动态) #define STACK_INIT_SIZE 100; #define STACKINCREMENT 10; typedef struct SElemType *base; SElemType *top; int stacksize; SqStack;数数 据据 结结 构构 测测 绘绘 学学 院院top=012
8、3450栈空栈空栈顶指针栈顶指针top,指向实际栈顶指向实际栈顶后的空位置,初值为后的空位置,初值为0top123450进栈进栈Atop出栈出栈栈满栈满BCDEF设数组维数为设数组维数为Mtop=0,栈空,此时出栈,则栈空,此时出栈,则下溢下溢(underflow)top=M,栈满,此时入栈,则栈满,此时入栈,则上溢上溢(overflow)toptoptoptoptop123450ABCDEFtoptoptoptoptoptop栈空栈空栈顶栈顶top 的值为下一个将要进栈的元素下标。的值为下一个将要进栈的元素下标。数数 据据 结结 构构 测测 绘绘 学学 院院 设设S S是是SeqStackS
9、eqStack类型的指针变量。若栈底位置在向类型的指针变量。若栈底位置在向量的低端,即量的低端,即s sdata0data0是栈底元素,那么栈顶指针是栈底元素,那么栈顶指针s stoptop是正向增加的,即进栈时需将是正向增加的,即进栈时需将s stoptop加加1 1,退,退栈时需将栈时需将s stop top 减减1 1。 因此,因此,s stop=0top=0表示空栈,表示空栈, s stop =stacksizetop =stacksize表示栈满。当栈满时再做进栈运算必定产生空间溢出表示栈满。当栈满时再做进栈运算必定产生空间溢出,简称,简称“上溢上溢”; ;当栈空时再做退栈运算也将产
10、生溢当栈空时再做退栈运算也将产生溢出,简称出,简称“下溢下溢”。上溢是一种出错状态,应该设法。上溢是一种出错状态,应该设法避免之;下溢则可能是正常现象,因为栈在程序中使避免之;下溢则可能是正常现象,因为栈在程序中使用时,其初态或终态都是空栈,所以下溢常常用来作用时,其初态或终态都是空栈,所以下溢常常用来作为程序控制转移的条件。为程序控制转移的条件。数数 据据 结结 构构 测测 绘绘 学学 院院1 1、置空栈、置空栈 void initstack(seqstack void initstack(seqstack * *s)s) s stop=0;top=0; 2 2、判断栈空、判断栈空 int
11、stackempty(seqstack int stackempty(seqstack * *s)s) return(s return(stop=0);top=0); 数数 据据 结结 构构 测测 绘绘 学学 院院3、判断栈满、判断栈满 int stackfull(seqstack *s) return(stop=stacksize); 4、进栈、进栈 void push(seqstack *s,ElemType x) if (stackfull(s) error(“stack overflow”); sdatastop+=x; 数数 据据 结结 构构 测测 绘绘 学学 院院5 5、退栈、退栈
12、 void pop(seqstack void pop(seqstack * *s,ElemType s,ElemType * *x)x) if(stackempty(s) if(stackempty(s) error( error(“stack underflowstack underflow”);); s stop-;top-; * *x=sx=sdatatop;datatop; 数数 据据 结结 构构 测测 绘绘 学学 院院6 6、取栈顶元素、取栈顶元素 ElemType stacktop(seqstack *s) if(stackempty(s) error(“stack is emp
13、ty”); return sdatastop-1; 数数 据据 结结 构构 测测 绘绘 学学 院院3.1.3 链栈链栈 栈的链式存储结构称为链栈,它的运算是受限的单链表,插入和删除操作仅限制在表头位置上进行。由于只能在链表头部进行操作,故链表可以没有必要像单链表那样附加头结点。栈顶指针就是链表的头指针。 链栈的类型说明如下: 数数 据据 结结 构构 测测 绘绘 学学 院院栈的链接存储结构链栈的结点定义链栈的结点定义typedef struct node ElemType data; struct node *next; LinkStack; 数数 据据 结结 构构 测测 绘绘 学学 院院栈的链
14、接表示 链式栈 链式栈无栈满问题,空间可扩充 插入与删除仅在栈顶处执行 链式栈的栈顶在链头 适合于多栈操作数数 据据 结结 构构 测测 绘绘 学学 院院在链栈中在链栈中,栈的基本运算算法如下栈的基本运算算法如下: (1)初始化栈初始化栈initStack(&L) 建立一个空栈建立一个空栈L。实际上是创建链栈的头结点。实际上是创建链栈的头结点,并将其并将其next域置为域置为NULL。对应算法如下。对应算法如下: void InitStack(ListStack *&L) L=(ListStack *)malloc(sizeof(ListStack);L-next=NULL; 数数 据据 结结
15、构构 测测 绘绘 学学 院院 (2)销毁栈销毁栈ClearStack(&L) 释放栈释放栈L L占用的全部存储空间。对应算法如下占用的全部存储空间。对应算法如下: : void ClearStack(ListStack *&L) ListStack *p=L-next;while (p!=NULL)free(L);L=p;p=p-next; 数数 据据 结结 构构 测测 绘绘 学学 院院 ( (3)求栈的长度求栈的长度StackLength(L) 从第一个数据结点开始扫描单链表从第一个数据结点开始扫描单链表,用用i记录访问的记录访问的数据结点个数数据结点个数,最后返回最后返回i值。对应算法如下
展开阅读全文