35 _ 队列1 _ 什么是队列.swf

队列是一种可以实现一个先进先出的存储结构

什么是队列?

队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入的一端称为队尾(rear)。

栈,只能在栈顶进行操作,队列是一端进入,一端输出

队列也是头部和尾部

rear翻译的意思是:

后方的
font是前段的
 
队列分为两种:一种是使用数组来实现,一种是使用链表来实现

 

 

 队列添加数据只能在rear尾部添加,在font端进行删除

静态队列都是循环队列

1、静态队列为啥必须是循环队列

 

我们来分析下:

采用普通数组来实现队列会出现的问题:

pFont指向队列的第一个元素

pRear执行对应的最后的一个元素的下一个节点,该节点不存储有效的数据,就像链表的phead一样。例如上面存储 1 2 3 4 5 ,prear就在存储5节点的下一个节点,有效的数据是存储在 1 2 3 4 5 这五个节点中的。这样设计是便于队列的操作

删除元素的时候pFont向上移动,删除元素是在头部删除

添加元素的时候pRea向上移动

如果使用普通的数组来实现队列,当删除元素pFont向上移动的时候,例如删除-1,这个时候pFont向上移动到-2存储的位置,这个时候采用普通数组的方式存储-1的这个内存空间就被释放了,不能再被使用了,这种叫做队列的假溢出

添加元素和删除元素Frear和pFont都只能向上移动

当pFont向上移动和pRear重合的时候,说明队列为null

 

上面这种情况,rear已经到了数组的最尾的节点,rear不能再向上移动了,记住rear节点不存在有效的数据值,相当于链表中的pHead节点,现在队列中只存储了c这个值,现在我们要存储中这个值,假设rear是循环链表,此时将rear移动到链表的第一个元素节点的位置

在h的位置就能够存储中字了

现在队列中就有两个值,一个c,一个是中

当我们要删除一个元素的时候,pFont向上移动变成

 

 

 

此时队列中只有一个中字

当此时在添加一个国字,pRear向上移动

此时,我们删除中字,这个时候pFont已经达到了最后,不能再向上移动了,要不然就溢出了,让pFont指向第一个元素

 

 

所以数组现实队列必须是循环队列。

 

posted on 2017-06-05 18:51  luzhouxiaoshuai  阅读(323)  评论(0编辑  收藏  举报

导航