停车场问题

  • 问题描述
  • 测试数据
  • 基本要求
  • 实现提示
  • 代码实现
    • 栈的实现
    • 队列的实现
    • 主函数的实现

问题描述

设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。


测试数据

设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3, 20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。

每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。

基本要求

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。


实现提示

需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。

代码实现

栈的实现

import java.util.Iterator;
public class Queue_List<T> implements Iterable{//存储元素的数组private T[] eles;//记录当前栈中的元素个数private int N;//构造方法public Queue_List(int capacity){//初始化数组this.eles=(T[])new Object[capacity];//初始化长度this.N=0;}//将一个栈置为空public void clear(){this.N=0;}//判断当前栈是否为空public boolean isEmpty(){return N==0;}//获取栈的元素个数public int size(){return N;}//获取指定位置的元素public T get(int i){return eles[i];}//判断当前栈是否已满public boolean isFull(){ return N == eles.length; }//把t元素压入栈public void push(T t){if(N == eles.length){System.out.println("栈已满");}elseeles[N++]=t;}//弹出栈顶元素public T pop(){//记录索引i处的值T current = eles[N-1];//元素个数-1N--;return current;}//遍历栈@Overridepublic Iterator<T> iterator() {return new SIterator();}private class SIterator implements Iterator{private int cusor;public SIterator(){this.cusor = 0;}@Overridepublic boolean hasNext() {//判断容器还有没有下一个元素return cusor < N;}@Overridepublic Object next() {//获取当前容器下一个元素return eles[cusor++];}}
}

队列的实现


//队列结构import java.util.Iterator;public class Queue<T> implements Iterable<T>{//记录首结点private Node head;//记录最后一个结点private Node last;//记录队列中元素的个数private int N;private class Node{public T item;public Node next;public Node(T item, Node next) {this.item = item;this.next = next;}}public Queue() {this.head = new Node(null,null);this.last=null;this.N=0;}//判断队列是否为空public boolean isEmpty(){return N==0;}//返回队列中元素的个数public int size(){return N;}//向队列中插入元素tpublic void enqueue(T t){if (last==null){//当前尾结点last为nulllast= new Node(t,null);head.next=last;}else {//当前尾结点last不为nullNode oldLast = last;last = new Node(t, null);oldLast.next=last;}//元素个数+1N++;}//从队列中拿出一个元素public T dequeue(){if (isEmpty()){return null;}Node oldFirst= head.next;head.next=oldFirst.next;N--;//因为出队列其实是在删除元素,因此如果队列中的元素被删除完了,需要重置last=null;if (isEmpty()){last=null;}return oldFirst.item;}@Overridepublic Iterator<T> iterator() {return new QIterator();}private class QIterator implements Iterator{private Node n;public QIterator(){this.n=head;}@Overridepublic boolean hasNext() {return n.next!=null;}@Overridepublic Object next() {n = n.next;return n.item;}}
}

主函数的实现

import java.util.Scanner;
/*
【问题描述】
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内
按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场
的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,
则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后开入的车辆必须先退出
车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离
开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。【测试数据】
设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3, 20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,其中,‘A’表示到达;‘D’表示离去,‘E’表示输入结束。【基本要求】
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组
输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组
输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若
是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以
顺序结构实现,队列以链表实现。【实现提示】
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输
入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进
入停车场的时刻。*/
/** 栈 与 队列 两个栈 一个充当停车场 另一个保存出栈的元素顺序 队列用于存放排队的车* 另外每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻*/
public class Car_Park {public static void main(String[] args) {Queue<String> sta = new Queue<>();//队列用于存储排队的车Queue_List<String> queue01 = new Queue_List<>(2); //栈1用于充当停车场Queue_List<String> queue02 = new Queue_List<>(2);//栈2用于保存出栈的元素顺序System.out.println("请输入停车场可以停放多少部车");Scanner sc = new Scanner(System.in);int n = sc.nextInt();System.out.println("您的数据总个数");int num = 0;num = sc.nextInt();System.out.println("请依次输入您的数据");//二维数组存储录入的数据String[][] Array = new String[num][3];for (int i = 0; i < num; i++) {for (int j = 0; j < 3; j++) {Array[i][j] = sc.next();}}//遍历二维数组遇到A则入栈,遇到D则出栈int loctionQueue = 0;int loctionStack = 0;//for (int i = 0; i < num; i++) {for (int j = 0; j < 3; j++) {switch (Array[i][j]) {case "A"://A入栈if (queue01.isFull()) {//栈已满将元素放入队列中排队sta.enqueue(Array[i][1]);System.out.println(Array[i][1] + "号车在第" + loctionStack + "号等车位");loctionStack++;}if (!queue01.isFull()) {queue01.push(Array[i][1]);//栈未满进行压栈操作System.out.println(Array[i][1] + "号车在第" + loctionQueue + "号车位");loctionQueue++;}break;case "D"://D出栈//Array[i][2]是汽车出栈的编号,现用栈里的编号与出栈编号比较 相同则出栈不相同则保存到栈2里String chuzhan = null;//记录弹出栈的元素值(汽车的编号)int stime = 1;//记录初始时间int ftime = 0;//记录结束时间int time = 0;//记录时间差while (!queue01.isEmpty()) {//提取全部元素,符合要求的直接提取,不符合存入栈2String temp = queue01.pop();String temp1 = Array[i][1];if (!temp.equals(temp1)) {//不符合要求放入栈2queue02.push(temp);}if (temp.equals(temp1)) {//符合要求提取出来chuzhan = temp;//将弹出元素赋值变量chuzhan//求时间int i2 = Integer.parseInt(Array[i][2]);//字符串转intftime = i2;//结束时间}}System.out.println("栈是否为空:" + queue01.isEmpty());//再次遍历数组找到编号第一次出现的地方记录1号位的时间label:for (int k = 0; k < num; k++) {for (int l = 0; l < 3; l++) {if (Array[k][1].equals(chuzhan)) {//找出弹出的汽车编号第一次出现的地方 记录次数组的时间int ii = Integer.parseInt(Array[k][2]);//字符串转intstime = ii;break label;}}}//计算停车时间time = ftime - stime;System.out.println(chuzhan + "号车离开   " + chuzhan +"号车的停留时间为" + time);System.out.println("结束时间为: " + ftime);System.out.println("初始时间为: " + stime);//弹栈后,栈2和队列里面的元素进栈,弹一进一loctionQueue = 0;//车位重置System.out.println("-------------------------");while (!queue02.isEmpty()) {String temp = queue02.pop();queue01.push(temp);System.out.println(temp + "号车在第" + loctionQueue + "号车位");loctionQueue++;}while (!queue01.isFull()) {if (!sta.isEmpty()) {String temp = sta.dequeue();queue01.push(temp);System.out.println(temp + "号车在第" + loctionQueue + "号车位");loctionQueue++;//重置初始时间label02:for (int k = 0; k < num; k++) {for (int l = 0; l < 3; l++) {if (Array[k][1].equals(temp)) {Array[k][2] = Array[i][2];break label02;}}}}if (sta.isEmpty()){break;}}break;case "E":break;}}}}
}/*
代码问题总结:
1.键盘录入动态数组的元素(未解决)
2.录入总体数据,每个数据中又分数据小块,使用二维数组
3.数组的索引从0开始
4.二维数组[x][y] x代表哪一个一维数组 y代表这个一维数组的哪一个元素
5.对于String来说,== 比较的是地址, equals比较的是字符串的类型
6.String转int int ii = Integer.parseInt(String类型数据);
7.跳出多层循环 利用标签变量 在头循环前声明标签 需要跳出循环时break 标签;*/

【学校实验】停车场问题:设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。相关推荐

  1. C++设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序依次排列。

    若车场内已停满n辆汽车,则后来的汽车只能在门外便道上等候,一旦有车开走, 则排在便道上的第一辆车即可开入:当停车场内某辆车要离开时,在它之后开入的车 辆必须先退出车场为它让路,该车开出后,其它车辆再按 ...

  2. LinuxC练习:停车场项目:停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要停在门 外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中

    基本功能要求:           (1)建立三个数据结构分别是:停放栈.让路栈.等候队列.           (2)输入数据模拟管理过程,数据(入或出,车号) 功能描述:进车登记.出车登记.按车牌 ...

  3. 数据结构实验——模拟停车场

    问题描述 设停车厂只有一个可停放5辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车 ...

  4. 数据结构(二)模拟停车场程序的实现

    1.实验目的:掌握线性表的基本操作,深入理解栈.队列的存储结构并掌握进栈.出栈和入队.出队的实现. 2.解题思路: 问题:设有一个可停放N辆汽车的狭长停车场,只有一个大门供车辆出入,车辆按到达先后顺序 ...

  5. 模拟停车场管理C语言代码

    1.问题描述: 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达的时间先后顺序依次排列,若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦 ...

  6. 模拟停车场管理系统(c++,使用栈和队列)

    目录 一.问题描述 二.算法结构分析与设计 三.算法主模块的流程及各子模块的主要功能 四.算法详细设计 五.源代码 一.问题描述 功能要求 设停车场只有一个可以停放几辆汽车的狭长通道,且只有一个大门可 ...

  7. 模拟停车场管理系统(数据结构)

    其实这是期末作业啦...新人瑟瑟发抖.(手动滑稽 PS:工程下载:https://download.csdn.net/download/weixin_41918712/10506307 作业要求 模拟 ...

  8. Linux下多线程模拟停车场停车

    #include<stdio.h> #include<string.h> #include<unistd.h> #include<stdlib.h> # ...

  9. java 模拟停车_Java多线程编程小实例模拟停车场系统

    下面分享的是一个Java多线程模拟停车场系统的小实例(Java的应用还是很广泛的,哈哈),具体代码如下: Park类 public class Park { boolean []park=new bo ...

最新文章

  1. office使用技巧
  2. [ZT]SQL Server 的事务日志意外增大或充满的处理方法
  3. Hadoop核心机制详细解析
  4. [hdu3549]Flow Problem(最大流模板题)
  5. PHPstorm中使用数组短语法[],出现红色波浪
  6. 0708---oop学习--用户密码管理
  7. 如何设置单词第一个字母大写_大写一行中每个单词的第一个和最后一个字母
  8. 23.网市场云建站系统部署
  9. 组网胖模式_胖瘦AP组网优劣对比,你知道吗?
  10. Linux 下安装配置 JDK7
  11. python flask api部署_使用flask开发api——部署flask,使用gunicorn+gevent模式的http server...
  12. 京条计划,今日头条不仅是京东的又一流量入口
  13. 【yum】yum 源的配置与使用
  14. commit rollback操作产生undo和redo?
  15. [转] 公务员80分申论万能模板(转给需要的人)
  16. 游戏开发物语方案点数分配_《游戏开发物语》官方超全新手攻略和名词解析!...
  17. 红外遥控风扇改手机APP远程控制杂记
  18. 计算机专业python毕业设计题目_计算机专业,毕业设计的选题?
  19. 固态硬盘:掉盘不识别自检修复,30分钟大法
  20. 坚持是一种孤独,开发就是这么坑!

热门文章

  1. 梦幻哪个服务器最多牛人,盘点梦幻西游十大火区 你所在的服务器上榜了?
  2. linux系统下查询硬盘转速
  3. HTML学习笔记-v1.3
  4. smartrcp状态栏的实现示例
  5. JAVA校验时间的大小,并确定是否为当天
  6. windows批处理小脚本总结
  7. 【对讲机的那点事】带你玩转语洽云对讲调度及录音
  8. Openstack 实现技术分解 (3) 开发工具 — VIM dotfiles
  9. UG NX 5.0模具设计一册通
  10. Flink 1.9 特性学习和Blink SQL Parser 功能使用