3-数据结构数组实现队列思路和java代码实现

尚硅谷韩顺平Java数据结构与算法

队列

队列使用场景

  1. 排队

队列基本介绍

  1. 队列是一个有序列表,可以使用数组链表来实现
  2. 遵循先进先出的原则

数组实现队列

  • 总体思路

    • 队列本身是有序数列,定义变量maxSize记录队列最大容量
    • 队列的输出输入分别是由前后端来处理的,因此需要定义变量front和rear来记录前后端的下标,front会随着数据的输出而变化,rear会随着数据的输入而变化。

在这里插入图片描述

  • 添加数据方法思路

    1. 定义方法addQueue(value);
    2. 判断队列是否满 rear == maxSize-1
    3. 队列不满则添加元素到rear+1
  • 代码实现

/**
 * 用数组实现队列
 */
public class ArrayQueue {
    
    
    private int maxSize; //记录队列的最大容量
    private int front;   //记录队列的头位置
    private int rear;    //记录队列的尾位置
    private int[] queue; //实现队列的数组

    public ArrayQueue(int maxSize){
    
    
        this.maxSize = maxSize;
        queue = 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 value){
    
    
        //1-判断队列是否满
        if (isFull()){
    
    
            System.out.println("队列已满,不能添加元素。。。");
            return;
        }
        //2-添加元素
        queue[++rear] = value;
    }

    //从队列取出元素
    public int getQueue(){
    
    
        //1-判断队列是否空
        if (isEmpty()){
    
    
            throw new RuntimeException("队列空,不能取元素。。。");
        }

        //2-取元素
        return queue[++front];
    }

    //显示队列的所有元素
    public void showQueue(){
    
    

        if (isEmpty()){
    
    
            throw new RuntimeException("队列空。。。");
        }
        for (int i = front+1; i <= rear; i++) {
    
    
            System.out.printf("queue[%d]=%d\n",i,queue[i]);
        }
    }
}
  • 该方法实现队列的问题分析和优化
    • 问题:目前数组使用一次就不能用(队列中取出数据的位置不能在使用),没有达到复用的效果。
    • 优化:将该数组使用算法,改进成一个环形数组,达到复用效果

猜你喜欢

转载自blog.csdn.net/weixin_43311669/article/details/107634846