/**
* 队列的接口
* 队列是一种先进先出的数据结构
* 队列支持的操作:
* 判断队列是否为空
* 判断队列是否已经满了
* 查看队列已经有多少元素
* 将一个元素入队
* 将一个元素出队
* 查看队头的元素,但不出队
* 队列在底层可以用数组实现,也可以用链表实现
* 但不管实现方式如何,都必须满足此接口中的规定
*/
public interface MyQueue<Item> extends Iterable<Item>{
/**
* 判断队列是否为空
* @return 如果队列为空,则返回true;否则,返回false
*/
public boolean isEmpty();
/**
* 判断队列是否为满,满了返回true,否则返回false
* @return
*/
public boolean isFull();
/**
* 返回队列中元素的个数
* @return 个数
*/
public int size();
/**
* 入队,将一个元素入队
* @param item 待入队的元素
* @return 入队成功返回true,否则返回false
*/
public boolean enqueue(Item item);
/**
* 将一个元素出队
* @return 出队成功返回出队的元素,否则返回null
*/
public Item dequeue();
/**
* 查看队列头部的元素,但不出队
* @return 队列头部的元素,如果没有元素,返回null
*/
public Item get();
}
以上是队列的接口,接下来用数组来实现队列。
/**
* 队列的具体实现,底层使用数组实现
* 数组的实现也分几种情况
*版本1中,维护两个索引,front和rear
* 初始状态front和rear都在-1的位置(假想有-1的位置)
* 第一个元素入队的时候,front=0、rear++、再入队
* 出队的时候,正常情况下front++就可以,但是当front和rear相同的时候出队,那么就把front和rear初始化为-1
* 队列空的条件为front=-1;
* 队列满的条件为(rear+1)%maxsize==front
* Queue还要满足foreach的自动迭代,所以需要实现Iterable<Item>接口
*/
public class ArrayQueueVersion1<Item> implements MyQueue<Item>{
private Item[] items;
private int front;
private int rear;
private int maxsize;
public ArrayQueueVersion1() {
thi