停车场问题 含 完整C程序代码 优选Word格式文档下载.docx
- 文档编号:21908529
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:8
- 大小:17.21KB
停车场问题 含 完整C程序代码 优选Word格式文档下载.docx
《停车场问题 含 完整C程序代码 优选Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《停车场问题 含 完整C程序代码 优选Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
staticintflag=0;
//全局变量,用来记录停车场车的数量
structparkcar//定义车辆的结构体
{
longnum;
inttime;
structparkcar*next;
}*head,*rear;
structparkcarpc[pmax];
//创建停车场的结构体数组
structparkcartc[pmax];
//创建用来缓存停车场出来的车辆的结构体数组
structparkcar*inqueue(longcarnum,intatime);
//声明入队列函数,让车辆进入候车区
voidarrive(void);
//声明到达函数
voidleave(void);
//声明离开函数
voiddisplay_P(void);
//声明显示停车场车辆信息的函数
voiddisplay_W(void);
//声明显示侯车区车辆信息的函数
intmain()
{
head=NULL;
//初始化队列头指针和尾指针
rear=NULL;
intstate=0;
printf("
\t======ParkcarMenu======\n"
);
//输出停车菜单
\tprice:
2\n"
\tinputstate\n"
//通过先输入状态(如A),后执行相应函数
\tAarrive\n"
\tDleave\n"
\tPdisplaypark_car\n"
\tWdisplaywait_car\n"
\tEquit\n"
do
{
printf("
input:
\n"
scanf("
%c"
&
state);
fflush(stdin);
switch(state)//通过先输入状态(如A),后执行相应函数
{
case'
A'
:
arrive();
break;
D'
if(pc[flag-1].num==NULL)//如果停车场为空则输出为空
printf("
Parkisempty!
else
leave();
P'
display_P();
W'
display_W();
E'
default:
printf("
errormessage,inputagain!
}
}while(state!
='
//当输入E则退出
return0;
}
voidarrive(void)
{longcarnum;
intatime;
pleaseinputcarnumberandarrivetime!
scanf("
%ld%d"
carnum,&
atime);
fflush(stdin);
if(flag!
=pmax)//如果停车场未满,则入停车场
pc[flag].num=carnum;
pc[flag].time=atime;
++flag;
}
else
inqueue(carnum,atime);
//否则进候车区
structparkcar*inqueue(longcarnum,intatime)//以尾插法建立候车区的队列链表
structparkcar*p;
p=(structparkcar*)malloc(sizeof(structparkcar));
p->
num=carnum;
time=atime;
if(head==NULL)head=p;
elserear->
next=p;
rear=p;
rear->
next=NULL;
returnhead;
voidleave(void)
longcarnum;
intltime,dtime;
//离开时间,停车时间
intsave=0;
inti=1,flag0;
flag0=flag;
//flag0用来存储刚调用离开函数时flag的值
pleaseinputcarnumberandleavetime!
ltime);
while(pc[flag-1].num!
=carnum)//从栈顶往下找要离开的那辆车
{
tc[save].num=pc[flag-1].num;
tc[save].time=pc[flag-1].time;
tc[save].next=pc[flag-1].next;
if(flag==1&
&
pc[0].num!
=carnum)//如果找到栈底都没有这辆车,则返回,并将存储着刚调用离开函数时flag的值,即flag0重新
{//赋值给flag,避免在没有车辆离开的情况下对全局变量flag进行修改而导致错误
printf("
Thiscarisnotfounded!
flag=flag0;
return;
flag--;
save++;
dtime=ltime-pc[flag-1].time;
//停车时间的计算
if(dtime<
0)//如果输入的离开时间小于到达时间则重新输入离开时间
Theleavetimeisillegal,pleaseinputtheleavetimeagain\n"
%d"
dtime=ltime-pc[flag-1].time;
\tparktime:
%d\n"
dtime);
\tcost:
%d\n"
dtime*price);
//输出停车时间和费用
while(save!
=0)//当车辆离开后,将缓存栈里的车回到停车场
if(i--)flag--;
//因为执行完上一个while循环后flag少执行了一次减一操作,通过控制i来让flag在这个循环里只减一次。
但flag--
save--;
//放在while(save!
=0)外面,这样对某些输入会有bug。
也就是只有当缓存栈里有车时才需要flag做一次减一操作
pc[flag].num=tc[save].num;
pc[flag].time=tc[save].time;
flag++;
if(head!
=NULL)//如果候车区不空,则将队首第一辆车进入停车场
p=head;
pc[flag].num=p->
num;
pc[flag].time=ltime;
pc[flag].next=p->
next;
flag++;
\t'
%ld'
carinpark,arrivetime:
p->
num,ltime);
//显示从候车区进停车场的车辆车牌号和进入时间
head=head->
next;
free(p);
voiddisplay_P(void)//从栈顶往栈底显示停车场的车辆信息
intflag1;
flag1=flag;
//用flag1记录此时的flag,避免对全局变量进行操作
\tpark_carnumarrive_time\n"
while((flag1)!
=0)
\t%ld%d\n"
pc[flag1-1].num,pc[flag1-1].time);
flag1--;
voiddisplay_W(void)//从队首往队尾显示候车区的车辆信息
structparkcar*w;
w=head;
\twait_carnumarrive_time\n"
while(w!
=NULL)
w->
num,w->
time);
w=w->
free(w);
/*
可参考的测试数据,含一定健壮性,复制粘贴可用
D
A
1015
10210
P
10315
10115
10320
10425
10530
W
10235
10420
40
E
*/
最新文件----------------仅供参考--------------------已改成-----------word文本---------------------方便更改
赠人玫瑰,手留余香。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 停车场问题 完整C程序代码 优选 停车场 问题 完整 程序代码