用数组模拟队列的增删查改

    技术2022-07-10  119

    Description: 用数组模拟队列,存在的问题是:数组只能用一次,没有达到复用的效果,将这个数组使用算法,改成环形的队列 取模 %

    import java.util.Scanner; public class ArrayQueueDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //初始化一个队列 ArrayQueue arrayQueue = new ArrayQueue(3); 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 ArrayQueue{ private int maxSize;//表示数组的最大容量 private int front = -1;//队列头 private int rear = -1;///队列尾 private int [] arr ;//该数组用于存放数据,模拟队列 public ArrayQueue(int maxSize){ this.maxSize = maxSize; arr = new int[maxSize]; front = -1;//指向队列头部,分析出front是指向队列头的前一个位置 rear = -1;///队列尾,指向队列尾部的数据(即就是队列最后一个数据) } //判空 public boolean isEmpty(){ return front == rear; } //判满 public boolean isFull(){ return rear == maxSize - 1; } //添加数据到队列中 public void add(int data){ //判断队列是否满 if (isFull()){ System.out.println("队列满,不能加入数据"); return; } rear++;//让rear后移动 arr[rear] = data; } //获取队里的数据,出队列 public int getQueue(){ //判断队列是否空 if (isEmpty()){ //通过异常来处理 throw new RuntimeException("队列空,不能取数据"); } //让front后移 front ++; return arr[front]; } //遍历数据 public void list(){ if (isEmpty()){ System.out.println("队列为空,不能加入数据"); return; } for (int i = 0; i < arr.length;i++){ System.out.printf("arr[%d]=%d\n",i,arr[i]); } } //显示队列的头数据,注意不是取出数据 public int headQueue(){ //判断是否w为空 if (isEmpty()){ throw new RuntimeException("队列为空!!!"); } return arr[front + 1]; } }
    Processed: 0.013, SQL: 9