队列是一个有序表,可以用数组或是链表来实现。
遵循先进先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出
示意图:(使用数组模拟队列示意图)
front为指向队首的指针,rear为指向队尾的指针。因为队列的输出、输入分别从前后端来处理,因此需要两个变量front和rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear则是随着数据输入而改变。
代码实现:
public class ArrayQueueDemo { public static void main(String[] args) { ArrayQueue arrayQueue=new ArrayQueue(4); //arrayQueue.addQueue(2); //arrayQueue.addQueue(3); System.out.println(arrayQueue.isEmpty()); System.out.println(arrayQueue.isFull()); arrayQueue.showQueue(); System.out.println(arrayQueue.getQueue());; } } class ArrayQueue{ private int maxSize;//数组最大容量 private int front;//队列头 private int rear;//队列尾 private int[] arr;//该数组用于存放数据,模拟队列 //创建队列的构造方法 public ArrayQueue(int arrMaxSize){ maxSize=arrMaxSize; arr=new int[maxSize]; front=-1; rear=-1; } //判断队列是否满 public boolean isFull(){ return rear==maxSize; } //判断队列是否为空 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()){ System.out.println("队列为空,不能取数据"); return 0; } front++; return arr[front]; } //显示队列所有数据 public void showQueue(){ //遍历 if(isEmpty()){ System.out.println("队列空,没有数据"); return; } for(int i=0;i
问题分析:
1)目前数组使用一次就不能用,没有达到复用的效果
2)可以使用算法,改进成一个环形的队列(后续会更新)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)