运行截图:

(栈和队列)
点此去下载
在学习过程中,总结到的规律:
栈功能(仅有增删,无查改)
• 入栈–增
• 出栈–删
队列功能(仅有增删,无查改)
• 入队–增
• 出队–删
二者由于自身特性限制,比动态数组和链表的功能还少,所以实现起来也较简单,只有两个功能。
问题探讨:
• 值得一提的是为什么我们选择在链表的头结点后删除,尾节点插入。
按理说无论是链表的头和尾,均可进行插入删除操作。让我们来探讨一下这个问题,假设在链表头结点插入,新节点指向头结点后一个元素,头结点指向新节点,插入成功;再看看在尾节点删除,删除得知道尾节点前一个节点,这时我们突然发现,单向链表只能往后找,没法回头,这时候如果想解决问题,仅有添加一个指向尾节点前一个的指针。若是选择在尾部插入,尾节点直接指向新节点就大功告成,头结点删除也很容易。
• 为了方便对链表各项操作的理解,把链表应用到具体的实例中,我选的程序为:停车管理系统。
问题描述
• 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。
• 车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。
• 如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,
• 一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。
• 停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,
• 待其开出停车场后,这些车辆再依原来的次序进场。
• 每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。
• 如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。
• 编制程序模拟该停车场的管理。
设计思路
• 1.停车场中某车的离开必须在其前面的车已经离开之后才行,满足“先进后出”的特性,因此采用栈来模拟停车场。
• 2.对于指定停车场,其车位相对固定,因此采用顺序栈。
• 3.从停车场出来为后面的车让路的车也是先出的后进,因此也用栈来模拟。
• 4.从停车场出来的车数最大不超过停车场的车,因此采用长度等于车场车辆数的顺序栈。
• 5.便道上的车按照先到先开进车场的原则,满足“先进先出”的特性,因此可以用队列来模拟便道。
• 6.便道上的车辆数目不固定,因此采用链队列。
• 7.每组数据应包含:到达还是离去,车辆牌照号码,到达或离去的时刻。
详细设计:
public class ParkingLotManagementSystem {

private SqStack S = new SqStack(100);// 存放停车场上的车辆信息,假设停车场只有100个位置
private LinkQueue Q = new LinkQueue();// 存放便道上的车辆信息
private double fee = 2;// 每分钟停车费用
public final static int DEPARTURE = 0;// 标识车辆离开
public final static int ARRIVAL=1;//标识车辆到达内部类,用于存放车辆信息
public class CarInfo{public int state;//车辆状态,到达/离开public GregorianCalendar arrTime;//到达时间public GregorianCalendar depTime;//离开时间public String license;//车牌号
}

关键代码(关于栈和队列的操作):
停车场管理,license表示车牌号,action表示车辆的动作,到达或离开。构造一个新栈存储因车辆离开而导致的其他车辆暂时退出停车场( SqStackS2=new SqStack(S.length());)

public void parkingManage(String license,String action) throws Exception{if("arrive".equals(action)){CarInfo info=new CarInfo();info.license=license; if(S.length()<100){ info.arrTime=(GregorianCalendar)GregorianCalendar.getInstance();info.state=ARRIVAL;S.push(info); System.out.println(info.license+"停放在停车场第"+S.length()+"个位置!");}else {//停车场已满Q.offer(info);//进入便道System.out.println(info.license+"停放在停车场第"+Q.length()+"个位置!");}}else if("depart".equals(action)){ CarInfo info=null;int location=0; SqStack S2=new SqStack(S.length());for(int i=S.length();i>0;i--){info=(CarInfo)S.pop();if(info.license.equals(license)){ info.depTime=(GregorianCalendar)GregorianCalendar.getInstance();info.state=DEPARTURE;location=i;break;}

计算停放时间,并把毫秒换成分钟
double time=(info.depTime.getTimeInMillis()-info.arrTime.getTimeInMillis())/(100060);
DecimalFormat df=new DecimalFormat(“0.0”);
System.out.println(info.license+“停放”+df.format(time)+“分钟,费用为”+df.format(time
fee));
}
if(!Q.isEmpty()){
info=(CarInfo)Q.poll();
info.arrTime=(GregorianCalendar)GregorianCalendar.getInstance();
info.state=ARRIVAL;
S.push(info);
}
不足与改进:好的程序应该有好的图形交互界面,方便使用者去使用。毕竟使用者不像开发者一样,所以改进的地方应该是着重于实现良好的图形界面。
特色功能:有便道的设计,使程序更加贴近现实生活

Java停车场管理系统使用栈和队列任务台程序相关推荐

  1. 数据结构课程设计----停车场管理系统(栈和队列)

    题目: 设停车场(如下图1所示)内只有一个可停放几量汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北 ...

  2. JAVA停车场管理系统(ArrayList、栈操作)

    JAVA停车场管理系统 系统使用者分为管理员和用户 管理员菜单: 1.查看总收入 2.查看车牌号 3.查看长期卡信息 4.查看停车位 5.退出系统 查收总收入 ###### 查收停车场信息 查收长期卡 ...

  3. 数据结构课设--2停车场管理(栈和队列的应用)

    2.停车场管理(栈和队列的应用) [问题描述] 设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的 ...

  4. 20200927:Java和Cpp中栈与队列的区别

    Java和Cpp中栈与队列的区别 题目 思路与算法 代码实现 对比分析两种语言中栈和队列的区别 题目 1.225. 用队列实现栈 2.232. 用栈实现队列 3.155. 最小栈 思路与算法 三道简单 ...

  5. [附源码]计算机毕业设计JAVA停车场管理系统

    [附源码]计算机毕业设计JAVA停车场管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intel ...

  6. [附源码]计算机毕业设计JAVA 停车场管理系统

    [附源码]计算机毕业设计JAVA 停车场管理系统 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Inte ...

  7. 在JAVA中用两个栈实现队列的功能

    此问题的实现可以加深对栈和队列的理解,让我们先来认识一下栈和队列 1.Stack栈 栈(Stack)是一种后进先出(LIFO)的数据结构 Stack只有入栈和出栈的操作,常用方法有: (1)把元素压栈 ...

  8. java停车场管理系统

    停车场管理系统 •问题描述 –设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出.在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端).若停车场内已停满n辆车,则后来的 ...

  9. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

最新文章

  1. 时间计时android程序,Android 时间计时器控件 Chronometer
  2. factory i/o下载_推荐 Dynalist.io 大纲笔记整理工具
  3. EMIF的两个接口EMIFA和EMIFB分析与比较
  4. mvc怎么套用html模板,ASP.NET MVC3模板页的使用(2)
  5. ISA server的常见身份验证方式
  6. Java回调机制解读
  7. 7-176 求n以内最大的k个素数以及它们的和 (20 分)
  8. php闪屏程序,节日闪屏的两种构成方式
  9. 控制反转_.NET Core ASP.NET Core Basic 12 控制反转与依赖注入
  10. window7安装虚拟机上网
  11. win8普通版连接远程桌面---RDPWrap
  12. 浏览器模式电子海图快速显示的研究
  13. 计算机文件夹加密文件,如何加密计算机文件夹4种加密文件夹的方法
  14. 关于适配,我想说。。。
  15. Pygame:外星人入侵
  16. STM32单片机的学习方法(方法大体适用所有开发版入门)
  17. 寒假集训难题(四)QWQ和神奇的传送器nefu1608
  18. opencv 视频中画矩形
  19. 关于WPS Office安全漏洞情况的通报
  20. 高等学校计算机水平考试一级,全国高等学校计算机水平考试一级office考试要点汇总大全...

热门文章

  1. [洪流学堂]Hololens修改图标icon
  2. 清空linux+history_1分钟学会的Linux小技巧,大大提高你的工作效率
  3. 如何判断微信定位服务器,如何快速找到自己的微信定位,完成实操作业?分享一下我的思路...
  4. java 网络字节序转主机字节序_Linux下查看网络连接
  5. DotNetCore中异步编程的实用演练
  6. 几点减几点怎么列算式_节日礼品怎么挑选 这几点很关键
  7. wap_list.php,织梦DEDECMS生成静态手机页面
  8. 白中英 计算机组成原理_白中英《计算机组成原理》(第5版)笔记和课后习题答案详解...
  9. php设计验证码图片,php实现简单的图片验证码
  10. 当前没有可用的服务器_调研Redis高可用两种方案