数组模拟队列
1.队列介绍
2.数组模拟队列思路
3.代码实现
package com.queue; import java.util.Scanner; /**数组队列 * @author nidegui * @create 2019-10-22 16:18 */ public class QueueDemo { public static void main(String[] args) { //创建一个队列 ArrayQueeu queeu=new ArrayQueeu(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(add):添加数据"); System.out.println("g(get):得到数据"); System.out.println("h(head):查看头数据"); key = scanner.next().charAt(0); //接受字符 switch (key){ case 's': queeu.showData(); break; case 'a': System.out.println("输入一个数"); int next = scanner.nextInt(); queeu.addQueue(next); break; case 'g': int queues = queeu.getQueue(); System.out.printf("取出的数据是%d\n",queues); break; case 'h': int i = queeu.headQueue(); System.out.printf("取出的数据是%d\n",i); break; case 'e': scanner.close(); loop=false; break; default: break; } } System.out.println("程序退出"); } } //用数组模拟队列-编写一个ArryaQueue类 class ArrayQueeu{ private int maxSize; //表示数组最大的容量 private int front; //队列头 private int rear; //队列尾 private int[] arr; //该数组用来存放数据模拟队列 //创建队构造器 public ArrayQueeu(int arrMaxSize){ maxSize=arrMaxSize; arr=new int[maxSize]; front=-1; //指向队列头部部,分析front指向队列的那个位置 rear=-1; //指向队尾,最后一个数据, } //判断队列是否满 public boolean isFull(){ return rear==front-1; } //判断队列是否是空 public boolean isEmpty(){ return rear==front; } //向队列中添加数据 public void addQueue(int n){ //判断队列是否堆满 if(isFull()){ System.out.println("队列满,不能添加数据"); return; } rear++; //rear向后移动 arr[rear]=n; } //获取队列数据,出数据 public int getQueue(){ //判断队列是否是空 if(isEmpty()){ //通过抛出异常 throw new RuntimeException("队列空,不能取出数据"); } front++;//front后移 return arr[front]; } //显示队列所有数据 public void showData(){ //遍历 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(){ //判断队列是否是空 if(isEmpty()){ //通过抛出异常 throw new RuntimeException("队列空,不能去数据"); } return arr[front+1]; } }
注释:这种方法存在问题,数组只能用一次