1 public class CircleArrayQueueDemo { 2 public static void main(String[] args) { 3 // 测试,创建队列 最大值为 3 方便测试 4 CircleArrayQueue aq = new CircleArrayQueue(4); 5 char key = ‘ ‘;// 接收用户输入 6 Scanner input = new Scanner(System.in); 7 boolean loop = true; 8 while (loop) { 9 System.out.println("s(show) 显示队列"); 10 System.out.println("e(exit) 退出程序"); 11 System.out.println("a(add) 添加队列"); 12 System.out.println("g(get) 取出队列"); 13 System.out.println("h(head) 展示队列"); 14 key = input.next().charAt(0);// 接收输入字符 15 switch (key) { 16 case ‘s‘: 17 aq.showQueue(); 18 break; 19 case ‘a‘: 20 System.out.println("请输入数字:"); 21 int v = input.nextInt(); 22 aq.addQueue(v); 23 break; 24 case ‘g‘: 25 try { 26 int reslut = aq.getQueue(); 27 System.out.println("取出的数据是 -- " + reslut); 28 } catch (Exception e) { 29 System.out.println(e.getMessage()); 30 } 31 break; 32 case ‘h‘:// 查看队列头 33 try { 34 int head = aq.headQueue(); 35 System.out.println("队列头的数据是 -- " + head); 36 } catch (Exception e) { 37 System.out.println(e.getMessage()); 38 } 39 case ‘e‘:// 退出 40 input.close(); 41 loop = false; 42 break; 43 default: 44 break; 45 } 46 } 47 System.out.println("------exit------"); 48 49 } 50 } 51 52 //使用数组模拟队列 53 class CircleArrayQueue { 54 private int maxSize;// 数组最大容量 55 private int front; // 指向队列头部 56 private int rear; // 队列尾部后一个元素,即 即将被叫号的那个元素 57 private int arr[]; // 该数组用于模拟队列存储数据 58 59 // 构造器 60 public CircleArrayQueue(int arrMaxSize) { 61 maxSize = arrMaxSize; 62 arr = new int[maxSize]; 63 } 64 // 编写队列的方法 65 // 判断队列是否满 66 public boolean isFull() { 67 return (rear + 1) % maxSize == front; 68 } 69 70 // 判断队列是否为空 71 public boolean isEmpty() { 72 return rear == front; 73 } 74 75 // 添加队列 76 public void addQueue(int n) { 77 if (isFull()) { 78 System.out.println("队列已满,请稍后!"); 79 return; 80 } 81 arr[rear] = n; 82 rear = (rear + 1) % maxSize; 83 } 84 85 // 获取数据 86 public int getQueue() { 87 if (isEmpty()) { 88 // 通过抛出异常处理 89 throw new RuntimeException("队列为空!"); 90 } 91 int v = arr[front]; 92 front = (front + 1) % maxSize; 93 return v; 94 } 95 96 // 遍历队列数据 97 public void showQueue() { 98 if (isEmpty()) { 99 System.out.println("队列为空!"); 100 return; 101 } 102 for (int i = front; i < front + size(); i++) { 103 System.out.printf("arr[%d] = %d\n", i % maxSize, arr[i % maxSize]); 104 } 105 } 106 107 // 返回当前数组有效数据数目 108 public int size() { 109 return (rear + maxSize - front) % maxSize; 110 } 111 112 // 展示队列头部信息 113 public int headQueue() { 114 if (isEmpty()) { 115 throw new RuntimeException("队列为空,无数据!"); 116 } 117 return arr[front]; 118 } 119 }
原文:https://www.cnblogs.com/wdh01/p/12683092.html