数据结构基础总结(一) 队列,环形队列

(1) 什么是队列

  • 队列就是一种数据结构,队列的最大特点为先进先出
  • 例如,在食堂买饭排队,先排队的人最先买到饭最先离开

(2)数组模拟队列

//数组模拟队列
 class ArrToQueue{
    private int MaxSize;//队列最大容量
    private int front;//队列头
    private int rear;//队列尾
    private int[] arr;//数组模拟队列

     public ArrToQueue(int maxSize) {
        this.MaxSize=maxSize;
        this.arr=new int[maxSize];
        front=-1;//指向队列的前一个数字
        rear=-1;//指向队列尾部(包含队列尾部,即队列的最后一个数据)
     }

     //判断队列是否已满
     public boolean isFull(){
         return rear==MaxSize-1;
     }

     //判断队列是否为空
     public boolean isEmpty(){
         return rear==front;
     }

     //入队列
     public void add(int n){
         if(isFull()){
             System.out.println("队列满,不能加入数据");
             return;
         }
         rear++;
         arr[rear]=n;
     }

     //出队列
     public int get(){
         if(isEmpty()){
             System.out.println("队列为空,不能取数据");
             throw new RuntimeException("队列空,不能取数据");
         }
         front++;
         return arr[front];
     }
     //显示队列的所有数据
     public void Show(){
         if(isEmpty()){
             System.out.println("队列为空,无法遍历");
             return;
         }
         for (int i = 0; i < arr.length; i++) {
             System.out.println(arr[i]);
         }
     }
     //显示队列的头部
     public int peak(){
         if(isEmpty()){
             System.out.println("队列为空,无数据");
             throw new RuntimeException("队列空,无数据");
         }
         return arr[front+1];
     }
 }

(3) 数组模拟环形队列

数据结构基础总结(一) 队列,环形队列_第1张图片如图所示,下面附代码:

 //使用数据模拟环形队列
 class ArrToCirQueue{
     private int MaxSize;//队列最大容量
     private int front;//队列头(队列的第一个数)
     private int rear;//队列最后一个元素的后一个位置
     private int[] arr;//数组模拟队列

     public ArrToCirQueue(int maxSize) {
         this.MaxSize=maxSize;
         this.arr=new int[maxSize];
         front=0;
         rear=0;
     }

     //判断队列是否已满
     public boolean isFull(){
         return (rear+1)%MaxSize==front;
     }

     //判断队列是否为空
     public boolean isEmpty(){
         return rear==front;
     }

     //入队列
     public void add(int n){
         if(isFull()){
             System.out.println("队列满,不能加入数据");
             return;
         }
        arr[rear]=n;
         rear=(rear+1)%MaxSize;
     }

     //出队列
     public int get(){
         if(isEmpty()){
             System.out.println("队列为空,不能取数据");
             throw new RuntimeException("队列空,不能取数据");
         }
         //要分析front是指向队列的第一个元素,先把front对应的值保存在临时变量,front后移,返回临时变量
         int value=arr[front];
         front=(front+1)%MaxSize;
         return value;
     }
     //显示队列的所有数据
     public void Show(){
         if(isEmpty()){
             System.out.println("队列为空,无法遍历");
             return;
         }
         for (int i = front; i < front+(rear+MaxSize-front)%MaxSize; i++) {
             System.out.println(arr[i]);
         }
     }
     //显示队列的头部
     public int peak(){
         if(isEmpty()){
             System.out.println("队列为空,无数据");
             throw new RuntimeException("队列空,无数据");
         }
         return arr[front];
     }
 }

你可能感兴趣的:(数据结构基础总结(一) 队列,环形队列)