队列是个有序表,可以使用数组或链表实现。
特点:遵循先进先出原则
缺点:目前的队列只能使用一次,没有达到复用的效果
package queue;
/**
* @author litianfu
* @version 1.0
* @email 1035869369@qq.com
* @date 2020-03-25 11:48
* 使用数组实现队列
*/
public class ArrayQueue {
public static void main(String[] args) {
Queue queue = new Queue(5);
queue.addQueue(1);
queue.addQueue(3);
queue.addQueue(5);
queue.showQueue();
System.out.println("queue.peek() = " + queue.peek());
System.out.println("queue.getQueue() = " + queue.getQueue());
queue.showQueue();
}
}
class Queue {
/**
* 队列最大容量
*/
private Integer maxSize;
/**
* 队列头指针
*/
private Integer front;
/**
* 队列尾指针
*/
private Integer rear;
/**
* 用于存放数据
*/
private int[] arr;
/**
* 初始化队列
*
* @param maxSize
*/
public Queue(Integer maxSize) {
this.maxSize = maxSize;
arr = new int[maxSize];
//指向队列头,该指针是指向队首的前一个位置
front = -1;
//指向队列尾,就是队列最后一个数据
rear = -1;
}
/**
* 判断队列满,当rear尾指针指向maxSize-1时队列满
*
* @return
*/
public Boolean isFull() {
return rear == maxSize - 1;
}
/**
* 判断队列是否为空
*
* @return
*/
public Boolean isNull() {
return rear.equals(front);
}
/**
* 添加数据到队列中
*
* @param n
*/
public void addQueue(Integer n) {
//判满
if (isFull()) {
System.out.println("队列为满");
return;
} else {
//尾指针后移
rear++;
//赋值给队列
arr[rear] = n;
}
}
/**
* 获取队首数据,出队
*/
public Integer getQueue() {
//判空
if (isNull()) {
System.out.println("队列为空");
return -1;
} else {
//队首指针front后移
front++;
return arr[front];
}
}
/**
* 查看头数据,并不是取数据
*
* @return
*/
public Integer peek() {
if (isNull()) {
System.out.println("队列为空");
return -1;
}
return arr[front+1];
}
/**
* 遍历队列
*/
public void showQueue() {
if (isNull()) {
System.out.println("队列为空");
return;
}
System.out.println("***队尾***");
for (int i = rear; i >= front+1; i--) {
System.out.println("\t"+arr[i]);
}
System.out.println("***队首***");
}
}