第七周 停车场模拟

烟台大学计算机与控制工程学院 
作者: 郝环宇
日期:10.13
问题描述:设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有)。 
           汽车在停车场内按车辆到达时间的先后顺序,最先到达的第一辆车停放在车场的最南端,依次向北排开。 
           若车场内已停满n辆汽车,则后来的汽车只能在门外的候车场上等候,一旦有车开走,则排在候车场上的第一辆车即可开入。 
           当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路(假定停车场内设有供车辆进出的便道, 
           所有的司机也必须在车内随时待命),待该辆车开出大门外,其他车辆再按原次序进入车场。 

           每辆停放在车场的车在它离开停车场时,要按停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。

头文件:

#include <stdio.h>
#include "malloc.h"
#define N 3                 /*停车场内最多的停车数*/  
#define M 4                 /*候车场内最多的停车数*/  
#define Price 2             /*每单位时间停车费用*/  typedef struct
{  int CarNo[N];           /*车牌号*/  int CarTime[N];         /*进场时间*/  int top;                /*栈指针*/  
} SqStack;                  /*定义顺序栈类型,用于描述停车场*/  typedef struct  
{  int CarNo[M];           /*车牌号*/  int front,rear;         /*队首和队尾指针*/  
} SqQueue;                  /*定义循环队类型,用于描述候车场*/  /*以下为顺序栈的基本运算算法*/  
void InitStack(SqStack *&s)  ;
int StackEmpty(SqStack *s);
int StackFull(SqStack *s)  ;
int Push(SqStack *&s,int e1,int e2);
int Pop(SqStack *&s,int &e1,int &e2);
void DispStack(SqStack *s) ;
/*以下为循环队列的基本运算算法*/  
void InitQueue(SqQueue *&q)  ;
int QueueEmpty(SqQueue *q) ;
int QueueFull(SqQueue *q)  ;     /*判断队满*/ 
int enQueue(SqQueue *&q,int e);
int deQueue(SqQueue *&q,int &e);
void DispQueue(SqQueue *q);
源文件:

#include "head.h"
/*以下为顺序栈的基本运算算法*/  
void InitStack(SqStack *&s)  
{  s=(SqStack *)malloc(sizeof(SqStack));  s->top=-1;  
}  
int StackEmpty(SqStack *s)  
{  return(s->top==-1);  
}  
int StackFull(SqStack *s)  
{  return(s->top==N-1);  
}  
int Push(SqStack *&s,int e1,int e2)  
{  if (s->top==N-1)  return 0;  s->top++;  s->CarNo[s->top]=e1;  s->CarTime[s->top]=e2;  return 1;  
}  
int Pop(SqStack *&s,int &e1,int &e2)  
{  if (s->top==-1)  return 0;  e1=s->CarNo[s->top];  e2=s->CarTime[s->top];  s->top--;  return 1;  
}  
void DispStack(SqStack *s)  
{  int i;  for (i=s->top; i>=0; i--)  printf("%d ",s->CarNo[i]);  printf("\n");  
}  /*以下为循环队列的基本运算算法*/  
void InitQueue(SqQueue *&q)  
{  q=(SqQueue *)malloc (sizeof(SqQueue));  q->front=q->rear=0;  
}  
int QueueEmpty(SqQueue *q)  
{  return(q->front==q->rear);  
}  
int QueueFull(SqQueue *q)       /*判断队满*/  
{  return ((q->rear+1)%M==q->front);  
}  
int enQueue(SqQueue *&q,int e)      /*进队*/  
{  if ((q->rear+1)%M==q->front)    /*队满*/  return 0;  q->rear=(q->rear+1)%M;  q->CarNo[q->rear]=e;  return 1;  
}  
int deQueue(SqQueue *&q,int &e)     /*出队*/  
{  if (q->front==q->rear)          /*队空的情况*/  return 0;  q->front=(q->front+1)%M;  e=q->CarNo[q->front];  return 1;  
}  
void DispQueue(SqQueue *q)      /*输出队中元素*/  
{  int i;  i=(q->front+1)%M;  printf("%d ",q->CarNo[i]);  while ((q->rear-i+M)%M>0)  {  i=(i+1)%M;  printf("%d ",q->CarNo[i]);  }  printf("\n");  
}  
main函数:

#include "head.h"int main()  
{  int comm;  int no,e1,time,e2;  int i,j;  SqStack *St,*St1;  //St是停车场,St1是在有车离开时,记录为该车移开位置的车辆  SqQueue *Qu;   //Qu是候车场  InitStack(St);  InitStack(St1);  InitQueue(Qu);  do  {  printf("输入指令(1:到达 2:离开 3:显示停车场 4:显示候车场 0:退出):");  scanf("%d",&comm);  switch(comm)  {  case 1:     /*汽车到达*/  printf("输入车号和时间(设车号和时间均为整数): ");  scanf("%d%d",&no,&time);  if (!StackFull(St))         /*停车场不满*/  {  Push(St,no,time);  printf("  >>停车场位置:%d\n",St->top+1);  }  else                        /*停车场满*/  {  if (!QueueFull(Qu))     /*候车场不满*/  {  enQueue(Qu,no);  printf("  >>候车场位置:%d\n",Qu->rear);  }  else  printf("  >>候车场已满,不能停车\n");  }  break;  case 2:     /*汽车离开*/  printf("输入车号和时间(设车号和时间均为整数): ");  scanf("%d%d",&no,&time);  for (i=0; i<=St->top && St->CarNo[i]!=no; i++);  //在栈中找  if (i>St->top)  printf("  >>未找到该编号的汽车\n");  else  {  for (j=i; j<=St->top; j++)  {  Pop(St,e1,e2);  Push(St1,e1,e2);        /*倒车到临时栈St1中*/  }  Pop(St,e1,e2);              /*该汽车离开*/  printf("  >>%d汽车停车费用:%d\n",no,(time-e2)*Price);  while (!StackEmpty(St1))    /*将临时栈St1重新回到St中*/  {  Pop(St1,e1,e2);  Push(St,e1,e2);  }  if (!QueueEmpty(Qu))        /*队不空时,将队头进栈St*/  {  deQueue(Qu,e1);  Push(St,e1,time);       /*以当前时间开始计费*/  }  }  break;  case 3:     /*显示停车场情况*/  if (!StackEmpty(St))  {  printf("  >>停车场中的车辆:"); /*输出停车场中的车辆*/  DispStack(St);  }  else  printf("  >>停车场中无车辆\n");  break;  case 4:     /*显示候车场情况*/  if (!QueueEmpty(Qu))  {  printf("  >>候车场中的车辆:"); /*输出候车场中的车辆*/  DispQueue(Qu);  }  else  printf("  >>候车场中无车辆\n");  break;  case 0:     /*结束*/  if (!StackEmpty(St))  {  printf("  >>停车场中的车辆:"); /*输出停车场中的车辆*/  DispStack(St);  }  if (!QueueEmpty(Qu))  {  printf("  >>候车场中的车辆:"); /*输出候车场中的车辆*/  DispQueue(Qu);  }  break;  default:    /*其他情况*/  printf("  >>输入的命令错误\n");  break;  }  }  while(comm!=0);  return 0;  
}  
运行结果:





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

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

相关文章

实战项目密室逃脱

密室逃脱 对摄像机的智能控制&#xff08;很有用&#xff09;&#xff0c;当遇到墙壁时可以自动抬高。 把环境设为静态的&#xff0c;调小slope&#xff0c;调小半径&#xff0c;bake。 创建AI机器人&#xff0c;给上如图组件&#xff0c;大的球碰撞器用来检测是否遇到玩家…

【Java】789. 逃脱阻碍者---简化主题大意,主要求x+y和到达目标点的最短距离,快速解决问题!!!

你在进行一个简化版的吃豆人游戏。你从 [0, 0] 点开始出发&#xff0c;你的目的地是 target [xtarget, ytarget] 。地图上有一些阻碍者&#xff0c;以数组 ghosts 给出&#xff0c;第 i 个阻碍者从 ghosts[i] [xi, yi] 出发。所有输入均为 整数坐标 。 每一回合&#xff0c;…

【蓝桥模板】——迷宫逃脱夺命3问,你能坚持到哪1问?(BFS模板)

大家好&#xff0c;我是爱分享的小蓝&#xff0c;欢迎交流指正~ 全文目录&#x1f9ed; &#x1f381;说在前面 &#x1f3c6;模板-BFS迷宫⭐ &#x1f680;传送锚点​ &#x1f4a1;思路点拨 &#x1f35e;代码详解 &#x1f3c6;走迷宫Ⅰ⭐ &#x1f680;传送锚点 &…

MVSNet 和 PatchMatchNet 的DTU数据集 几个不同之处 一定要注意

文章目录 1 测试集 数据加载不同2 训练集 数量 分辨率不同 1 测试集 数据加载不同 1.MVSNet 的DTU测试数据集和PatchmatchNet测试数据集不一样&#xff1b; 区别在于数据加载&#xff0c;前者 cams文件最后是最小深度和间隔&#xff0c;后者是最小深度和最大深度。 2 训练集 …

最强嘴提o.o文字转语音

下载 链接&#xff1a;https://pan.baidu.com/s/1cb24WW2dihtRpMz4giMxyw 提取码&#xff1a;k3xu 解压密码&#xff1a;领航员未鸟 项目源码&#xff1a;https://github.com/Plachtaa/VITS-fast-fine-tuning/tree/main 使用 解压后来到&#xff0c;该目录下&#xff0c;把…

覆盖诊所全流程管理,适合中大型诊所门诊的门诊管理系统

诊所全流程管理查询 从线上与线下的角度入手&#xff0c;一套合格好用的诊所管理系统包括互联网医疗的线上咨询问诊、预约挂号&#xff0c;并且还有线下的患者登记、病历处方录入、药品进销存、财务报表等管理&#xff0c;将各位患者的信息数据在平台共享&#xff0c;方便医生…

医生病人管理系统MySQL设计_医院门诊管理系统的设计与实现(JSP,MySQL)(含录像)

医院门诊管理系统的设计与实现(JSP,MySQL)(含录像)(毕业论文6800字,程序代码,MySQL数据库) 随着信息化的飞速发展和普遍使用&#xff0c;计算机在各行各业得到越来越广泛的应用&#xff0c;医疗卫生领域作为实现信息化的重点&#xff0c;医院面临信息时代的挑战&#xff0c;医院…

门诊分诊管理系统分诊台程序

其详细功能如下&#xff1a;1. 设置挂号数量警报线系统可以为每个科室的每个医生&#xff08;特别是专家号&#xff09;&#xff0c;设定挂号数量警报线。当就诊病人数量超过限定的数量时&#xff0c;计算机系统会自动报警来通知管理人员、护士、医生&#xff0c;以便及时提示护…

网络工程毕业设计 SSM疫情期间医院门诊管理系统(源码+论文)

文章目录 1 项目简介2 实现效果2.1 界面展示 3 设计方案3.1 概述3.2 系统开发流程3.3 系统结构设计 4 项目获取 1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于SSM的…

ssm java mysql_医院门诊管理系统_

息化不断建设发展的今天&#xff0c;医院看病预约&#xff0c;医生的挂号等&#xff0c;已经十分方便&#xff0c;通过在线挂号&#xff0c;医生的查看&#xff0c;就能够了解到医院的门诊基本信息&#xff0c;并且可以在线进行门诊的医生查看&#xff0c;医院最新的资讯等&…

java校园医院门诊管理系统ssm

系统分为用户&#xff0c;医生和管理员三个角色 1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户…

计算机毕业设计 SSM+MySQL毕业设计 疫情期间医院门诊管理系统

摘 要 21世纪的到来&#xff0c;国家的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;智能科技时代崛起的优势&#xff0c;医院门诊管理系统当然也不能排除在外。疫情期间医院门诊管理系统是以实际运用为开发背景&#xff0c;运用软件工程开发方法&#xff0c;…

基于javaweb+jsp的医院门诊病例管理系统

基于javawebjsp的医院门诊病例管理系统 JavaWeb JavaBean JSP MVC MySQL Tomcat JavaScript Bootstrap 基础JSPServlet或JSPSSM(Spring、SpringMVC、MyBatis)框架或JSPSSMMaven(pom.xml)框架或SpringBoot…均可修改 开发工具&#xff1a;eclipse/idea/myeclipse/sts等均可配…

涛然自得周刊(第06期):韩版苏东坡的突围

作者&#xff1a;何一涛 日期&#xff1a;2023 年 8 月 27 日 涛然自得周刊主要精选作者阅读过的书影音内容&#xff0c;不定期发布。历史周刊内容可以看这里。 电影 兹山鱼谱 讲述丁若铨因政治事件被贬黜到了遥远的黑山岛。来到岛上后&#xff0c;丁被大自然环境疗愈&#…

Springboot+vue的医院门诊管理系统的设计与实现(也有SpringCloud版本)

基于Springboot的门诊管理系统的设计与实现 Springboot(springcloud)vue的门诊管理系统的设计与实现系统整体功能设计患者端医生模块实现管理员模块实现 Springboot(springcloud)vue的门诊管理系统的设计与实现 由需求分析阶段可以得出本门诊管理系统的各功能模块如图4.1所示。…

基于springboot的医院门诊管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 系统功能…

计算机毕业设计 SSM疫情下医院门诊就医管理系统(源码+论文)

文章目录 1 前言2 实现效果3 设计方案4 最后 1 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的java web缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自己做的java web管理系统达不…

C语言之函数题

目录 1.乘法口诀表 2.交换两个整数 3.函数判断闰年 4.函数判断素数 5.计算斐波那契数 6.递归实现n的k次方 7.计算一个数的每位之和&#xff08;递归&#xff09; 8.字符串逆序&#xff08;递归实现&#xff09; 9.strlen的模拟&#xff08;递归实现&#xff09; 10.求…

华为OD机试 - 求满足条件的最长子串的长度 - 双指针(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

软考:中级软件设计师:信息系统的安全属性,对称加密和非对称加密,信息摘要,数字签名技术,数字信封与PGP

软考&#xff1a;中级软件设计师:信息系统的安全属性 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准…