[问题描述]:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
[实现要求]:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。汽车的模拟输入格式可以是:(到达/离去,汽车牌照号,到达/离去的时刻)。例如,(‘A’,1,5)表示1号牌照车在5这个时刻到达,而(‘D’,5,20)表示5号牌照车在20这个时刻离去。整个程序可以在输入信息为(‘E’,0,0)时结束。


所需要的数据结构,停车场采用栈结构,停车场外的便道采用队列结构
值得注意的是,栈的特点是“先进后出,后进先出”,所以停车场里面的车要离开时,在它之后进入的车要为它让道,这就必须要在建一个新的栈用于存放让道的车


具体实现代码

汽车类,定义汽车拥有的属性

package DesignParking;
public class CarInfo{public int state;public int atime;public int dtime;public String license;
}

栈类,定义元素进栈、出栈方法以及输出栈的长度方法

package DesignParking;
public class Stack {private CarInfo S[];private int top;public Stack(int maxSize) {top = -1;S = new CarInfo[maxSize];}public void push(CarInfo x) throws Exception {if(S.length==top+1){throw new Exception("栈已满");}else{top++;S[top]=x;}}public CarInfo pop() {if(top==-1){return null;}           else{return S[top--];}}public int gettop() {   return top+1;}
}

队列类,定义入队、出队方法以及输出队中元素个数的方法

package DesignParking;
public class Queue<CarInfo> {private static final int QUEUE_CAPACITY = 1000;private Object[] elementData;private  int rear;private  int front;public Queue(){this.elementData=new Object[QUEUE_CAPACITY];this.rear=-1;this.front=-1;}public void push(CarInfo data) {if(this.rear + 1>= QUEUE_CAPACITY){throw new RuntimeException("队列已满,入队失败!");}++rear;this.elementData[rear]=data;}public CarInfo pop(){if(isEmpty()){throw new RuntimeException("队列为空,出队失败!");}++front;return (CarInfo) this.elementData[front];       }   public boolean isEmpty() {return this.front==this.rear;}public int length(){return rear-front;}
}

实现类

package DesignParking;import java.util.Scanner;
public class ParkingManagement{private Stack S=new Stack(5);   private Queue<CarInfo> Q = new Queue<CarInfo>();private double fee = 2;public final static int DEPARTURE = 0;public final static int ARRIVAL=1;//停车场管理,license表示车牌号,action表示车辆的动作,到达或离开public void parkingManage(String license,String action,int time) throws Exception{if("arrive".equals(action)){CarInfo info=new CarInfo();info.license=license;if(S.gettop()<5){info.atime=time;info.state=ARRIVAL;S.push(info);System.out.println("车牌号为"+info.license+"的车于"+time+"时刻停放在停车场第"+S.gettop()+"个位置!");}else {Q.push(info);System.out.println("车牌号为"+info.license+"的车停放在便道第"+Q.length()+"个位置!");}}else if("depart".equals(action)){CarInfo info=null;int location=0;//用于记录车辆位置//构造一个新栈存储因车辆离开而导致的其他车辆暂时退出停车场Stack S2=new Stack(S.gettop());for(int i=S.gettop();i>0;i--){info=(CarInfo)S.pop();if(info.license.equals(license)){               info.dtime=time;info.state=DEPARTURE;location=i;break;}elseS2.push(info);//其他车辆暂时退出车场}while(S2.gettop()!=0){//其他车辆重新进入车场S.push(S2.pop());}if(location!=0){//停车场内存在指定车牌号的车辆//计算停放时间,并把毫秒换成分钟int stime=info.dtime-info.atime;                    System.out.println("车牌号为"+info.license+"的车停放"+stime+"分钟,费用为"+(stime*fee));}if(!Q.isEmpty()){info=(CarInfo)Q.pop();info.atime=time;info.state=ARRIVAL;S.push(info);}}   }public static void main(String[] args) throws Exception {   ParkingManagement plms=new ParkingManagement();Scanner sc=new Scanner(System.in);System.out.println("欢迎使用停车场管理系统!!提示表示arrive进入停车场,depart表示离开停车场,exit+“其他”+“其他”表示退出系统");System.out.println("提示该停车场只能停放5辆车!!");System.out.println("-----------------------------------------------------------------------------------");while(true){System.out.println("请输入arrive or depart or exit、车牌号和此时刻,中间用空格间隔");String action=sc.next();String license=sc.next();   int time=sc.nextInt();plms.parkingManage(license, action,time);if("exit".equals(action)){System.out.println("成功退出系统!!");break;}}}
}

运行结果

java语言使用栈和队列实现简易停车场管理系统相关推荐

  1. 数据结构(八) -- C语言版 -- 栈和队列 - 队列的设计与实现

    我让你知道我有啥 零.读前说明 一.队列的概述 二.队列的操作 三.队列的两种存储结构的模型概述 四.顺序存储结构的队列及实现 4.1.顺序存储结构的传统队列简易实现与测试 4.2.顺序存储结构的队列 ...

  2. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  3. java语言基于springboot+vue+elementUI 4S店车辆管理系统-#计算机毕业设计

    项目介绍 随着信息化的不断深入,经济的飞速发展,企业要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的.汽车4S营销管理,作为一种新型的以品牌为单位个体经营管理为主体,同时集系统管理.采 ...

  4. 【Java实现】栈和队列就是这么简单

    一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...

  5. 用Java语言,写一个植物大战僵尸简易版!

    前言 有谁没玩过植物大战僵尸吗? 小灰的一位读者,用Java语言开发了自己的植物大战僵尸游戏.虽然系统相对简单,但是麻雀虽小五脏俱全,对游戏开发感兴趣的小伙伴可以学习一下哦~~ 游戏设计 植物大战僵尸 ...

  6. 数据结构与算法(C语言) | 栈和队列——栈(自己做过测试)

    栈是一种重要的线性结构,通常称,栈和队列是限定插入和删除只能在表的"端点"进行的线性表.(后进先出) –栈的元素必须"后进先出". –栈的操作只能在这个线性表的 ...

  7. java语言链栈_Java语言实现数据结构栈代码详解

    近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...

  8. 【Java数据结构】栈和队列

    一. 栈(Stack) 1.概念 2.入栈和出栈的顺序 3.中缀表达式转后缀表达式 4.栈的方法 LeetCode 150. 逆波兰表达式求值 剑指 Offer 31. 栈的压入.弹出序列 5.栈的实 ...

  9. 用 Java 语言,写一个植物大战僵尸简易版!

    作者 | 林Lychee 来源 | 程序员小灰 前言 有谁没玩过植物大战僵尸吗? 小灰的一位读者,用Java语言开发了自己的植物大战僵尸游戏.虽然系统相对简单,但是麻雀虽小五脏俱全,对游戏开发感兴趣的 ...

最新文章

  1. windows安装配置git和Tortoisegit
  2. wxpython视频教程-单片机C语言入门_单片机教程_单片机编程语言 - C语言网
  3. lucene索引合并与增量索引
  4. 播放dlna服务器上文件,群晖使用教程:DLNA/UPnP协议和Kodi在多设备上播放媒体文件...
  5. java 类隔离_Java类装载体系中的隔离性
  6. Azure App Service 上的根证书
  7. ssh(Spring+Spring mvc+hibernate)——DeptDaoImpl.java
  8. 未来计算机是否有意识或者人为的赋予意识,人工智能会有自我意识吗?
  9. 【学习笔记】局域网基本概念和体系结构,以太网、无线局域网与PPP协议、HDLC协议
  10. 样条表示---插值和逼近样条
  11. app能不能跳转外部h5_轻羽微信小程序和H5的区别在哪里?主要有三点
  12. NSUserDefaults 添加与删除
  13. CentOS下vi编辑器
  14. XML-RPC协议【转】
  15. html5 职工入职后台管理系统_后台管理平台
  16. 一秒钟世界上会发生多少事_再多涂改,人性也总会醒来,也总会主动去追寻那一秒钟...
  17. Arduino U8glib库中的中文字体
  18. Linux信号量常用操作表
  19. 惠普z800工作站bios设置_HP工作站 BIOS说明 适用Z228 Z440 Z230 Z640 Z840 Z800 Z620 Z420 Z820主板设置 -...
  20. 修复 IDEA 使用 Gradle 构建出错时的乱码问题(maven项目转Gradle后乱码,并报“错误,找不到符号”)

热门文章

  1. AWS【亚马逊云】的EC2以及VPC网络框架介绍
  2. MM们必败潮物。。。。大眼睛的小秘密哦```````
  3. 柳州汇商大湾区双招双引 谋定·大健康医药:李喜贵被聘顾问
  4. mysql函数 动态语句_自定义函数动态执行SQL语句
  5. 翻译:《Pro CSS and HTML Design Patterns》简介、总览和目录
  6. Python学习记录——십 列表
  7. mysql数据导入报错1265
  8. JAVA使用OPC UA 方式与设备通信(milo)
  9. net start MySQL——无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
  10. python autocad显示_Python AutoCAD 系统设置的实现方法