zoukankan      html  css  js  c++  java
  • 1.2 队列

    • 基本介绍

      • 队列是一个 有序列表,可以用数组或是链表来实现
      • 遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出
    • 代码实现

    • public class ArrayQueueDemo {
        public static void main(String[] args) {
            ArrayQueue arrayQueue = new ArrayQueue(5);
            char key;
            Scanner scanner = new Scanner(System.in);
            a:while (true) {
                try {
                    System.out.println("q:退出程序");
                    System.out.println("s:查看队列");
                    System.out.println("a:向队列中加值");
                    System.out.println("g:从队列中取值");
                    System.out.println("h:查看队首元素");
                    key = scanner.next().charAt(0);
                    switch (key) {
                        case 's':
                            arrayQueue.showQueue();
                            break;
                        case 'a':
                            System.out.println("输入一个值");
                            arrayQueue.addQueue(scanner.nextInt());
                            break;
                        case 'g':
                            System.out.println("从队列中取出的值为" + arrayQueue.getQueue());
                            break;
                        case 'h':
                            System.out.println("队首元素为" + arrayQueue.queueHead());
                            break;
                        case 'q':
                            scanner.close();
                            System.out.println("退出程序");
                            break a;
                        default:
                            System.out.println("命令错误");
                    }
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            }
        }
      }
      class ArrayQueue {
      
        private int maxSize; // 队列的最大容量
      
        private int front; // 队列头指针 指向队列头的前一个位置
      
        private int rear; // 队列尾指针 指向队列的最后一个位置
      
        private int[] array; // 数组
      
        public ArrayQueue(int arrayMaxSize) {
            // 初始化队列
            this.maxSize = arrayMaxSize;
            this.array = new int[maxSize];
            this.front = -1; // 指向队列头的前一个位置
            this.rear = -1; // 指向队列的最后一个位置
        }
      
        public boolean isFull() {
            return rear == maxSize - 1; // 判断队列是否已满
        }
      
        public boolean isEmpty() {
            return front == rear; // 判断队列是否为空
        }
      
        public void addQueue(int value) {
            if (this.isFull()) {
                throw new RuntimeException("队列已满");
            }
            this.rear++;// 赋值必须先加后用
            array[this.rear] = value;
        }
      
        public int getQueue() {
            if (this.isEmpty()) {
                throw new RuntimeException("队列为空");
            }
            this.front++; // 取值必须先加后用
            return array[this.front];
        }
      
        public void showQueue() {
            if (this.isEmpty()) {
                throw new RuntimeException("队列为空");
            }
            for (int i = this.front + 1; i <= this.rear; i++) {
                System.out.printf("arr[%d]=%d	
      ", i, this.array[i]); // 显示队列中的数据
            }
        }
      
        public int queueHead() {
            if (this.isEmpty()) {
                throw new RuntimeException("队列为空");
            }
            return this.array[front + 1]; // 显示队首元素 不能使用++ 不改变队首指针
        }
      }
      
    • 存在的问题

      • 目前数组使用一次就不能用, 没有达到复用的效果
      • 将这个数组使用算法,改进成一个列 环形的队列 取模:%
  • 相关阅读:
    飞控相关资料
    PID
    详解NXP Cortex-M3加密设置
    ucos ii 百度官方介绍
    两个静态页面之间值传递方式
    Wex5各组件介绍
    链接学习
    WeX5基础
    Oracle中用触发器实现自动记录表数据被修改的历史信息
    HTML DOM setInterval() 方法
  • 原文地址:https://www.cnblogs.com/xiaokantianse/p/13572803.html
Copyright © 2011-2022 走看看