队列的抽象数据类型定义为:
数據对象集:一个有0个或多个元素的有穷线性表
操作集:对于一个长度为正整数MaxSize的队列Q∈Queue, 记队列中的任一元素item∈ElementType有:
(5)ElementType DeleteQ(Queue Q):若队列为空,返回队列为空的信息;否则把队头元素先用临时变量存储起来并从队列中删去,最后返回队头元素
为了解决队尾溢出(假溢出)而实际上数组仍然有多余空间的问题,我们运用循环队列解决问题
此时需要定义一个front和rear分别指向队列的头元素的前一个位置和尾元素,并且开始时都初始化成0;
当插入和删除操作的作用单元达到数组的末端后用公式“rear(或front)%数组长度”取余运算就可以实现折返到起始单元。
队满的条件是:“(rear+1)%数组长度”等于front;队空的条件为:rear等于front
循环队列的顺序存储结构的定义可以如下:
循环队列的插入操作如下:
循环队列的删除操作如下:
// 删除队头元素并把队头元素返回
循环队列的遍历队列,这个是我自己摸索了几遍才出来的所以想记录一下,具体操作如下:
如果您只想迭代请使用for-each循环或矗接使用Iterator
的for循环。这不会占用队列 如果需要使用步骤进行迭代,则可以使用此模式它通常适用于任何Iterable
。将跳过放入单独的可重用方法使得代码比具有两个嵌套for循环更清晰
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。