Java数据结构和算法--数组模拟队列
/* 队列: 1.队列是一个有序列表,可以用数组或是链表来实现。 2.遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出 数组模拟队列 1.队列本身是一个有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中maxSize是该队列的最大容量 2.因为队列的输出,输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标 front会随着数据输出而改变,而rear则是随着数据输入而改变 数组模拟队列: 当我们将数据存入队列时称为“addQueue”,addQueue的处理需要两个步骤: 1)将尾指针往后移:rear+1,当front==rear【空】 2)若尾指针rear小于队列的最大下标maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据。 rear== maxSize-1【队列满】 */ //代码实现 //使用数组模拟队列-编写一个ArrayQueue类
public class 算法01 { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(3); 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(show): 添加数据"); System.out.println("g(get): 取出数据"); 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.println(" 取出的数据是 "+res); }catch (Exception e){ // TODO: handle exception System.out.println(e.getMessage()); } break;
case 'e' : scanner.close(); loop = false; break;
default: break; } } } }
class ArrayQueue{
private int maxSize;//表示数组最大容量 private int front;//表示队列头 private int rear;//表示队列尾 private int[] arr;//该数组用于存放数据,模拟队列 //创建一个构造器 public ArrayQueue(int arrMaxszie){ maxSize = arrMaxszie; arr = new int[maxSize]; front = -1;//指向队列头部,分析出front是指向队列头的前一个位置 rear = -1;//指向队列尾部,指向队列尾部的数据(即就是队列的最后一个数据) } //判断队列是否满 public boolean isFull(){ return rear == maxSize-1; } //判断队列是否空 public boolean isEmpty(){ return rear == front; } //添加数据到队列 public void addQueue(int n){ //判断队列是否满 if(isFull()){ System.out.println("队列满,不能加入数据"); return; } rear++; arr[rear] = n; } //获取队列的数据 public int getQueue(){ //判断队列是否空 if(isEmpty()){ //通过抛出异常来处理,若是返回一个值可能队列的第一个元素就是那个值 throw new RuntimeException("队列空,不能取数据"); } front++;//队列头 return arr[front]; } //遍历 public void showQueue(){ //判断是否为空 if (isEmpty()){ System.out.println("队列空的没有数据"); return; } for(int i = 0;i<arr.length;i++){ System.out.println(arr[i]); } } }