首页 > 编程语言 > 详细

数组模拟队列

时间:2021-05-01 12:26:03      阅读:20      评论:0      收藏:0      [点我收藏+]

数组模拟队列

  • 思路分析
  1. 队列基于先进先出的特性,在日常使用中频率较高
  2. 队列可基于基础数据结构数组或链表模拟(本文介绍用数组模拟)
  3. 基于面向对象思想,创建一个队列抽象类,每一个实例化对象则都为一个实体队列可进行数据的各种模拟
  4. 具体分析及源码如下
  • 模拟源码及分析
//数组模拟队列
class ArrayQueue {
    //队列的最大存储范围
    private int maxSize;
    //队列头部(注意front指向队列头部的前一个元素,不包含第一个元素)
    private int front;
    //队列尾部,指向队列的最后一个元素
    private int rear;
    //定义数组模拟队列
    private int[] arr;

    //构造器,即在队列实例化时创建一个具体大小的队列
    public ArrayQueue(int maxSize) {
        this.maxSize = maxSize;
        rear = -1;
        front = -1;
        //创建一个长度为maxSize的数组,即大小为maxSize的队列
        arr = new int[maxSize];
    }
    //向队列中添加方法

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

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

    //向队列中添加元素
    public void addQueue(int num) {
        //先判断队列是否满,如果满,则添加不了
        if (isFull()) {
            System.out.println("队列满,不能添加元素~~");
            return;
        }
        //如果队列未满,则添加元素
        //将元素添加到队列尾部,即rear所在的位置
        rear++;
        arr[rear] = num;
    }

    //取出队列中的元素
    public int getQueue() {
        //取元素先判断队列是否为空,若为空,则不能取出数据
        if (isEmpty()) {
            throw new RuntimeException("队列空,不能取出数据~~");
            //throw一个异常,程序也会终止,故不需要再return
        }
        //如果队列不为空,则取出数据,取出的数据为队列头部的数据
        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];
    }
}
  • 测试队列
public static void main(String[] args) {
        char key = ‘ ‘;
        boolean loop = true;
        //创建一个实例化队列
        ArrayQueue queue = new ArrayQueue(5);
        //键盘扫描器
        Scanner scanner = new Scanner(System.in);
        while (loop) {
            //简单界面模拟队列
            System.out.println("========欢迎来到队列========");
            System.out.println("s(show)显示队列元素:");
            System.out.println("a(add)向队列添加元素:");
            System.out.println("g(get)取出队列元素:");
            System.out.println("e(exit)退出队列:");
            System.out.println("h(head)显示队列头部元素:");
            System.out.println("============================");
            System.out.println("请输入你的选择:");
            key = scanner.next().charAt(0);
            switch (key) {
                case ‘e‘:
                    loop = false;
                    break;
                case ‘s‘:
                    try {
                        //showQueue方法抛出异常
                        queue.showQueue();
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case ‘a‘:
                    System.out.println("请输入你要添加的元素:");
                    int num = scanner.nextInt();
                    queue.addQueue(num);
                    break;
                case ‘g‘:
                    try {
                        //getQueue方法抛出异常
                        int res = queue.getQueue();
                        System.out.println("取出的元素为" + res);
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case ‘h‘:
                    try {
                        //headQueue方法抛出异常,需要捕获
                        int res = queue.headQueue();
                        System.out.println("队列头部元素为" + res);
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
            }
        }
        System.out.println("程序退出~~");
    }

数组模拟队列

原文:https://www.cnblogs.com/mx-info/p/14723962.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!