package com.zl;
/**
*
*使用循环数组实现队列,队列:先进先出
*/
public class ArrayQueue {
private int front = 0; //队头,出队使用
private int real = 0; //指向队尾后一个元素,入队使用
private int[] arr = null; //队列容器
private int maxSize = 0; //队列最大容量
public ArrayQueue(int number) { //初始化队列的大小
this.maxSize = number;
arr = new int [number];
}
//入队
public void add(int number) {
//判断队列是否满,满了不可入队
if(isFull()) {
System.out.println("队列满");
} else {
arr[real] = number;
real = (real + 1) % maxSize;
}
}
//出队
public void reduce() {
//判断队列是否空,空了没东西出队
if(isEmpty()) {
System.out.println("队列空");
} else {
front = (front+1)%maxSize; //front指向的是队头,它前面的数据为无效数据,下次要用直接覆盖
}
}
//在控制台打印队列
public void show() {
for (int i = 0; i < valid(); i++) {
System.out.println(arr[(front+i)%maxSize]);
}
}
//判断队列是否满
private boolean isFull() {
return (real+1)%maxSize == front; //当指向队尾后一个元素加1模除最大容量等于队头,队列满,这种情况会浪费一个空间。
}
//判断队列是否空
private boolean isEmpty(){
return real==front; //队头等于指向队尾后一个元素表示还没有数据,是空的
}
private int valid() { //返回有效数据的个数
return ((real+maxSize)-front)%maxSize;
}
}
java使用循环数组实现队列
最新推荐文章于 2023-03-24 16:56:10 发布