一、 队列介绍
队列遵循先入先出原则、可以用数组或者链表来模拟队列
二、 思路分析
1、数组模拟队列思路分析
设置队列头指针front 和尾指针rear;
a、判断队列是否为空 front == rear;
b、判断队列是否满了 rear<= maxSize;
c、 往队列中加元素addQueue rear++,添加数据前判断是否已经满了
d、 从队列中取数据getQueue rear - -,取数据前判断队列是否为空
缺点:存在假溢出的情况,删除数据之后,但是不能添加数据
2、数组模拟环形队列思路分析
front指向队列的第一个元素,rear指向元素后一个元素的下一位,约定空出一个元素。
a、判断队列是否为空 front == rear 为空
b、判断队列是否已经满了 (rear + 1) % maxSize == front
c、往队列中增加 rear = (rear+1)% maxSize
d、队列中有效数据 (rear + maxSize - front)% maxSize
三、 代码实现
1、数组模拟单队列代码实现
package stack;/*
*@Author:HQF
*@create:2021/12/10 19:27
*数组模拟队列
*/
public class arrayQueue {
public static void main(String[] args) {
}
class Stack{
private int rear = -1;
private int front = -1;
private int maxSize;
private int[] stack;
public Stack(int front, int rear, int maxSize) {
this.front = front;
this.rear= rear;
this.maxSize = maxSize;
stack = new int[maxSize];
}
/**
* 判断栈是否为空
*/
public boolean isNull(Stack stack) {
if (stack.rear == 0) {
return true;
}
return false;
}
/**
* 往栈中添加元素
*
*/
public void addElement(int number) {
rear ++;
stack[rear] = number;
}
/**
* 取栈中元素
*/
public int getElement() {
if (isNull()){
throw new RuntimeException("队列空,不能取数据");
}
front ++;
int element = stack[front];
return element;
}
/**
* 删除栈中元素
*/
public void delElement() {
front++;
}
}
}
2、数组模拟环形队列代码实现
package stack;/*
*@Author:HQF
*@create:2021/12/13 20:46
*/
public class ArrayRingList {
public static void main(String[] args) {
}
class RingList{
private int front = -1;
private int rear = -1;
private int maxSize;
private int[] arr;
public RingList(int front, int rear, int maxSize) {
this.front = front;
this.rear = rear;
this.maxSize = maxSize;
arr = new int[maxSize];
}
/**
* 判断队列是否为空
*/
public boolean isEmpty() {
return rear == front;
}
/**
* 判断队列是否已经满了
*/
public boolean isFull() {
return (rear + 1) % maxSize == front;
}
/**
* 往循环队列添加元素
*/
public void addElement(int element) {
arr[(rear + 1) % maxSize] = element;
}
/**
* 删除循环队列的元素
*
*/
public void delElement() {
front = (front + 1) % maxSize;
}
/**
* 查找循环队列头元素
*/
public int getElemnet() {
int number = arr[rear];
rear = (rear + 1) % maxSize;
return number;
}
}
}