队列
它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。
单向队列只能一段删除一端插入,由于队列长度是固定的,当元素删除之后,位置就空下来,但是插入的时候却不能使用这些位置。
所以采用循环队列
java实现单向队列
public class MyQueue {
//队列数据
private Object[] data;
//前端
private int front;
//后端
private int rear;
//队列的大小
private int maxSize;
//队列中实际元素的数量
private int nItems;
public MyQueue(int s) {
maxSize = s;
data = new Object[s];
front = 0;
rear = -1;
nItems = 0;
}
//新增元素
public void insert(int val) {
if (isFull()) {
System.out.println("队列已满");
} else {
//如果队列 尾部指向最后一个元素,那么循环回来,执行队列的第一个元素
if (rear == maxSize - 1) {
rear = -1;
}
//队尾指针加1,然后在队尾指针处插入新数据
data[++rear] = val;
//元素个数+1
nItems++;
}
}
//移除数据
public Object remove() {
Object removeVal = null;
if (!isEmpty()) {
removeVal = data[front];
data[front] = null;
front++;
if (front == maxSize) {
front = 0;
}
nItems--;
}
return removeVal;
}
//获取队头数据
public Object peekFront(){
return data[front];
}
//判断队列是否满了
private boolean isFull() {
return nItems == maxSize;
}
//判断是否为空的
public boolean isEmpty() {
return nItems == 0;
}
//元素个数
public int getSize(){
return nItems;
}
}
参考:https://mp.weixin.qq.com/s/zCwtmiOhlukexyU8f5JbEQ?v=1
https://www.cnblogs.com/ysocean/p/7921930.html