用数组模拟队列

news/2024/7/4 8:35:04
  • 思路导图
    队列的思维导图

  • 代码块如下


public class ArrayQueueDemo {
    public static void main(String[] args) {
        //先新建一个ArrayQueue类
        ArrayQueue queue = new ArrayQueue(3);
        Scanner scanner = new Scanner(System.in);
        char key=' ';//key用来接收用户从键盘输入要添加的数字
        boolean loop=true;
        while (loop){
            System.out.println("有以下菜单供你选择:");
            System.out.println("输入 a ,添加数据");
            System.out.println("输入 h ,显示头部数据");
            System.out.println("输入 e ,退出对队列的编辑");
            System.out.println("输入 g ,取出头部数据");
            System.out.println("输入 l ,显示所有数据");
            key=scanner.next().charAt(0);
            switch (key){
                case 'a':
                    System.out.println("请输入你要添加的数字");
                    int n=scanner.nextInt();
                    queue.addQueue(n);
                    break;
                case 'h':
                    try {
                        queue.HeadQueue();
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case 'e':
                    System.out.println("对队列的编辑已结束");
                    loop=false;
                    break;
                case 'g':
                    try {
                        queue.getQueue();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    break;
                case 'l':
                    queue.ListQueue();
                    break;
                default:
                    break;
            }

        }
    }
}
//先定义一个队列类
class ArrayQueue{
    private int maxSize;
    private int front;
    private int real;
    private int arr[];
//定义一个构造器,为各项变量赋给初始值
    public ArrayQueue(int arrMaxSize) {
        this.maxSize = arrMaxSize;
        this.arr=new int[maxSize];
        real=-1;
        front=-1;
    }
    //定义ArrayQueue中的各种方法
    //判断队列是否满了
    public boolean isFull(){
        return real==maxSize;
    }
    //判断队列是否为空
    public boolean isEmpty(){
        return real==front;
    }
    //向队列添加数据
    public void addQueue(int n){
        if (isFull()){
            System.out.println("队列满了,不能再添加数据了");
        }
        real++;//尾指针后移
        arr[real]=n;
        return;
    }
    //取出队列头部数据
    public int getQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空,无数据取出");
        }
        int Head=arr[real];
        real--;//尾指针前移一位
        System.out.println("队列的头部数据是"+Head);
        return Head;
    }
    //显示队列的全部数据
    public void ListQueue(){
        if (isEmpty()){
            System.out.println("队列为空,无数据显示");
        }
        System.out.print("队列的所有数据是:");
        for (int i = 0; i < real; i++) {
            for (int num:
                 arr) {
                System.out.printf("%d\t",num);
            }
        }
    }
    //显示队列对头数据
    public int HeadQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空,没有头部数据");
        }
        int Head=arr[real];
        System.out.println("队列的头部数据是"+Head);
        return Head;
    }
}

http://www.niftyadmin.cn/n/3069161.html

相关文章

使用Struts 2框架实现文件下载

从服务器发送一个文件到浏览器需要以下几个步骤 把HTTP响应里的ContentType标头设置为被下载文件的内容类型。ContentType标头的作用是表明数据包里的数据是什么类型&#xff0c; 它由一个多媒体类型和一个子类型标识符组成&#xff08;可以去http://www.iana.org/assignments/…

实验一安卓开发微信页面设计

实验一安卓开发微信页面设计 功能要求&#xff1a; 1.页面具有标题 2.具有四个页面&#xff0c;页面具有底部选择框&#xff0c;同时具有选择事件&#xff0c;当点击选择事件的时候进行页面切换 3.页面内容不超出边界且清晰 思路分析&#xff1a; 该微信界面由三部分组成 1页面…

实验二: 安卓应用UI设计

实验目标和实验内容&#xff1a; 1、掌握UI设计中的layout布局&#xff08;约束布局&#xff09;与基本控件&#xff08;button、text、imageview等&#xff09;&#xff1b; 2、掌握复杂控件与adapter的使用 实验结果&#xff1a;&#xff08;实验小结与结果截图&#xff09…

使用C++名单在文档处理和学生成绩管理系统相结合

对于学生成绩管理系统&#xff0c;我并不陌生&#xff0c;几乎学习C人的语言。做项目会想到学生成绩管理系统&#xff0c;我也不例外。在研究中的一段时间C语言之后&#xff0c;还用C语言到学生管理系统&#xff0c;然后做几个链接。计数&#xff0c;这个系统是以前的系统上的改…

实验三: 服务与广播

实验目标和实验内容&#xff1a; 1、掌握服务的基本概念&#xff0c;能编写服务过程并进行调用&#xff1b; 2、掌握广播的基本概念&#xff0c;能实现广播通信。 3、需实现的具体功能为&#xff1a; 短信到来时自动产生的系统广播→激活音乐播放服务程序→活动组件程序使得停止…

Nginx的负载均衡 - 最少连接 (least_conn)

Nginx版本&#xff1a;1.9.1 我的博客&#xff1a;http://blog.csdn.net/zhangskd 算法介绍 我们知道轮询算法是把请求平均的转发给各个后端&#xff0c;使它们的负载大致相同。 这有个前提&#xff0c;就是每个请求所占用的后端时间要差不多&#xff0c;如果有些请求占用的时间…

《世界是数字的》读后感(3)

第六章 软件系统 6.1 操作系统 操作系统控制和分配计算机资源&#xff1a;首先&#xff0c;它负责管理CPU,调度和协调当前运行的程序(可在任务管理器中查看进程和任务)&#xff1b;其次&#xff0c;操作系统管理RAM(为有效利用RAM&#xff0c;一种思路是在必要时把程序的一部分…

cisco 路由器IOS操作系统

在路由器的使用和配置过程中&#xff0c;有时因操作失误或系统故障&#xff0c;致使路由器IOS操作系统的丢失&#xff0c;导致路由器无法进入正常工作&#xff0c;下面以Cisco2611为例&#xff0c;简要介绍一种方便可靠的IOS操作系统恢复的方法。一、路由器的基本组成及有关术语…