用数组模拟环形队列

    技术2022-07-10  87

    import java.util.Scanner; public class ArrayQueueDemo1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //初始化一个队列 ArrayQueue1 arrayQueue = new ArrayQueue1(4); char key = ' ';//接收用户输入 boolean flag = true; while (flag){ System.out.println("s.展示数据"); System.out.println("e.退出程序"); System.out.println("a.添加数据"); System.out.println("g.从队列中获取数据."); System.out.println("h.查看队列头的数据."); System.out.println(""); key = scanner.next().charAt(0);//接收一个字符 switch (key){ case 's': arrayQueue.list(); break; case 'a': System.out.println("请输入一个数: "); int data = scanner.nextInt(); arrayQueue.add(data); break; case 'g': //取出数据 try { int res = arrayQueue.getQueue(); System.out.println("取出的数据是: "+res); }catch (Exception e){ e.getMessage(); } break; case 'h': try { int res = arrayQueue.headQueue(); System.out.println("队列头的数据为: "+res); }catch (Exception e){ e.getMessage(); } break; case 'e': //退出 scanner.close(); flag = false; break; default: break; } } } } class ArrayQueue1{ private int maxSize;//表示数组的最大容量 private int front;//front指向队列的第一个元素 = 0 private int rear;//rear指向队列的最后一个元组的后一个位置 = 0 private int [] arr ; public ArrayQueue1(int maxSize){ this.maxSize = maxSize; arr = new int[maxSize]; } //判满 public boolean isFull (){ return (rear+ 1) % maxSize == front; } //判空 public boolean isEmpty(){ return front == rear; } //获取队列中有效的个数 public int getSize(){ if (isEmpty()){ System.out.println("队列为空!!!"); return 0; } return (rear + maxSize - front) % maxSize; } //添加数据到队列中 public void add(int data){ //添加数据到队列中要进行判满处理 if (isFull()){ System.out.println("队列中的数据已经满了,不能再添加数据了"); return; } arr[rear] = data; //然后将指针进行后移,这里必须考虑取模 rear = (rear + 1) % maxSize ; } //从队列中获取数据 public int getQueue(){ //获取数据要进行判空处理 if (isEmpty()){ throw new RuntimeException("队列为空,不能取数据"); } //这里需要分析出front指向队列的第一个元素 //1.先把front对应的值保留到一个临时的变量 int value = arr[front]; //2.将front后移 front = (front + 1) % maxSize; return value; } //获取队列头数据 public int headQueue(){ //判空处理 if (isEmpty()) { throw new RuntimeException("队里的数据是空的,不能取数据"); } return arr[front + 1]; } public void list() { //判空处理 if (isEmpty()){ System.out.println("队里面的数据是空的!!!"); return; } int size = getSize(); for (int i = front; i < front + size; i++) { System.out.printf("arr[%d] = %d\n",i,arr[i]); } } }
    Processed: 0.026, SQL: 9