java的数据结构与算法(3)环形队列
2019-07-28 23:44
459 查看
这次对上次的代码进行了一次改进
package cn.itjy.queue; import java.util.Scanner; public class CircleArrayQueue { public static void main(String[] args) { // test System.out.println("测试数组模拟环形队列"); CircleArray arrayQueue = new CircleArray(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': arrayQueue.showQueue(); break; case 'a': System.out.println("输入一个数字"); int value = scanner.nextInt(); arrayQueue.addQueue(value); break; case 'g': try { int res = arrayQueue.getQueue(); System.out.printf("取出的数据是%d\n",res); } catch (Exception e) { System.out.println(e.getMessage()); } break; case 'h': try { int front = arrayQueue.headQueue(); System.out.printf("队列头的数据是%d\n",front); } catch (Exception e) { System.out.println(e.getMessage()); } break; case 'e': scanner.close(); loop = false; break; default: break; } } System.out.println("code exit"); } } class CircleArray { private int maxSize; // 表示数组最大容量 // front 变量的含义做一个调整:front就指向队列的最后一个元素的后一个位置,也就是说arr[front] private int front; // rear变量的含义做一个调整:rear指向队列的最后一个元素的后一个位置,因为希望空出一个 private int rear; private int[] array; // 该数组用于存放数据,模拟队列 // 创建队列的构造器 public CircleArray(int arrmaxSize) { maxSize = arrmaxSize; array = new int[maxSize]; } // 判断队列是否满 public boolean isFull() { return (rear + 1) % maxSize == front; } // 判断队列是否为空 public boolean isEmpty() { return front == rear; } // 添加数据到队列 public void addQueue(int n) { // 判断队列是否满 if (isFull()) { System.out.println("队列已满,不能加入数据。"); return; } array[rear] = n; // 将rear后移,这里必须考虑取模 // 防止越界 rear = (rear + 1) % maxSize; } // 获取队列的数据 public int getQueue() { // 判断队列是否空 if (isEmpty()) { throw new RuntimeException("队列为空,不能取数据"); } // 这里需要分析出front是队列的第一个元素 // 1.先把front的对应的值保存到一个临时的变量 int value = array[front]; // 2.将front后移 front = (front + 1) % maxSize; // 3.将临时保存的变量返回 return value; } // 显示队列的所有数据 public void showQueue() { if (isEmpty()) { System.out.println("队列为空,没有数据"); return; } // 思路:从front开始遍历,遍历多少个元素 for (int i = front; i < front + size(); i++) { System.out.printf("array[%d]=%d\n", i % maxSize, array[i % maxSize]); } } // 求出当前队列有效数据的个数 public int size() { return (rear + maxSize - front) % maxSize; } // 显示队列的头部,注意不是取出数据 public int headQueue() { // 判断 if (isEmpty()) { throw new RuntimeException("队列为空,没有数据"); } return array[front]; } }
相关文章推荐
- 数据结构与算法Java(二)栈和队列
- 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- Java实现环形队列
- Java的循环队列(环形缓冲、RingBuffer)
- java 环形阻塞队列简单实现
- Java数据结构与算法---队列
- 数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
- Java数据结构与算法(10) - ch05链表实现队列(Link Queue)
- java之环形队列的实现
- Java数据结构与算法(4) - ch04队列(Queue和PriorityQ)
- 数据结构与算法(Java描述)-10、链式队列以及优先级队列的应用
- java 环形队列简单实现
- 数据结构与算法(java)——栈和队列
- java数据结构与算法-双端链表实现队列
- 【java数据结构与算法学习】队列
- Java数据结构与算法之队列
- java实现数据结构中的环形队列
- 数据结构与算法Java描述 队列
- Java数据结构与算法(三)-栈和队列