首页 > 编程语言 >Java基础学习10--算法

Java基础学习10--算法

时间:2023-02-02 17:23:48浏览次数:48  
标签:10 队列 Java -- System int front println rear

 队列(2023-02-02) 使用数组模拟队列(未优化) 1.需要用的变量有front=-1,rear=-1,maxsize以及数组int[] arr; 2.判断队列已满的条件是rear==maxsize-1,队列为空的条件是rear==front; 3.入队是需要判断队列是否已满且rear的后移条件是为rear++,出队是需要判断队列是否为空(以抛出异常的方式提示)front++

throw new RuntimeException("队列为空");

4.队列长度为maxsize,即遍历输出队列的时候的循环终止条件是maxsize

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用数组模拟队列(优化后) 1.需要用的变量有front=0,rear=0,maxsize以及数组int[] arr; 2.判断队列已满的条件是(rear+1)%maxsize,队列为空的条件是rear==front; 3.入队是需要判断队列是否已满且rear的后移条件为(rear+1)%maxsize,出队是需要判断队列是否为空(以抛出异常的方式提示),front的后移条件是(front+1)%maxsize
throw new RuntimeException("队列为空");

4.队列长度为 (rear+Maxsize-front)%Maxsize ,即遍历输出队列的时候的循环终止条件是front+ size()

size()为函数,函数体就是(rear+Maxsize-front)%Maxsize

类:

package com.zyk.Queue;

public class Queue {
    private int Maxsize;
    private int front;
    private int rear;
     private int[] arr;

    public Queue(int maxsize) {
        Maxsize = maxsize;
        arr=new int[Maxsize];

    }
    public boolean isFull(){
        //return rear==Maxsize-1;
        return (rear+1)%Maxsize==front;//优化算法
    }
    public boolean isEmpty(){
        return front==rear;
    }
    public void AddQueue(int n){
        if(isFull()){
            System.out.println("队列已满");
            return;
        }
     // rear++;
     // arr[rear]=n;
        arr[rear]=n;
        rear=(rear+1)%Maxsize;
    }
    public int GetQueue(){
        if(isEmpty()){
          throw new RuntimeException("队列为空");
        }
      // front++;
      // return arr[front];
        int value =arr[front];
        front=(front+1)%Maxsize;
        return value;
    }
    public void ShowQueue() {
        if (isEmpty()) {
            System.out.println("队列为空");
            return;
        }
        //      for(int i=0;i<Maxsize;i++){
        //          System.out.printf(arr[i]+"\t");
        //      }
        //  }
        //循环从front开始,结束条件是队列的有效个数
        for (int i = front; i <front+ size(); i ++) {
            System.out.printf("arr[%d]=%d\n",i%Maxsize,arr[i%Maxsize]);
        }
    }
    //计算有效的队列个数
    public int size(){
        return (rear+Maxsize-front)%Maxsize;
    }
}

主函数:

package com.zyk.Queue;

import java.util.Scanner;

public class ArrayQueue {
    public static void main(String[] args) {
        //有效长度只有3,所以只能输入三个数据,输入第四个数据时会提示已满,这是因为有一个rear和front约定的空间
        Queue queue = new Queue(4);
        String key="";
        boolean loop=true;
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("\n\t\t\t1 显示队列");
            System.out.println("\t\t\t2 入队");
            System.out.println("\t\t\t3 出队");
            System.out.println("\t\t\t4 退出系统");
            System.out.println("请输入选项");
            key=scanner.next();
            switch (key){
                case"1":
                    queue.ShowQueue();
                    break;
                case"2":
                    System.out.println("请输入数据");
                    int value=scanner.nextInt();
                    queue.AddQueue(value);
                    break;
                case"3":
                    try {
                        int res=queue.GetQueue();
                        System.out.println(res);
                    }catch(Exception e){
                        System.out.println(e.getMessage());
                    }
                    break;
                case"4":
                    scanner.close();
                    loop=false;
                    break;

            }
        }while(loop);
        System.out.println("已退出......");
    }
}

 

标签:10,队列,Java,--,System,int,front,println,rear
From: https://www.cnblogs.com/copyjames/p/17086716.html

相关文章

  • JQuery案例和插件机制
    案例-广告显示和隐藏需求:1.当页面加载完,3秒后,自动显示广告2.广告显示5秒后,自动消失分析:1.使用定时器完成,setTimeout(执行一次定时器)2.分析......
  • 玩转web3第二篇——Web3UI Kit
    介绍开发web2应用的时候,可以很方便找到很多优秀的UI库,比如antd,materialui,elementui等等,但web3应用对应的UI库却不多。今天给大家介绍一款优秀的WEB3的UI库——Web3UIK......
  • Python之字典遍历元素(4种方式)
    第一种:foringirl_dict={"China":"小美","Japan":"图多天光","Korea":"斯密达美"}foreveryKeyingirl_dict:print("key:"+everyKey+"value:"......
  • serializers.Serializer and ModelSerializer
    昨日回顾#1APIView---->drf提供的,继承了原来的View,以后如果写视图类,都继承APIView及其子类#2APIView执行流程 -1去除了csrf认证-2包装了新的Request对象---......
  • 后端返回时间戳倒计时
    //倒计时   payTime(){    //创建订单的时间    letcreatedAt=(Date.parse(this.data.created_at))/1000;    constIntervalTim......
  • linux网络知识:路由策略(ip rule,ip route)
    一,路由策略(使用iprule命令操作路由策略数据库)基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目的地址而且能够根据报文大小,应用或IP源地......
  • openjdk@15源码-01调试源码
    openjdk@15源码-调试源码在调试jdk源码过程中可能需要追踪c/cpp甚至汇编指令,方便起见新建项目不需要package路径0Git可以直接clone我自己的代码https://github.com/Ba......
  • Android Studi导出apk包自定义文件名
    在app的gradle配置文件中的release代码块中放置以下代码android.applicationVariants.all{variant->variant.outputs.all{output->if(outputFileNa......
  • c语言-----指针例子
    指针的基本应用#include<stdio.h>intmain(){ inta=100,b=200; int*p_1,*p_2=&b; p_1=&a; printf("a=%d\n",a); printf("*p_1=%d\n",*p_1); printf("b=%d......
  • docker安装sonarqube,sonarQube静态代码扫描
    一、sonarqube简介SonarQube是管理代码质量的一个开放平台,可以快速定位代码中潜在的或者明显的错误。支持Java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等二十几......