使用数组模拟单向队列

1、队列介绍

队列是一个有序列表,可以用数组链表来实现。

队列遵循先入先出的原则。即先存入队列的数据,要先取出。后存入队列的数据要后取出

队列存取数据的情况:

当增加数据时,头部没有变,尾部再增加。当取出数据时,头部在减少,尾部没有变。

说明是在队列的尾部增加数据,在队列的头部取出数据。

2、使用数组模拟队列

maxSize是该队列最大容量,因为队列的输入输出是分别从前后端来处理的,因此需要两个变量front以及rear分别记录对列前后端的下标,front会随则数据的输出改变,rear则会随则数据的输入而改变。

3、解读

1.创建一个队列类,在队列类中定义四个变量
变量1:maxSize,数组长度
变量2:arr,模拟队列的数组
变量3:front,队列的头指针,用于出队列
变量4:rear,队列的尾指针,用于入队列
2.定义构造器,初始化队列类,初始化数组长度,将front和rear指针指向-1,当添加元素或获取元素就向后移动
3.定义一个判断是否为空的方法,isEmpty,当不为空时 就可以出队列(获取元素)
4.定义一个判断是否已满的方法,isFull,当已满时 就可以入队列(添加元素)
5.定义添加元素的方法,addQueue,使用isFull判断是否已满,已满输出提示信息,未满就将rear指针向后移动一位,并赋值。
6.定义获取元素的方法,getQueue,使用isEmpty判断是否为空,为空输出提示信息,不为空就将front指7.针向后移动一位,并返回值。
8.定义展示数据的方法,showQueue,使用isEmpty判断是否为空,为空输出提示信息,不为空就将数组遍历。
9.定义展示队列头元素的方法,headQueue,使用isEmpty判断是否为空,为空输出提示信息,不为空就将头元素返回。

代码的实现 

public class Queue_ {
    public static void main(String[] args) {
        // 创建一个队列
       ArrayQueue arrayQueue = new ArrayQueue(3);

        // 添加数据
        arrayQueue.addQueue(33);
        arrayQueue.addQueue(66);
        arrayQueue.addQueue(99);
        // 展示队列
        arrayQueue.showQueue();
        // 获取数据
        System.out.println(arrayQueue.getQueue());
        // 展示头数据
        arrayQueue.headQueue();
    }
}

// 使用数组模拟队列-编写一个ArrayQueue类
class ArrayQueue {
    private int maxSize; // 表示数组的最大容量
    private int[] arr; //模拟队列,存储数据
    private int front; // 队列头指针
    private int rear; // 队列尾指针

    // 创造队列的构造器
    public ArrayQueue(int arrMaxSize) {
        maxSize = arrMaxSize;
        arr = 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 x) {
        if (isFull()) { //
            System.out.println("对列已满,不能添加数据");
            return;
        }
        rear++; // 让rear后移
        arr[rear] = x; // 向队列添加数据
    }

    //获取队列数据,出队列
    public int getQueue() {
        if (isEmpty()) { //判断队列是否为空
            // 通过抛出异常
            throw new RuntimeException("队列为空,不能获取数据");
        }
        front++; //front向后移
        return arr[front]; //返回头指针上的元素
    }

    // 显示队列的所有数据
    public void showQueue() {
        if (isEmpty()) {
            System.out.println("队列为空,没有数据");
            return;
        }
        // 遍历
        for (int i = 0; i < arr.length; i++) {
            System.out.printf("arr[%d]=%d\n", i, arr[i]);
        }
    }

    // 显示对列的头数据
    public int headQueue() {
        if (isEmpty()) {
            throw new RuntimeException("列表为空,没有数据");
        }
        return arr[front + 1];
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值