public static void main(String[] args) {
ArrayQueue1 aq = new ArrayQueue1(4);
char key=' ';
Scanner scanner = new Scanner(System.in);
boolean loop =true;
while (loop){
System.out.println("s(show): 显示队列");
System.out.println("e(exit): 退出程序");
System.out.println("a(add): 添加数据到队列");
System.out.println("g(get): 取出数据");
System.out.println("h(head):查看队列头的数据");
key=scanner.next().charAt(0);
switch (key){
case 's':aq.showQueue();break;
case 'a':
System.out.println("请输入一个数");
int value=scanner.nextInt();
aq.addQueue(value);
break;
case 'g':
try {
int a=aq.getQueue();
System.out.println("取出的数据是"+a);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();
loop=false;
break;
default:
break;
}}
System.out.println("程序退出");
}
*****************************************************************
class ArrayQueue1{
private int maxSize;
private int front;//队列头,指向第一个数据
private int rear;//队列尾,指向最后一个数据的后一个位置。
private int[] arr;//存放数据,模拟队列
public ArrayQueue1(int maxSize){
this.maxSize=maxSize;
arr=new int[maxSize];
front=0;//队列头初始为0
rear=0;//队列尾初始为0
}
//队列是否已满
public boolean isFull(){
return (rear+1)%maxSize==front;
}
//队列是否为空
public boolean isEmpty(){
return rear==front;
}
//向队列添加数据
public void addQueue(int n){
if (isFull()){
System.out.println("can't put in data");
}
else{
arr[rear]=n;
rear=(rear+1)%maxSize;
}
}
//取出数据
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("Queue is empty");
}
int temp=arr[front];
front=(front+1)%maxSize;
return temp;
}
//显示队列数据
public void showQueue(){
if (isEmpty()){
System.out.println("Queue is empty");
return;}
for (int i =front;i<front+size();i++)
System.out.printf("arr[%d]=%d\n",i%maxSize,arr[i%maxSize]);
}
//显示有效数据的个数
public int size(){
return (rear+maxSize-front)%maxSize;
}
//显示队列头的数据
public int headQueue(){
if (isEmpty()){
throw new RuntimeException("队列为空");
}
return arr[front];
}
}
(线性表的顺序存储)数组模拟环形队列实现
最新推荐文章于 2022-10-09 16:22:27 发布