Java版队列

队列是一个有序列表,可以使用数组或者链表来模拟,这篇博客主要采用数组模拟,链表模拟将在后面展示。

说起队列的特点,首先想到先进先出,先存入队列的数据先取出,后存入的后取出。

话不多说直接上图

根据队列的模拟图,我们可以总结出以下几点:

  1. 队列的最大容量MaxSize;
  2. 队列输入、输出,分别从前后端来处理,需要两个变量记录front、rear
  3. 队空条件:front=rear=-1(有的地方会从0开始,这里我们从-1开始,指向队首元素的前一个位置)
  4. 队满:rear=MaxSize;
public class ArrayQueueDemo {
    public static void main(String[] args) {
        // 初始化一个大小为3的队列
        ArrayQueue queue = new ArrayQueue(3);

        System.out.println("入队");
        queue.addQueue(12);
        queue.addQueue(8);
        queue.addQueue(15);
        queue.showqueue();

        System.out.println("获取队首元素");
        System.out.println(queue.headqueue());

        System.out.println("出队");
        queue.getQueue();
        queue.showqueue();

    }

}

// 数组模拟队列
class ArrayQueue{
    private int MaxSize;
    private int front;  //头指针,在队列结尾
    private int rear; // 尾指针,在队列之前,意味着front+1才可以取到数据
    private int[] queue;
    // 初始化数组
    public ArrayQueue(int maxSize){
        MaxSize = maxSize;
        front = -1;
        rear = -1;
        queue = new int[MaxSize];
    }
    // 入队
    public void addQueue(int data){
        // 判断队列是否已满
        if (rear == MaxSize-1){
            System.out.println("队列已满,无法存数据");
            return;
        }
        rear++;
        queue[rear] = data;
    }

    // 出队
    public int getQueue(){
        // 判断元素是否为空
        if (front == rear){
            throw new RuntimeException("队列为空,无法取数据");
        }
        front++;
        return queue[front];
    }

    // 显示队列所有数据
    public void showqueue(){
        for (int i = 0; i < queue.length; i++) {
            System.out.printf("队列中的位置%d,对应值%d\n",i+1,queue[i]);
        }
    }

    // 显示队列头部信息
    public int headqueue(){
        if (front == rear){
            throw new RuntimeException("队列为空,无法获取元素");
        }
        return queue[front+1];
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值