简介:队列是一种特殊的线性表,只能在前端(front)进行删除操作,只能在后端(rear)进行删除操作;队列分为顺序队列和循环队列;
顺序队列:每次插入,队尾指针rear加一,每次删除,队首指针front加一;
循环队列:同顺序队列一样的操作,但在队尾指针达到容器末端的时候,需要将队尾指针指向数组下标0的位置,以便于重复利用删除过值的空间;
队列原理:队列,不如说数组队列,相当于也是一个数组的变体,通过数组下标的控制来实现增、删、查、判空、判满等功能;主要是用一个队首指针和队尾指针的位置来监听整个队列的变化,循环的实现也是如此;
java 代码:
public class Queue {
//队列类
//基本的属性
private int maxSize; //队列长度
private int[] queArray; //队列数组
private int front; //队首指针
private int rear; //队尾指针
private int count; //元素个数
//队列构造器
public Queue(int s) {
maxSize = s;
queArray = new int[maxSize];
front = 0;
rear = -1;
count = 0;
}
//插入队尾元素
public void insert(int i) {
if (rear == maxSize-1) {
rear = -1;
}
queArray[++rear] = i;
count++;
}
//移除队首元素
public int remove() {
int temp = queArray[front++];
if (front == maxSize) {
front = 0;
}
count--;
return temp;
}
//查询队首元素
public int peekFront() {
return queArray[front];
}
//判断队列是否为空
public boolean isEmpty() {
return (count == 0);
}
//判断队列是否已满
public boolean isFull() {
return (count == maxSize);
}
//获取队列中的元素个数
public int size() {
return count;
}
//获取队列的长度
public int getMaxSize() {
return maxSize;
}
}
public class Main {
public static void main(String[] args) {
Queue myQueue = new Queue(4);
for(int i = 0; i < myQueue.getMaxSize(); i++) {
myQueue.insert(i);
}
//移除队首的 0 1 2
myQueue.remove();
myQueue.remove();
myQueue.remove();
//在队尾插入4 5 6
myQueue.insert(4);
myQueue.insert(5);
myQueue.insert(6);
while(!myQueue.isEmpty()) {
System.out.print(myQueue.remove() + "\t");
}
}
}