java数组应用(栈和队列以及酒店模拟)

news2024/11/24 12:39:09

1.编写程序,使用一维数组,模拟栈数据结构

要求
1.栈内可以存放任意数据
2.栈内提供push方法模拟压栈
3.栈内提供pop方法模拟出栈
4.栈的大小默认为10

新建MyStack类


/**
 * @author DeYou
 * @date 2022/11/10 23:01
 */
public class MyStack {

    Object[] element;
    int index;
    public MyStack(){
        element=new Object[10];
        index=-1;
    }
    /**
     * @param object 被压入的元素
     */
    public void push(Object object){
        if (index>=element.length-1){
            System.out.println(object+"压栈失败,栈已满");
        }else {
            index++;//当index为9的时候,再自加1为10,超过了数组索引的最大值,所以上面的判断条件为大于等于9
            element[index]=object;
            System.out.print(element[index]+"压栈成功\t");
            if (index==4){//为了方便截图每行五个后换行
                System.out.println();
            }
        }
    }

    /**
     *
     * @return 弹出的元素
     */
    public void pop(){
        if (index<0){
            System.out.println("栈已空");
        }else{
            System.out.print(index+":"+element[index]+"弹出\t");
           
            index--;
        }
    }

    public Object[] getElement() {
        return element;
    }

    public void setElement(Object[] element) {
        this.element = element;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }
}


创建MyStackTest测试类


public class MyStackTest {
    public static void main(String[] args) {
        MyStack myStack=new MyStack();
        for (int i = 0; i < 11; i++) {
            myStack.push(new String("123"));

        }
        for (int i = 0; i < 11; i++) {
            myStack.pop();
        }
    }
}

在这里插入图片描述
栈的特点:先进后出
借助index栈帧指向栈顶,index初始值为-1,通过index自增(++)和自减(–)来进行数据的压栈和弹栈操作,

2.编写程序,为某个酒店编写程序,酒店管理系统,模拟订房和退房,并打印所有的房间状态功能

1.该系统的用户是:酒店前台
2.所有的房间使用一个二维数组来模拟
3.酒店的每个房间是一个java对象:Room
4.每个房间都有:编号,类型,是否空

新建Room类(房间类)

public class Room {
    /**
     * @param number 房间号 type 类型 state 是否入住
     */
    private int number;
    private String type;
    private boolean state;

    public Room() {
    }
    public Room(int number, String type, boolean state) {
        this.number = number;
        this.type = type;
        this.state = state;
    }
    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean getState() {
        return state;
    }

    public void setState(boolean state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "房间号:" + number +
                ", 类型:" + type +
                ", 是否入住:" + state+"\t";
    }
}

创建酒店类(HotelManagementSystem)

import java.util.Arrays;

public class HotelManagementSystem {
      private Room[][] rooms;

    /**
     * 初始化酒店并设置房间的数量和默认状态
     */
    public HotelManagementSystem(){
        rooms=new Room[4][4];
        for (int i = 0; i < rooms.length; i++) {
            for (int j = 0; j < rooms[i].length; j++) {
                rooms[i][j]=new Room();
                switch (i){
                    case 0:rooms[i][j].setType("双人间");break;
                    case 1:rooms[i][j].setType("单人间");break;
                    case 2:rooms[i][j].setType("豪华间");break;
                    case 3:rooms[i][j].setType("至尊间");break;
                }
                rooms[i][j].setState(false);
                rooms[i][j].setNumber((i+1)*100+j+1);
            }
        }
    }

    /**
     * 订房
     * @param nmber 房间编号
     * @return
     */
    public boolean addState(int nmber){
        if(!rooms[nmber/100-1][nmber%100-1].getState()){
            rooms[nmber/100-1][nmber%100-1].setState(true);
            System.out.println("订房成功");
            return true;
        };
        return false;
    }

    /**
     * 退房
     * @param nmber 房间编号
     * @return
     */
    public boolean delectState(int nmber){
        if(rooms[nmber/100-1][nmber%100-1].getState()){
            rooms[nmber/100-1][nmber%100-1].setState(false);
            System.out.println("退房成功");
            return true;
        };
        return false;
    }

    /**
     * 查询所有的房间
     */
    public void selectRoom(){
        for (Room[] s: rooms) {
            for (Room r: s) {
                if (!r.getState()){

                    System.out.print(r);
                }
            }
            System.out.println();
        }
    }

    public Room[][] getRooms() {
        return rooms;
    }

    public void setRooms(Room[][] rooms) {
        this.rooms= rooms;
    }

    @Override
    public String toString() {
        return "HotelManagementSystem{" +
                "rooms=" + Arrays.toString(rooms) +
                '}';
    }
}

创建酒店测试类(otelManagementSystemTest)


public class HotelManagementSystemTest {
    public static void main(String[] args) {
        HotelManagementSystem hotelManagementSystem = new HotelManagementSystem();
        //入住101房间
        hotelManagementSystem.addState(101);
        //退房101房间
        hotelManagementSystem.delectState(101);

		 //入住101房间
        hotelManagementSystem.addState(101);
        //入住102房间
        hotelManagementSystem.addState(102);
        //入住103房间
        hotelManagementSystem.addState(201);
        System.out.println("未入住房间有");
        //查询所有
        hotelManagementSystem.selectRoom();
        //获取酒店所有的房间
        Room[][] room=hotelManagementSystem.getRooms();
        System.out.println("======================");
        //打印所有的房间
        for (Room[] r: room) {
            for (Room i:r) {
                System.out.print(i);
            }
            System.out.println();
        }

    }
}

3.编写程序,模拟队列数据结构

一些条件:

  • 队列先进先出
  • 有队头队尾两个属性
  • 有出队和入队操作(入队在队尾操作,出队在队头操作)
  • 默认队列大小为10

创建myqueue类(队列类)

public class MyQueue {
    /**
     * front 队头
     * rear 队尾
     */
    private int[] arrays;
    private int front;
    private int rear;

    public MyQueue(){
        arrays=new int[10];
        front=0;
        rear=0;
    }

    /**
     *
     * @param number 入队元素
     * @return 是否入队成功
     */
    public boolean enQueue(Integer number){
        //arrays.length==rear 判断队满
        if (!(arrays.length==rear)){
            arrays[rear]=number;
            rear++;
            return true;
        }else {
            return false;
        }
    }

    /**
     * 出队
     * @return 返回出队的元素
     */
    public Integer deQueen(){
    //队列空无法完成出队操作
        if (!(front==arrays.length||front==rear)){
            front++;
            return arrays[front-1];
        }else {
            return null;
        }
    }

}

假溢出的现象:arrays.length==rear这是上面判断队满的条件,但实际上还有三个空间没有使用
在这里插入图片描述
上述图也满足队满的条件,但并没有队满,所以出现了循环队列,避免了浪费空间
循环队列:将顺序队列臆造成一个环状的空间,即把存储队列元素的顺序队列从逻辑上视为一个环
队列会存在假溢出为了避免这一问题出现了循环队列
循环队列如下图在这里插入图片描述
上述判断队满的方式为:舍弃一个空间来区别队满和队空

循环队列条件如下:

  • 队满:(rear+1)%queue.length==front
  • 队空:front==rear

另外两种为

  • 设置状态字段:增加数据成员,例如tag=0时,若因删除导致front==rear则为队空,tag=1,若因添加导致front=rear则为队满
  • 添加表示数据元素的个数,当实际存放的数据大小等于空间大小则为队满

一次简单的关于java数组使用的小实践 ! ! !
如有错误,请麻烦留言,我会及时改之,以防给别人带来错误的观点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

blender Eevee渲染器

文章目录简介.采样.环境光遮蔽.辉光.景深.次表面散射.屏幕空间反射.间接光照明.阴影.体积.简介. 1 EV渲染器是实时渲染&#xff0c;类似于游戏引擎,效果差于Cycles 2 EV渲染器使用的设备是显卡 采样. 1 渲染和视图分别指渲染模式和视图模式的采样值&#xff0c;值越大&#…

Android Studio 中MotinLayout的简单使用

​ 一、什么是MotionLayout MotionLayout 是一种布局类型&#xff0c;可帮助您管理应用中的运动和微件动画。MotionLayout 是 ConstraintLayout 的子类&#xff0c;在其丰富的布局功能基础之上构建而成。 二、使用MotionLayout的准备 1.添加MotionLayout依赖项 要在项目中使用…

【菜鸡读论文】Face2Exp: Combating Data Biases for Facial Expression Recognition

【菜鸡读论文】Face2Exp: Combating Data Biases for Facial Expression Recognition 最近上海开始降温了&#xff0c;而且常常下雨&#xff0c;天气开始变得好冷啊&#xff01;以前年轻的时候冬天经常穿的少&#xff0c;现在膝盖开始有点遭不住了&#xff0c;小伙伴们一定要保…

Go字符串拼接6种方式及其性能测试:strings.builder最快

Go字符串拼接常见的方式有加号、fmt.Sprintf、strings.Builder、bytes.Buffer、strings.join、切片。 package concat_stringimport ("bytes""fmt""strconv""strings""testing" )const numbers 100// func BenchmarkStri…

Kafka安装与配置

1、Java环境为前提 &#xff08;1&#xff09;上传jdk-8u261-linux-x64.rpm到服务器并安装&#xff1a; rpm -ivh jdk-8u261-linux-x64.rpm &#xff08;2&#xff09;配置环境变量&#xff1a; vim /etc/profile # 生效 source /etc/profile # 验证 java -version 2、Zook…

贝叶斯定理~~概率分布

还是搬来了基础自己学习用哦 ~~ 从最基础的概率论到各种概率分布全面梳理了基本的概率知识与概念&#xff0c;这些概念可能会帮助我们了解机器学习或开拓视野。这些概念是数据科学的核心&#xff0c;并经常出现在各种各样的话题上。重温基础知识总是有益的&#xff0c;这样我们…

适应性哈夫曼编码(Adaptive Huffman coding)

适应性哈夫曼编码适应性哈夫曼编码简介算法示例适应性哈夫曼编码 简介 适应性哈夫曼编码&#xff08;Adaptive Huffman coding&#xff09;&#xff0c;又称动态哈夫曼编码&#xff08;Dynamic Huffman coding&#xff09;&#xff0c;是基于哈夫曼编码的适自适应编码技术。它…

深度学习Day07

Recurrent Neural Network 智慧客服——Slot Filling 根据上 下文产生不同的output

Java搭建宝塔部署实战毕设项目WMS仓库管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕业设计项目WMS仓库管理系统源码。 技术架构 技术框架&#xff1a;SpringMVC Mybatis Ehcache bootstrap jquery mysql5.7运行环境&#xff1a;jdk8 nginx1.20 tomcat9 In…

基于PSO粒子群算法的MPPT最大功率跟踪Simulink仿真,PSO采用S函数实现

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 MPPT控制器的全称是“最大功率点跟踪”&#xff08;Maximum Power Point Tracking&#xff09;太阳能控制器&#xff0c;是传统太阳能充放电控制器的升级换代产品。MPPT控制器能够实时侦测太阳能…

30岁自学Python转行靠谱吗?

前言 30岁自学Python转行靠谱吗&#xff1f;若啃学习任何时候都不晚&#xff0c;关键是学习完用来做什么。提高工作效率&#xff0c;写些脚本实现自动化办公这些完全没问题。如果学python是为了转开发&#xff0c;建议慎重考虑&#xff0c;程序开发转Python相对容易些&#xf…

[附源码]计算机毕业设计血库管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机网络——运输层【重点】

运输层概述 概念 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时&…

【SpingBoot拦截器】实现两个接口,配置拦截路径

文章目录SpingBoot拦截器拦截器与过滤器的区别&#xff1a;1.HandlerInterceptor接口2.WebMvcConfigurer接口3.示例&#xff1a;SpingBoot拦截器 【SpringWeb框架中的拦截器作用类似于过滤器&#xff0c;都可以对一个请求进行拦截处理。】 我们可以用拦截器做很多事情&#xf…

使用HTML制作静态网站作业——我的校园运动会(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Java项目:SSM企业门户网站

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;前台主要用于官网展示&#xff0c;后台主要为管理员管理&#xff0c; 管理员角色包含以下功能&#xff1a; 管理员…

Rook Ceph浅谈

storageclass是最省心的&#xff0c;上面三种删除了容器存储还在 下图是管理员定义pv&#xff0c;用户不知道这些细节 PersistentVolume pv会跟后端的存储rbd对接 用户通过PVC调用PV ,根据10G容量去pv里找相匹配的自动关联 上图就叫 pvc-demo StorageClass 更厉害 管理员…

PostgreSQL 内核可观测性体系

文章目录背景Metricspgstat指标展示指标统计相关的guc 参数pgstat 实现pg_stat_statements基本用法及指标内容pg_stat_statements 实现Trace总结背景 PG 作为一个演讲30多年历史的TP 数据库&#xff0c;其复杂度极高&#xff0c;如果帮助DBA 在线上分析复杂查询的问题或者构建…

Nexus私服(二)

(一) SpringBoot配置Maven发布至Nexus私服 Nexus默认会带有四常用个仓库&#xff0c;maven-central、maven-public、maven-releases、maven-snapshotsmaven-central类型是proxy代理类型&#xff0c;地址是指向maven中央仓库地址https://repo1.maven.org/maven2/maven-releases、…

空间复杂度(Space Complexity)

预计阅读时间&#xff1a;10分钟 一、简介 随着计算机空间的发展&#xff0c;空间复杂度逐渐变得不那么重要了&#xff0c;但它在比赛中仍然存在。 推导方法&#xff1a; 用常数1取代运行时间中的所有加法常数。 在修改后的运行次数函数中&#xff0c;只保留最高阶项。…