2.数组模拟环形队列

package queue;



public class ArrayQueue<T>{
	private int front;//队列头,指向队列的第一个位置
	private int rear;//队列尾,指向队列元素最后一个位置的下一个元素
	private int maxSize;//数组容量
	private T[] arr;//存储队列的数组
	
	public ArrayQueue(){
		this.front = 0;
		this.rear = 0;
		this.maxSize = 5;//默认队列容量是5
		this.arr = (T[]) new Object[maxSize];
	}
	
	public ArrayQueue(int maxSize) {
		this.front = 0;
		this.rear = 0;
		this.maxSize = maxSize;
		this.arr = (T[]) new Object[maxSize];
	}
	
	
	/**
	 * 判断队列是否为空
	 * @return true表示队列为空
	 */
	public boolean isEmpty() {
		if(front == rear) {
			return true;
		}
		return false;
	}
	
	/**
	 * 判断队列是否为满
	 * @return true表示队列为满
	 */
	public boolean isFull() {
		if((rear + 1)%maxSize == front) {
			return true;
		}
		return false;
	}
	
	/**
	 * 添加一个元素
	 * @param t
	 */
	public void add(T t) {
		if(this.isFull()) {
			System.out.println("队列已满!");
			return;
		}
		arr[rear] = t;
		rear = (rear + 1) % maxSize;
	}
	
	/**
	 * 出队
	 * @return 返回队头元素
	 */
	public T delete() {
		if(this.isEmpty()) {
			System.out.println("队列为空!");
			return null;
		}
		T t = arr[front];
		front = (front + 1) % maxSize;
		return t;
	}
	
	//获取队头元素值,但不取出
	public T getHead() {
		if(isEmpty()) {
			System.out.println("队列为空!");
			return null;
		}
		return arr[front];
	}
	
	//获取队列长度
	public int size() {
		if (isEmpty()) {
			return 0;
		}
		return (rear-front+maxSize)%maxSize;
	}
	
	//展示队列
	public void show() {
		if (isEmpty()) {
			System.out.println("队列为空!");
			return;
		}
		int size = size();
		for(int i=0;i<size;i++) {
			System.out.println(arr[(front+i)%maxSize]);
		}
		
	}
	
}
java
posted @ 2021-04-17 23:49  Forrestyu  阅读(57)  评论(0)    收藏  举报