package org.structure;
import java.util.Scanner;
/**
* 环形队列模拟
* @author cjj_1
* @date 2020-08-03 13:43
*/
public class CircleArrayQueue {
public static void main(String[] args) {
CirleArray qa = new CirleArray(3);
Scanner s = new Scanner(System.in);
boolean loop = true;
char key;
while (loop) {
System.out.println("s(show):代表展示队列");
System.out.println("a(add):队列添加");
System.out.println("g(get):取出数据");
System.out.println("f(print):获取头");
System.out.println("e(exit):程序退出!");
key = s.next().charAt(0);
switch (key) {
case 's':
qa.showQueue();
break;
case 'a':
qa.addQueue(s.nextInt());
break;
case 'g':
try {
System.out.println(qa.outOfQueue());//出队
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
case 'f':
System.out.println(qa.getHead());
break;
case 'e':
s.close();
loop = false;
break;
default:
break;
}
}
}
}
class CirleArray{
private int front;
private int rear;
private int[] arr;
private int maxSize;
public CirleArray(int maxSize){
this.maxSize = maxSize;
front = 0;
rear = 0;
arr = new int[maxSize];
}
//栈是否满
private boolean isFull(){
return (rear+1) % maxSize == front;
}
//栈是否是空
private boolean isEmpty(){
return rear == front;
}
//栈是否是空
private int getSize(){
return (rear + maxSize - front) % maxSize;
}
//栈是否是空
protected void addQueue(int n){
if(isFull()){
System.out.println("栈满了!");
return;
}
arr[rear] = n ;
System.out.println(arr[rear]);
rear = (rear + 1)%maxSize;
}
//栈是否是空
protected int outOfQueue(){
if(isEmpty()){
System.out.println("栈空了!!!");
try {
throw new Exception("您出现异常了");
} catch (Exception e) {
e.printStackTrace();
}finally {
return -1;
}
}
int value = arr[front];
front = (front +1 ) % maxSize;
return value;
}
/**
* 获取指针头
* @return
*/
protected int getHead(){
return front;
}
/**
* 获取指针头
* @return
*/
protected void showQueue(){
if(isEmpty()){
return;
}
for(int i =front;i< (front+getSize()); i++)
{
System.out.println(arr[i%maxSize]);
}
}
}
使用数组模拟环形队列
猜你喜欢
转载自blog.csdn.net/weixin_40128696/article/details/107762786
今日推荐
周排行