数据结构与算法(三)- 队列
队列是一个有序表,可以用数组或链表来实现
遵循先入先出的原则。即:先存入队列的数据要先取出,后存入的要后出。
用数组模拟队列
-
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。
-
因为队列的输出、输入是分别从前后端来处理。因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变
- 初始化一个队列
/**
* 数组最大容量
*/
private int maxSize;
/**
* 队列头
*/
private int front;
/**
* 队列尾
*/
private int rear;
/**
* 队列
*/
private int[] arr;
- 构造函数
public Queue(int maxSize) {
this.maxSize = maxSize;
arr = new int[this.maxSize];
front = -1; // 指向队列头部
rear = -1; // 指向队列尾部
}
- 判空,判满
/**
* 判断队列是否满
* @return
*/
public boolean isFull(){
return rear == maxSize - 1;
}
/**
* 判断队列是否为空
* @return
*/
public boolean isEmpty(){
return front == rear;
}
- 入队
/**
* 添加数据进队列
* @param n
*/
public void addQueue(int n){
if (isFull()){
System.out.println("队列已满");
}else {
rear++;
arr[rear] = n;
System.out.println("已成功添加数据进队列");
}
}
- 出队
public int getQueue(){
if (isEmpty()){
System.out.println("队列中暂无数据");
return 0;
}else {
front++;
int frontNum = arr[front];
arr[front] = 0;
return frontNum;
}
}
个人理解:这种一次性队列,最重要的还是理解front和rear的概念