简单的数组实现队列功能,但是不能存取无限次,待优化
package 队列;
import java.util.Scanner;
public class 数组实现队列 {
public static void main(String[] args) {
ArrayQueue arrayQueue = new ArrayQueue(3);
char key = ' ';
Scanner in = new Scanner(System.in);
boolean loop = true;
System.out.println("s:显示队列");
System.out.println("a:添加数据");
System.out.println("g:取出数据");
System.out.println("e:退出");
while(loop){
key = in.next().charAt(0);
switch (key){
case 's':
arrayQueue.showArr();
break;
case 'a':
System.out.println("输入一个数");
int n = in.nextInt();
arrayQueue.add(n);
break;
case 'g':
try {
int res = arrayQueue.get();
System.out.println("取出:" + res);
}catch (Exception e){
System.out.println(e);
}
break;
case 'e':
loop = false;
break;
}
}
System.out.println("结束");
}
}
class ArrayQueue{
// 数组最大容量
private int maxSize;
// 队列头
private int front;
// 队列尾
private int rare;
// 存放数据模拟队列
private int [] arr;
public ArrayQueue(int arrMaxSize){
maxSize = arrMaxSize;
arr = new int[maxSize];
front = -1;
rare = -1;
}
public boolean isFull(){
// 队尾指向等于最大值减一 数组满
return rare == maxSize - 1;
}
public boolean isEmpty(){
// 队首等于队尾
return rare == front;
}
public void add(int n){
if (isFull()){
System.out.println("队列满,无法添加");
return;
}
// 队尾向后移
rare++;
arr[rare] = n;
}
public int get(){
if (isEmpty()){
throw new RuntimeException("队列空,无法取出");
}
// 取出一个 队首向后移
front++;
return arr[front];
}
public void showArr(){
if (isEmpty()){
System.out.println("无数据");
return;
}
// 当前front指向空 或 上一个取出的元素
// rare指向最后一个元素 需要遍历到这个元素的下标加一 包含最后一个元素
for (int i = front+1; i < rare+1; i++) {
System.out.println(arr[i]);
}
}
}