zoukankan      html  css  js  c++  java
  • 用数组模拟队列

    队列:

    1,队列是一种先进先出的线性表,它只允许在表的一段进行插入,而在另一端删除元素,在队列中,允许插入的一段叫做队尾(rear),允许删除的一端则称为队头。

    2,举例:①银行叫号排队

                    ②操作系统中的作业排队:在允许多道程序运行的操作系统中,同时有几个作业运行,如果运行的结果都需要用通道输出,那就要按请求输出的先后次序排队。每当通道传输完毕可以接受新的输出任务时,队头的作业先从队列中推出作输出操作。凡是申请输出的作业都从队尾进入队列

    3,数组模拟队列示意图:

     4,数组模拟队列思路:

    首先,如上图所示:

    • MaxSize是该队列的最大容量
    • 因为队列的输入输出分别从两端进行,因此用两个变量front和rear分别记录两端的下标,front会随着数据输出而改变,rear会随着数据输入而改变
    • 当我们将数据存入队列时,rear+1,如果rear==front,则说明队列为空;如果rear==MaxSize-1,则说明队列已满

    5,代码实现

    package com.boogie.QueueArr;
    
    import java.util.Scanner;
    
    public class QueueArr {
        public static void main(String[] args) {
            ArrQueue queue=new ArrQueue(3);
            char key=' ';
            Scanner scan=new Scanner(System.in);
            boolean loop=true;
            while(loop) {
                System.out.println("s(show):显示队列");
                System.out.println("a(add):添加数据到队列");
                System.out.println("g(get):从队列取出数据");
                System.out.println("h(head):查看队列头的数据");
                System.out.println("e(exit):退出程序");
                key=scan.next().charAt(0);
            
            switch(key) {
            case's':
                queue.showQueue();
                break;
            case'a':
                System.out.println("请输入一个数字:");
                int value=scan.nextInt();
                queue.addQueue(value);
                break;
            case'g':
                try {
                    int res=queue.getQueue();
                    System.out.printf("取出的数据是%d
    ",res);
                } catch (Exception e) {
                
                    System.out.println(e.getMessage());
                }
                break;
            case'h':
                try {
                    int res=queue.headQueue();
                    System.out.printf("队列头的数据是:%d
    ",res);
                    
                } catch (Exception e) {
                    
                    System.out.println(e.getMessage());
                }
                break;
            case'e':
                scan.close();
                loop=false;
                break;
                default:
                    break;
            }
                
            }
            System.out.println("程序退出~~");
        }
    }
    //使用数组模拟队列——编写一个QueueArr类
    class ArrQueue{
        private int Maxsize;//表示数组的最大容量
        private int front;//队列头
        private int rear;//队列尾
        private int[] Arr;//用于存放数据
        
        //创建队列的构造器
        public ArrQueue(int ArrMaxsize) {
            Maxsize=ArrMaxsize;
            Arr=new int[Maxsize];
            front=-1;
            rear=-1;
        }
    
    //判断队列是否满
    public boolean QueueisFull(){
        return  rear==Maxsize-1;
    }
    //判断队列是否空
    public boolean QueueisEmpty() {
        return rear==front;
    }
    //添加数据到队列
    public void addQueue(int n) {
        if(QueueisFull()) {
            System.out.println("队列已满,无法加入数据");
            return;
        }
        rear++;//rear后移
        Arr[rear]=n;
    }
    //获取队列数据,出队列
    public int getQueue(){
        if(QueueisEmpty()) {
            throw new RuntimeException("队列为空,没有数据");
            }
        front++;
        return Arr[front];
    }
    //显示队列的所有数据
        public void showQueue(){
            if(QueueisEmpty()) {
                System.out.println("队列为空,没有数据");
                return;
            }for(int i=0;i<Arr.length;i++) {
            System.out.printf("Arr[%d]=%d
    ",i,Arr[i]);
            }
        }
        //显示队列的头数据
        public int headQueue() {
            if(QueueisEmpty()) {
                System.out.println("队列为空,没有数据");
                }return Arr[front+1]; 
                
        }
    }

    运行结果:

  • 相关阅读:
    4.深入k8s:容器持久化存储
    3.深入k8s:Deployment控制器
    深入k8s:Pod对象中重要概念及用法
    深入k8s:k8s部署&在k8s中运行第一个程序
    博文大纲
    文字渲染一探
    搭建sonarqube分析golang代码
    MSSQL系列 (四):系统函数之日期和时间函数
    MSSQL系列 (三):系统函数之字符串函数
    MSSQL系列 (二):表相关操作、列操作、(唯一、主键、默认、检查、外键、非空)约束、临时表
  • 原文地址:https://www.cnblogs.com/boogie-xy/p/11547028.html
Copyright © 2011-2022 走看看