收藏 分享(赏)

常用的数据结构和算法5PPT课件..ppt

上传人:oil007 文档编号:3835786 上传时间:2018-11-20 格式:PPT 页数:26 大小:1.38MB
下载 相关 举报
常用的数据结构和算法5PPT课件..ppt_第1页
第1页 / 共26页
常用的数据结构和算法5PPT课件..ppt_第2页
第2页 / 共26页
常用的数据结构和算法5PPT课件..ppt_第3页
第3页 / 共26页
常用的数据结构和算法5PPT课件..ppt_第4页
第4页 / 共26页
常用的数据结构和算法5PPT课件..ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

1、深入Java编程,专业教程,理论讲解部分,Ver3.1,第022课 算法及数据结构,概述:,队列的概念队列的实现,重点:,难点:,队列的实现,队列的实现,5 队列,队列提供了一种“先入先出”的一种数据结构,队列是一块连续的(物理的或者逻辑的)存储区域.有两个标识标志出栈的两个端点 头和尾.,堆栈需要提供2个最基本的操作入队(offer)和出队(poll),第022课 算法及数据结构,第022课 算法及数据结构,下面我们以一个数组实现的循环队列为例,进行队列的讲解.,什么是循环队列,循环队列就是反复的利用同一块存储空间进行队列的移动.这种队列的好处,是不需要队列的整理.可以提高队列效率.,是将数

2、组的首尾相连,使移动到末端的队列仍旧可以继续爬行到数组的头部.,5 队列,5.1 队列的初始化,在进行具体的初始化之前,我们需要明确,如何实现队列在存储空间尾部可以自然的移动到存储空间头部.,队列的移动主要依靠两个变量来指示,head end.队列的移动方向定义为正方向.当head向正方向移动时,队列向着正方向减少.当end向正方向移动时,队列向着正方向增长.,end,head,end,head,end,head,第022课 算法及数据结构,初始状态,入队,出队,5 队列,当队列移动到存储空间边缘时会发生什么?,end,head,此时end将增加到什么地方?,end,head,第022课 算法

3、及数据结构,将end移动到数组头部. head也是同样的道理,5.1 队列的初始化,5 队列,第022课 算法及数据结构,因为head end都需要有这样的移动规则,所以给出一个next()方法来取得移动后的位置.,private int next(int i)return (i+1)%SIZE; ,5.1 队列的初始化,5 队列,下面我们来实现一个最简单的循环队列.,private final int SIZE; private int queue; private int head; private int end;,其中,SIZE是数组得大小.当这个队列被创建后其大小不会改变,所以我们定

4、义它为final(不会改变得变量).queue是存储数据的数组.head标识着队列的队首,也就是队列中的第一个元素.end标识着队列尾部,它是第一个未被使用的空间.,第022课 算法及数据结构,5.1 队列的初始化,5 队列,当这个队列被初始化之后,如图,SIZE = size; queue = new intSIZE; head = 0; end = 0;,初始化代码如下:,其中,size为初始化参数.可以当作已知量.,第022课 算法及数据结构,end,head,0,SIZE,5.1 队列的初始化,5 队列,一个栈被建立,我们需要在任意时刻需要了解到它得情况,比如是否为空.,队列是否为空主

5、要依靠head与end的位置关系.,public boolean isEmpty() return end = head; ,无论head与end在什么位置,当head = end时,此时队列为空,否则队列非空.,第022课 算法及数据结构,5.2 队列空的判断,5 队列,第022课 算法及数据结构,end,head,0,SIZE,空栈,非空栈,end,head,0,SIZE,5.2 队列空的判断,5 队列,同样,我们还需要在任何时刻需要判断栈是否为满栈.,public boolean isFull()return next(end) = head; ,当head前进的速度大于end的前进速度

6、,直到head如果再前进就把end覆盖的时候,此时队列就满了.,当next(end) = head时,此时栈为满,否则栈不满.,第022课 算法及数据结构,5.3 队列满的判断,5 队列,第022课 算法及数据结构,end,head,0,SIZE,满栈,非满栈,end,head,0,SIZE,5.3 队列满的判断,5 队列,将数据存储到队列中叫入队.入队的数据只能在当前的队尾之后添加.,下面我们来看看入队的实现.,public void offer(int data) throws Exceptionif(isFull()throw new Exception(“queue is full“)

7、;elsequeueend=data;end = next(end); ,第022课 算法及数据结构,5.4 入队,5 队列,这里我们要注意入队的步骤:,1.需要判断栈是否是满队,如果队满,那么返回一个异常说明队已经满了.无法在使其它元素入队.如果栈非满,那么继续.,2.将数据存储到end指向的空间.由于end始终指向第一个未使用的空间.所以可以将数据存储进去.,3.调用next()得到end的下一个位置并赋值.,注意,第2步与第3步千万不能颠倒.否则会引起栈的存储异常.,第022课 算法及数据结构,5.4 入队,5 队列,第022课 算法及数据结构,end,head,0,SIZE,end,h

8、ead,0,SIZE,end,head,0,SIZE,1.检查是否是满队,2.数据加入到end所指向的位置,3.将end向正方向移动,5.4 入队,5 队列,当需要从队列中取出数据时,只能从队列首部取出,这个动作叫出队.,我们来看看poll如何实现.,public int poll() throws Exceptionif(isEmpty()throw new Exception(“queue is empty“);elseint result = queuehead;head = next(head);return result; ,第022课 算法及数据结构,5.5 出队,5 队列,这里我

9、们要注意出队的步骤:,1.需要判断队是否是空队,如果队空,那么返回一个异常说明队已经空了.无法弹出.如果队非空,那么继续.,3.调用next()求出head得下一个位置然后移动.,2.将head指向元素保存等待返回.,注意,第2步与第3步千万不能颠倒.否则会引起队列的存储异常.,第022课 算法及数据结构,4.返回保存元素.,5.5 出队,5 队列,第022课 算法及数据结构,end,head,0,SIZE,end,head,0,SIZE,end,head,0,SIZE,1.检查是否是空队,2.将head指向元素保存,3.head向正方向移动,5.5 出队,5 队列,下面给出程序的完整代码,及

10、必要注释.,第022课 算法及数据结构,public class MyQueueprivate final int SIZE;private int queue;private int head;private int end;public MyQueue(int size) super();SIZE = size;queue = new intSIZE;head = 0;end = 0;,队列所需要的空间及标志,构造函数,当该类被实例化后,一个队列就创建了.,5 队列,private int next(int i)return (i+1)%SIZE; public boolean isFul

11、l()return next(end) = head; public void offer(int data) throws Exceptionif(isFull()throw new Exception(“queue is full“);elsequeueend=data;end = next(end); ,第022课 算法及数据结构,5 队列,public int poll() throws Exceptionif(isEmpty()throw new Exception(“queue is empty“);elseint result = queuehead;head = next(he

12、ad);return result; public int size() return (end+SIZE)-head)%SIZE; public boolean isEmpty() return end = head; ,第022课 算法及数据结构,求出队列得大小,5 队列,小结:,队列的定义满队的条件空队的条件入队的操作顺序出队的操作顺序,第022课 算法及数据结构,1、队列是一种( )的存储结构A) 先进先出 B)后进先出 C)先进后出 D)任意进出 2、判断队列空的条件是( )A)head = end B)head = next(end)C)head = SIZE D)end = 0

13、3、判断队列满的条件是( )A)head = end B)head = next(end)C)head = SIZE D)end = 0 4、入队的顺序( )A)next(end) B)判断队空 C)判断队满 D)数据写入end指向的位置 5、出队的顺序( )A) next(head) B)判断队空 C)判断队满 D)读出head指向的位置,小测验(单选题):,第022课 算法及数据结构,1、队列是一种(a)的存储结构A) 先进先出 B)后进先出 C)先进后出 D)任意进出 2、判断队列空的条件是(A)A)head = end B)head = next(end)C)head = SIZE D)end = 0 3、判断队列满的条件是(B)A)head = end B)head = next(end)C)head = SIZE D)end = 0 4、入队的顺序(CDA)A)next(end) B)判断队空 C)判断队满 D)数据写入end指向的位置 5、出队的顺序(BAD)A) next(head) B)判断队空 C)判断队满 D)读出head指向的位置,小测验(单选题答案):,第022课 算法及数据结构,使用队列实现一个模拟饭店排队现象.定时产生一个1-4随机数表示来的人数,然后使其进入队列.另一方面从队列中找出队首进行处理.,课后作业:,第022课 算法及数据结构,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报