数据结构第四章栈和队列.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构(第四章 栈和队列);现实生活中的一些线性数据结构的事例: 递归问题的解决方法 表达式的计算:如5+(4-3×(5+2)) 排队等车的队列 栈和队列的特点: 它们的状态是不断变化的 添加和删除是它们共同的操作 添加和删除在特定的位置(哪些位置???) 考虑:此类数据结构应该对用户提供哪些操作?;栈和队列;可将线性表和栈及队列的插入和删除操作对比如下: ;主要内容;4.1 栈;栈的操作 习惯上将每次删除(也称为退栈)操作又称为出栈或弹出(POP)操作。删除的元素总是当前栈中“最新”的元素(栈顶元素)。 每次插入(称为进栈)操作称为入栈或压入(PUSH)操作,入栈的元素总是当前栈中“最新”的元素。 在空栈中最先插入的元素总被放在栈的底部,只有所有元素被弹出之后它才能被删除。;base;base; ;图4.1 栈(顺序栈)及其状态变化:{A, B, C, D} {入栈, 入栈, 出栈, 入栈, 入栈, 出栈, 出栈, 出栈} ;栈的数据元素;栈的运算;栈的溢出;栈抽象数据类型ADT,栈接口;总结 栈的运算规则是按后进先出的原则进行的(又称为后进先出),简称为LIFO(last in first out)表。 就线性表而言,实现栈的方法有很多,由于栈也是线性表,因此线性表的存储结构对栈也适用,我们着重介绍顺序栈(arrary-based stack)和链式栈(linked stack) ,它们类似于顺序表和链式表。 这两种存储结构的不同,则使得实现栈的基本运算的算法也有所不同。;栈的表示和实现; 能否使用一个线性表对象作为栈,或将栈声明为继承线性表?入栈调用insert(0,x)函数,出栈调用remove(0)函数?为什么? 【习题解答】都不能。 ;由于栈是运算受限的线性表,因此线性表的存储结构对栈也适应。 栈的顺序存储结构简称为顺序栈(Sequential Stack),它是运算受限的线性表。因此,可用数组来实现顺序栈。 因为栈底位置是固定不变的,所以可以将栈底位置设置在数组的两端的任何一个端点;栈顶位置是随着进栈和退栈操作而变化的,一般需用一个整型变量top。;顺序栈的操作实例如上图所示;栈的顺序存储结构及操作实现 public class SeqStackT implements StackT //顺序栈类,实现栈接口 { Object element[]; //存储栈数据元素的数组 int top; //栈顶元素下标 } 注意:element数组存储栈的数据元素;top表示当前栈顶元素的下标。;基于数组的顺序栈(经典实现);栈的运算主要考虑栈的入栈和出栈算法: 其原因是在栈的基本运算中有六种:判断栈空、栈初始化、判断栈满(仅限于顺序存储的情况下),入栈元素、出栈元素、取栈顶元素等 而入栈时需要考虑的操作步骤是: 栈初始化,然后判断栈是否为满,如果不满,则可以插入元素(入栈) 出栈时,需要考虑的步骤是: 判断栈是否为空,如果不空,删除元素(出栈),出栈之前,保存栈顶元素。 也就是说,栈的入出栈运算包含了其他的六种基本运算,取栈顶元素的运算,只是不用修改栈顶的指针而已。 ;(1)栈的初始化 public SeqStack(int size) //构造容量为size的空栈 { this.element = new Object[Math.abs(size)]; this.top=-1; } public SeqStack() //构造默认容量的空栈 { this(64); };(2)判读栈是否为空 public boolean isEmpty() //判断栈是否空,若空返回true { return this.top==-1; } ;判读栈是否为满??? 本实现采用与顺序表同样的处理:当容量不够时,则将数组容量扩充一倍。;(3)入栈 空元素不能入栈 栈的容量不够时,数组容量倍增 栈顶元素top加1,将element放入top位置,作为新的栈顶元素 public void push(T x) //元素x入栈,空对象不能入栈 { if (x==null) return; //空对象不能入栈 if (this.top==element.length-1)

文档评论(0)

159****1748 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档