JAVA实现环形队列

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]



猜你喜欢

转载自blog.csdn.net/plank__123/article/details/80600981