循环队列的JAVA实现

循环队列1:(通过预留一个元素空间来判断队空或队满) 

public class SqQueue {
	private final int MAXSIZE = 100;
	int rear;
	int front;
	int[] data = new int[MAXSIZE];

	public void add(int a) {
		if ((rear + 1) % MAXSIZE == front)// 判断循环队列满
			throw new ArrayIndexOutOfBoundsException(front);
		data[rear] = a;
		rear++;
		rear = (rear + 1) % MAXSIZE;

	}

	public int poll() {
		if (front == rear)// 判断循环队列为空
			throw new ArrayIndexOutOfBoundsException(front);
		int val = data[front];
		front++;
		front = (front + 1) % MAXSIZE;
		return val;
	}

	public int size() {
		return (rear - front + MAXSIZE) % MAXSIZE;
	}

}

循环队列2:(通过设置标志位来判断队空或队满)

public class SqQueue2 {
	private final int MAXSIZE = 100;
	int rear;
	int front;
	int length;
	int[] data = new int[MAXSIZE];

	public void add(int a) {
		if (MAXSIZE == length)// 判断循环队列满
			throw new ArrayIndexOutOfBoundsException("队满");
		data[rear] = a;
		rear++;
		rear = (rear + 1) % MAXSIZE;
		length++;
	}

	public int poll() {
		if (length == 0)// 判断循环队列为空
			throw new ArrayIndexOutOfBoundsException("队空");
		int val = data[front];
		front++;
		front = (front + 1) % MAXSIZE;
		length--;
		return val;
	}

	public int size() {
		return length;
	}
}

 

你可能感兴趣的:(Java)