045046数据结构和算法的Java实现栈队列课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《045046数据结构和算法的Java实现栈队列课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 045046 数据结构 算法 Java 实现 队列 课件
- 资源描述:
-
1、2006Java高级程序设计高级程序设计专业教程专业教程理论讲解部分理论讲解部分 2006课程概述课程概述栈队列重点重点栈队列难点难点栈队列学习目标学习目标掌握栈使用掌握队列的使用2006 栈只允许访问一个数据项:即最后插入的数据项。移除这个数据项后才能访问倒数第二个插入的数据项,依此类推。这种机制在不少编程环境中都很有用。栈提供了一种“后入先出”的一种数据结构 栈是一块连续的(物理的或者逻辑的)存储区域.有两个标识标志出栈的两个端点 栈底和栈顶.栈需要提供2个最基本的操作压入(push)和弹出(pop)6.4 堆栈2006下面我们用一个数组来实现一个最简单的栈.private int sta
2、ck;但是,只有一个数组还无法实现栈得功能,我们还需要一些标识.private final int SIZE;private final int BOTTOM=0;private int top;其中,SIZE是数组得大小,栈得大小要比数组得小1个,随后我们会解释原因.当这个栈被创建后其大小不会改变,所以我们定义它为final(不会改变得变量).BOTTOM标识着这个栈得栈底,它始终为数组得第一个元素,所以为final得0.top标识着这个栈得栈顶,它会随着栈得使用变化.6.4 堆栈2006初始化栈初始化栈BOTTOMtop0SIZE当这个栈被初始化之后,如图SIZE=size;stack=n
3、ew intSIZE;top=BOTTOM;初始化代码如下:其中,size为初始化参数.可以当作已知量.6.4 堆栈2006栈被初始化时有一下几点:2.栈底通常定义于存储空间得一段,而且通常是固定得.1.存储空间得初始化.如果是动态的仅仅需要得到其大小及初始空间得创建.3.令栈顶指向栈底.这里我们只需令top=BOTTOM;此时,一个空栈被创建.6.4 堆栈2006一个栈被建立,我们需要在任意时刻需要了解到它得情况,比如是否为空.下面我们来看看如何判断一个栈是否为空.public boolean isEmpty()if(top!=BOTTOM)return false;elsereturn t
4、rue;判断得依据是依靠判断top与BOTTOM的关系.当top=BOTTOM时,此时栈为空,否则栈非空.6.4 堆栈2006空栈空栈BOTTOMtop0SIZE12BOTTOMtopSIZE0非空栈非空栈6.4 堆栈2006同样,我们还需要在任何时刻需要判断栈是否为满栈.public boolean isFull()if(top!=SIZE)return false;elsereturn true;判断得依据是依靠判断top与SIZE的关系.当top=SIZE时,此时栈为满,否则栈不满.6.4 堆栈2006空栈空栈1234567BOTTOM0SIZE12BOTTOMtopSIZE0非空栈非空
5、栈top注意注意:这里需要声明一点,top指向的是下一个将要使用的空间.为了数组的安全,不至越界.通常top=SIZE定义为满栈.这就是为什么栈的空间比数组的小的原因.6.4 堆栈2006栈是要用来存储数据的,数据被存储到栈中,这个动作叫入栈或者压栈.下面我们来看看压栈的实现.public synchronized void push(int data)throws IllegalStateExceptionif(!isFull()stacktop+=data;elsethrow new IllegalStateException(Stack is overload.);6.4 堆栈2006这
6、里我们要注意入栈的步骤:1.需要判断栈是否是满栈,如果栈满,那么返回一个异常说明栈已经满了.无法在使其它元素入栈.如果栈非满,那么继续.2.将数据存储到top指向的空间.由于top始终指向第一个未使用的空间.所以可以将数据存储进去.3.将top向栈底反向移动一个单位.注意,第2步与第3步千万不能颠倒.否则会引起栈的存储异常.6.4 堆栈2006123BOTTOMtopSIZE0第第3步步123BOTTOMtopSIZE0第第2步步第第1步步判断12BOTTOMtopSIZE0将3写入top指向位置top+6.4 堆栈2006当需要从栈中取出数据时,只能从栈顶取出,这个动作叫出栈.我们来看看po
7、p如何实现.public synchronized int pop()throws IllegalStateExceptionif(!isEmpty()return stack-top;elsethrow new IllegalStateException(Stack is empty.);6.4 堆栈2006这里我们要注意出栈的步骤:1.需要判断栈是否是空栈,如果栈空,那么返回一个异常说明栈已经空了.无法弹出.如果栈非空,那么继续.3.将top指向的数据返回.栈空间中的数据实际上是没有被删除的,但是对于栈来说,该数据已经没有任何意义.当下一次使用该空间时,它会被当作空,由新的数据覆盖掉.2.
8、将top向栈底方向移动一个单位.注意,第2步与第3步千万不能颠倒.否则会引起栈的存储异常.6.4 堆栈200612345BOTTOMtopSIZE0第第3步步12345BOTTOMtopSIZE0第第2步步第第1步步判断12345BOTTOMtopSIZE0top-将top指向内容返回6.4 堆栈2006 细心的同学会注意到,在push()pop()方法中都使用了synchronized 关键字.这是为了使入栈与出栈操作原子化,就是说在入栈与出栈的操作过程中是不允许其它操作干扰的.有了同步的保障,栈的工作才不会出现异常.下面给出程序的完整代码,及必要注释.6.4 堆栈2006public cl
9、ass MyStack private int stack;private final int SIZE;private final int BOTTOM=0;private int top;public MyStack(int size)super();SIZE=size;stack=new intSIZE;top=BOTTOM;栈所需要的空间及标志构造函数,当该类被实例化后,一个栈就创建了.2006public synchronized void push(int data)throws IllegalStateExceptionif(!isFull()stacktop+=data;els
10、ethrow new IllegalStateException(Stack is overload.);public synchronized int pop()throws IllegalStateExceptionif(!isEmpty()return stack-top;elsethrow new IllegalStateException(Stack is empty.);6.4 堆栈2006public boolean isEmpty()if(top!=BOTTOM)return false;elsereturn true;public boolean isFull()if(top
展开阅读全文