设停车场是一个可停放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)
{
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;
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;
}

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

  1. 第7周项目6 -停车场模拟

    问题及代码 /* *Copyright (c)2016 烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:6.cpp *作 者:王修文 *完成日期:2016年10月 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Bert时代的创新:Bert应用模式比较及其它 | 技术头条
  2. 移动app部分机型无法唤起h5支付宝支付_案例分析:H5支付交互体验设计
  3. 介绍十种数据恢复的软件工具
  4. 第十四次ScrumMeeting博客
  5. 这些你耳熟能详的“外国名牌”,其实都是中国的
  6. PHPStorm自动添加命名空间
  7. 高校教师抄袭豆瓣博主文章,学校证实:基本属实!记过并调离教学科研岗位...
  8. python找人_python之找最后一个人
  9. android mtk平台的fm停止搜索,【MTK平台,手机工程模式知识及方法详解】
  10. can接收id过滤linux,linux – 很大程度上被candump(SocketCAN)ID过滤功能搞糊涂了
  11. 几大主流的前端框架(UI/JS)框架
  12. DeepFace介绍
  13. java代码意思,[求助]java代码的意思?
  14. 小写转大写金额 php,php小写金额转大写
  15. 程序员面试需要带身份证和毕业证原件吗
  16. 常见光纤接头LC、FC、SC、ST
  17. 小米笔记本 air 12.5寸 支持硬盘参数
  18. 由《创业时代》想到的
  19. 手机html特效菊花的彩铅画,彩铅教程 | 菊花的画法步骤
  20. Sign in with Apple(苹果授权登陆) java jwt方式验证

热门文章

  1. USB打印服务器作用,沁恒股份USB打印机服务器方案概述
  2. 一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)
  3. Cloud 2.0时代,华为云EI助力内蒙煤焦化产业走向智能
  4. 关于EF Core中同一个实体被多次tracked的问题
  5. DVR NVR CVR有什么区别
  6. Android Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.
  7. nltk 句子结构分析
  8. 【读书笔记】期权交易策略(2)—— 差价策略
  9. 如何在毕业论文Word中插入图表目录
  10. Ubuntu 16.04 安装opencv3及其扩展模块