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]