问题及代码

/*
*Copyright (c)2016 烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:6.cpp
*作    者:王修文
*完成日期:2016年10月13日
*版 本 号:v1.0
*问题描述:停车场是一个可停放n辆汽车的狭长死胡同,南边封口, 汽车只能从北边进出(这样的停车场世间少有)。汽车在 停车场内按车辆到达时间的先后顺序,最先到达的第一辆车 停放在车场的最南端,依次向北排开。若车场内已停满n辆汽车, 则后来的汽车只能在门外的候车场上等候,一旦有车开走,则排 在候车场上的第一辆车即可开入。当停车场内某辆车要离开时, 在它之后进入的车辆必须先退出车场为它让路(假定停车场内设 有供车辆进出的便道,所有的司机也必须在车内随时待命), 待该辆车开出大门外,其他车辆再按原次序进入车场。每辆停放在 车场的车在它离开停车场时,要按停留的时间长短交纳费用。试为 停车场编制按上述要求进行管理的模拟程序。
输入描述:根据菜单提示选择
程序输出:各指令结果
*/

代码

#include <stdio.h>
#include <malloc.h>
#define N 10                    /*停车场内最多的停车数*/
#define M 10                    /*候车场内最多的停车数*/
#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)
{  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函数用于模拟停车场的工作
int main()
{  int comm;  int no,e1,time,e2;  int i,j,t;  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  {  t = St->top - i;  //需要出栈的车辆数目  for (j=0; j<t; j++)  //for (j=i; j<=St->top; j++)1楼评论讲的原错误写法  {  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;
}

运行结果

知识点总结

利用所学知识解决实际问题

学习心得

依旧6

第7周项目6 -停车场模拟相关推荐

  1. 第七周实践项目6 停车场模拟(栈和队列综合)

    设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有).汽车在停车场内按车辆到达时间的先后顺序,最先到达的第一辆车停放在车场的最南端,依次向北排开.若车场内已停 ...

  2. 第七周项目5排队看病模拟

    /* Copyright (c)2015,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第七周项目5.cpp 作 者:彭子竹 完成日期:2015年10月30日 版 ...

  3. 小组项目第三周:后端数据——模拟炒股系统

    小组项目第三周:后端数据--模拟炒股系统   个人工作   本周实现了一个额外功能:模拟炒股系统.   每个论坛用户拥有一个模拟炒股用户,可以实现买入.卖出委托,由程序后台实时获取股票价格,判断委托是 ...

  4. 小组项目第四、五周:后端数据——模拟炒股系统(2)

    小组项目第四.五周:后端数据--模拟炒股系统(2)   个人工作   这两周将模拟炒股功能添加到Django框架中.   在stockforum项目内,添加名为mockexchange的应用,主页后/ ...

  5. erp沙盘模拟软件_VOL.977 工商第九周周报 ERP沙盘模拟大赛排名第一 跨学科校企合作商讨筹备...

    工商第九周周报 ERP沙盘模拟大赛排名第一 跨学科校企合作商讨筹备 第九周要闻 周四 10月29日 四川大学工商管理学院党委副书记.博士生导师张黎明教授来到锦城 给2020级本科旅游管理专业.市场营销 ...

  6. 第七周项目三-用多文件组织多个类的程序

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月13日*版 本 号:v1. ...

  7. ZLYD团队第一周项目总结

    ZLYD团队第一周项目总结 团队项目 项目内容:我们打算利用Applet实现一个吃豆子游戏,团队初步设定游戏规则如下: 按空格键,游戏开始: 通过方向键控制吃豆者的运动方向,直到吃光所有金豆子: 吃到 ...

  8. 第五周 项目二 建立链栈算法库

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第5周项目2--建立链栈算法库.cpp 作 者:孙仁圆 完成日期:2017年 ...

  9. 第七周 项目四-队列数组

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第7周项目项目4 - 队列数组.cpp 作 者:孙仁圆 完成日期:2017年 ...

最新文章

  1. qt ui界面无法移动控件_使用qt 键盘上的方向键只能控制ui界面上的按钮选择,不能实现我设定的功能...
  2. 关于51CTO博客大赛的感想
  3. [导入]毕业的大学生的100条忠告
  4. oracle强制走索引_实验验证:Oracle聚簇因子对索引使用的影响
  5. JSP HTTP 状态码
  6. 陈新宇:CKafka在人脸识别PAAS中的应用
  7. 串灯控制盒去掉怎么接_暖通小兵设计系列16-集线盒(中央控制器)简介(余小其转载版本)...
  8. 微信小程序后台服务器搭建
  9. 【JavaWeb】最详细的小白笔记!!!
  10. Css3之画五角星跟六角星
  11. 巴比特 | 元宇宙每日必读:工业元宇宙究竟是什么,为何它值得被追捧?
  12. java标识命名服务_阿里巴巴Java开发规约第一章编程规约-命名风格篇
  13. chrome无法检查更新解决方法
  14. 后台如何暴漏IP用于前后端测试
  15. 告别传统IT 信天通信助推教育行业云化变革
  16. 蓝桥杯 灭鼠先锋 博弈
  17. 《C Primer Plus》—第九章:函数(指针间接,函数及其定义方式,ANSI C原型,递归,函数调用的底层原理)
  18. 解决 Error creating bean with name ‘dataSource‘ defined in class path resource 问题
  19. windows蓝屏代码含意全集
  20. 编程中的逻辑实现,三种逻辑结构(顺序、循环、分支)、跳转、函数以及错误处理

热门文章

  1. powershell 批量解压带密码的ZIP文件
  2. IDC:2020年中国云计算市场十大预测
  3. “小程序+直播”怎样搅动音视频技术生态?
  4. python如何暂停计时器_python怎么设置计时器
  5. DGL RDKit | 基于GCN的多任务分类模型
  6. 2016,回忆与展望
  7. mindmanager取消首字母自动大写的详细步骤
  8. 郑州大学远程教育计算机专业英语,郑州大学远程教育专业英语1考试.doc
  9. 解决python3 UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\U0001f608‘ in position。。。
  10. ardupilot-3.6.10——航点导航WPNav之样条曲线(Spline Navigation)