(用来做笔记,欢迎交流讨论!)
程序包含以下几个方法:
1. public boolean isEmpty() //判队空
2. public boolean isFull() //判队满
3. public void EnQueue(T num) //入队
4. public void DeQueue() //出队
5. public void getFront() //读队头元素
贴上代码:
package com.fei.example.lib;
public class CirQueue<T> {
private T[] array;
private int maxSize;
private int front, rear;//rear指向队尾节点的下一个位置
public CirQueue(int maxSize) {
this.maxSize = maxSize;
array = (T[]) new Object[maxSize];
front = 0;
rear = 0;
}
//判队空
public boolean isEmpty() {
return front == rear;
}
//判队满
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
//入队
public void EnQueue(T num) {
if (isFull()) {
System.out.println("队满,进行扩容");
maxSize = maxSize + 10;
T[] newArray = (T[]) new Object[maxSize];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
array[rear] = num;
rear = (rear + 1) % maxSize;
}
//出队
public void DeQueue() {
if (isEmpty()) {
System.out.println("队为空");
return;
}
front = (front + 1) % maxSize;
}
//读队头元素
public void getFront() {
if (isEmpty()) {
System.out.println("队为空");
} else {
System.out.println(array[front]);
}
}
//测试数据
public static void main(String[] args) {
CirQueue<Integer> queue = new CirQueue<>(3);
queue.getFront();
queue.DeQueue();
queue.EnQueue(0);
queue.EnQueue(1);
queue.EnQueue(2);
queue.EnQueue(3);
queue.EnQueue(4);
queue.DeQueue();
queue.getFront();
}
}