前言
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
具体实现
- 接口
public interface Queue<T> {
/**
* 添加元素
* @param t
*/
void enqueue(T t);
/**
* 元素出队
* @return
*/
T dequeue();
/**
* 获取队首元素
* @return
*/
T getFront();
/**
* 获取队列长度
* @return
*/
int getSize();
/**
* 是否为空
* @return
*/
boolean isEmpty();
}
- 实现类
public class ArrayQueue<T> implements Queue<T> {
Array<T> data;
/**
* 构造方法
* @param capacity
*/
public ArrayQueue(int capacity) {
data = new Array<>(10);
}
/**
* 构造方法
*/
public ArrayQueue() {
data = new Array<>();
}
/**
* 添加元素
* @param t
*/
@Override
public void enqueue(T t) {
data.addLast(t);
}
/**
* 元素出队
* @return
*/
@Override
public T dequeue() {
return data.removeFirst();
}
/**
* 获取队首元素
* @return
*/
@Override
public T getFront() {
return data.getFirst();
}
/**
* 获取队列长度
* @return
*/
@Override
public int getSize() {
return data.getSize();
}
/**
* 是否为空
* @return
*/
@Override
public boolean isEmpty() {
return false;
}
/**
* 获取队列容量
* @return
*/
public int getCapacity() {
return data.getCapacity();
}
/**
* 重写toString方法
* @return
*/
@Override
public String toString() {
StringBuilder resp = new StringBuilder();
resp.append("Queue: front [");
for (int i = 0; i < data.getSize(); i ++) {
resp.append(data.get(i));
if (i != data.getSize() - 1) {
resp.append(",");
}
}
resp.append("] tail");
return resp.toString();
}
public static void main(String[] args) {
ArrayQueue<Integer> arrayQueue = new ArrayQueue<>();
for (int i = 0; i < 10; i++) {
arrayQueue.enqueue(i);
System.out.println(arrayQueue);
if (i % 3 == 2) {
arrayQueue.dequeue();
System.out.println(arrayQueue);
}
}
}
}