第3章 栈和队列.pptx

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第3章栈和队列

教学要求相关知识点相关术语:栈、队列物理结构:顺序栈、链栈、顺序队列、链队列学习重点栈的逻辑结构、存储结构及其相关算法队列的逻辑结构、存储结构及其相关算法

目录队列本章小结3栈12

3.1栈

3.1栈栈的定义栈(Stack)是限定仅在表的一端进行插入和删除操作的线性表。允许插入和删除的一端称为栈顶(top),另一端称为栈底(base)。不含任何数据元素的栈称为空栈。假设栈S=(a0,a1,…,an-1),则称a0为栈底元素,an-1为栈顶元素。栈中元素按a1,a2,…,an-1的顺序进栈,退栈从栈顶元素开始出栈。所以,栈的修改是按后进先出的原则进行的。因此,栈又称为后进先出(LIFO:lastinfirstout)的线性表。

3.1栈栈的顺序存储与操作1.顺序栈的定义顺序栈是指利用顺序存储分配方式来实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。通常用一维数组存储数据元素,并预设一个最大空间。把数组中下标为0的一端作为栈底,为了指示栈中元素的位置,定义top指示栈顶元素在顺序栈中的位置。

3.1栈顺序栈分为静态顺序存储和动态顺序存储,静态顺序存储的栈一次性分配空间,在栈满后不能追加空间进行入栈操作,而动态顺序存储是在静态顺序存储的基础上增加了可追加空间的功能。静态存储是将top定义为整数,而动态存储是将top定义为指针。top可以指向栈顶元素的下一个位置,也可以指向栈顶元素。

3.1栈(1)栈的静态分配顺序存储结构描述#defineMaxSize100 /*定义静态栈最大长度*/typedefstruct{SElemTypebase[MaxSize];/*定义一个存放栈数据元素的一维数组*/inttop;/*栈顶指针*,可以指向栈顶元素的下一位置或者指向栈顶元素/intStackSize;/*存储顺序栈的当前长度*/}SeqStack;

3.1栈我们使用数组来实现栈中元素的存储,并设存储栈元素的数组长度为StackSize。当栈满时再进行进栈运算必定产生溢出,简称“上溢”;当栈空时再做退栈运算也将产生溢出,简称“下溢”。上溢是一种出错状态,应该设法避免。下溢是正常现象,常常用来作为程序控制转移的条件。

3.1栈①top为整数且指向栈顶元素的下一个位置当top为整数且指向栈顶元素的下一个位置时,初始化条件为S.top=0。(a)栈空S.top==0(b)入栈S.base[S.top++]=e

3.1栈(c)栈满S.top=MaxSize(d)出栈*e=S.base[--S.top]

3.1栈②top为整数且指向栈顶元素当top为整数且指向栈顶元素时,初始化条件S.top=-1(a)栈空S.top==-1(b)元素入栈S.base[++S.top]=e

3.1栈(c)栈满S.top=MaxSize-1(d)元素出栈*e=S.base[S.top--]

3.1栈(2)栈的动态分配顺序存储结构描述栈的动态分配顺序存储结构是通过将top定义为指针来实现的。#defineSTACK_INIT_SIZE10 /*存储空间初始化分配量*/#defineSTACK_INCREMENT2 /*存储空间分配增量*/typedefintSElemType;

3.1栈typedefstructSqStack{SElemType*base;/*栈底指针,始终指向栈底的位置*/int*top; /*栈顶指针,可以指向栈顶元素的下一个位置或者指向栈顶元素*/intStackSize; /*当前分配的栈可使用的以元素为单位的最大存储容量*/}SqStack; /*顺序栈*/

3.1栈①top为指针且指向栈顶元素的下一个位置当top为指针且指向栈顶元素的下一个位置时,初始化条件为S.top=S.base。(a)栈空S.top==S.base(b)元素入栈*S.top++=e

3.1栈(c)栈满S.top-S.base=StackSize(d)元素出栈*e=*--S.top

3.1栈②top为指针且指向栈顶元素当top为指针且指向栈顶元素时,初始化条件为S.top=S.base-1。(a)栈空S.top==S.base-1(b)元素入栈*++S.top=e

3.1栈(c)栈满S.top-S.base+1=StackSize(d)元素出栈*e=*S.top--

3.1栈2.顺序栈的基本操作(top为指针且指向栈顶元素下一个位置的动态顺序栈存储的基本操作)(1)

文档评论(0)

执着仅一次 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档