public interface QueueInterface { public boolean isEmpty(); //前置条件:队列已存在 //输入:无 //功能:判断队列是否为空 //输出:如果队列为空,返回值为true;否则返回false //后置条件:队列不变 public boolean isFull(); //前置条件:队列已存在 //输入:无 //功能:判断队列是否已满 //输出:如果队列已满,返回值为true;否则返回false //后置条件:队列不变 public void enqueue(Object data)throws Exception; //前置条件:队列已存在 //输入:元素值data //功能:入队操作,在队尾插入一个元素 //输出:如果插入不成功,抛出异常 //后置条件:如果插入成功,队尾增加一个元素 public Object dequeue()throws Exception; //前置条件:队列已存在 //输入:无 //功能:出队操作,删除队头元素 //输出:如果删除成功,返回被删除的元素值,否则,抛出异常 //后置条件:如果删除成功,队头减少一个元素 public void dequeueAll(); //前置条件:队列已存在 //输入:无 //功能:删除队列所有元素 //输出:无 //后置条件:队列初始化 public Object peek()throws Exception; //前置条件:队列已存在 //输入:无 //功能:读取队头元素 //输出:若队列不为空,返回队头元素,否则抛出异常 //后置条件:队列不变 }
import java.util.Arrays; public class Queue implements QueueInterface { private Object[] sequ; private final static int MaxSize=10; private static int rear,front,len; public Queue(){ //创建一个环形队列 front=0; //指向队头 rear=MaxSize-1; //指向队尾 len=0;//队列元素的个数 sequ=new Object[MaxSize];//队列的最大容量为10 } @Override public boolean isFull() { return len==MaxSize; } @Override public boolean isEmpty() { return len==0; } @Override public void enqueue(Object data) throws Exception { if(isFull()){ throw new Exception("队列已满"); } rear=(rear+1)%sequ.length; sequ[rear]=data; System.out.println("进队:"+data); len++; } @Override public Object dequeue() throws Exception { if(isEmpty()){ throw new RuntimeException("队列为空"); } else{ Object q=sequ[front]; sequ[front]=null; front=(front+1)%MaxSize; len--; return q; } } @Override public void dequeueAll() { sequ=new Object[MaxSize]; front=0; rear=MaxSize-1; len=0; } @Override public Object peek() throws Exception { if(isEmpty()){ throw new Exception("队列为空"); } else{ return sequ[front]; } } @Override public String toString() { return "Queue [sequ=" + Arrays.toString(sequ) + ", MaxSize=" + MaxSize + ", rear=" + rear + ", front=" + front + ", len=" + len + "]"; } public static void main(String[] args) throws Exception { Queue qu=new Queue(); qu.enqueue(5);//入队操作 qu.enqueue(8); qu.enqueue(58); qu.enqueue(32); qu.enqueue(8); System.out.println("出队:"+qu.dequeue()); System.out.println("出队:"+qu.dequeue()); System.out.println("出队:"+qu.dequeue()); System.out.println("出队:"+qu.dequeue()); System.out.println("出队::"+qu.dequeue()); qu.enqueue(58); qu.enqueue(32); qu.enqueue(14); qu.enqueue(14); qu.enqueue(10); qu.enqueue(7); qu.enqueue(98); System.out.println("当前队头元素:"+qu.peek()); System.out.println("队尾的位置为:"+Queue.rear+" 队头的位置为:"+Queue.front+" 队列的内含元素为: "+Queue.len); System.out.println(qu); } }
输出结果: 进队:5 进队:8 进队:58 进队:32 进队:8 出队:5 出队:8 出队:58 出队:32 出队::8 进队:58 进队:32 进队:14 进队:14 进队:10 进队:7 进队:98 当前队头元素:58 队尾的位置为:1 队头的位置为:5 队列的内含元素为: 7 Queue [sequ=[7, 98, null, null, null, 58, 32, 14, 14, 10], MaxSize=10, rear=1, front=5, len=7]