Java数据结构_02_队列

这篇博客介绍了如何使用数组来模拟Java中的队列数据结构。内容包括队列的基本概念,如先进先出(FIFO)原则,以及如何通过数组实现队列的添加、删除操作。博主展示了具体的代码实现,包括队列的初始化、判断队列空满、添加数据、取出数据等功能,并给出了运行示例。最后,代码演示了队列溢出和空队列处理的异常情况。
摘要由CSDN通过智能技术生成

1. 队列

1.1 基本介绍

队列是一个先进先出,操作受限的有序列表,只允许在队头取出数据,队尾存入数据

1.2 数组模拟队列

1.2.1 思路分析在这里插入图片描述

1.2.2 代码实现

package com.cy.queue;
/** 使用数组模拟队列 */
public class ArrayQueueDemo {
    public static void main(String[] args) {
        // 初始化一个队列,容量为6
        ArrayQueue queue = new ArrayQueue(6);

        // 存入6个数据,再取出3个数据
        for (int i = 0; i < 6; i++) {
            queue.addData(i);
        }
        queue.showData();
        for (int i = 0; i < 3; i++) {
            queue.getData();
        }
        queue.showData();
        // 展示队列有效数据个数
        System.out.println("有效数据个数: " + queue.size());
        System.out.println("------------------------------------");

        // 再次添加3个,继续添加显示队列已满
        for (int i = 0; i < 3; i++) {
            queue.addData(i);
        }
        queue.showData();
        queue.addData(0);
        System.out.println("------------------------------------");

        // 取出全部数据,继续取出显示队列为空,抛出异常
        for (int i = 0; i < 6; i++) {
            queue.getData();
        }
        queue.showData();
        queue.getData();
    }
}
/** 队列 */
class ArrayQueue {
    private int[] array; // 数组
    private int maxSize; // 队列容量
    private int dataSize; // 有效数据个数
    private int front; // 对头,指向队列第一个元素
    private int rear; // 队尾,指向队列最后一个元素的后一位

    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        array = new int[this.maxSize];
    }

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

    // 判断队列是否已满
    public boolean isFull() {
        return dataSize == maxSize;
    }

    // 添加数据到队列
    public boolean addData(int data) {
        if (isFull()) {
            System.out.println("添加失败,队列已满!");
            return false;
        }
        array[rear] = data;
        rear = (rear + 1) % maxSize;
        dataSize++;
        return true;
    }

    // 取出队列的数据
    public int getData() {
        if (isEmpty()) {
            throw new RuntimeException("取出失败,队列为空!");
        }
        int data = array[front];
        front = (front + 1) % maxSize;
        dataSize--;
        return data;
    }

    // 判断队列中有效数据个数
    public int size() {
        return dataSize;
    }

    // 显式队列中的所有有效数据
    public void showData() {
        if (isEmpty()) {
            System.out.println("显示失败,队列为空!");
            return;
        }
        for (int i = front; i < front + size(); i++) {
            System.out.printf("array[%d]=%d\t", i % maxSize, array[i % maxSize]);
        }
        System.out.println();
    }
}

运行效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值