停车场问题 含 完整C程序代码 优选Word格式文档下载.docx

上传人:b****7 文档编号:21908529 上传时间:2023-02-01 格式:DOCX 页数:8 大小:17.21KB
下载 相关 举报
停车场问题 含 完整C程序代码 优选Word格式文档下载.docx_第1页
第1页 / 共8页
停车场问题 含 完整C程序代码 优选Word格式文档下载.docx_第2页
第2页 / 共8页
停车场问题 含 完整C程序代码 优选Word格式文档下载.docx_第3页
第3页 / 共8页
停车场问题 含 完整C程序代码 优选Word格式文档下载.docx_第4页
第4页 / 共8页
停车场问题 含 完整C程序代码 优选Word格式文档下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

停车场问题 含 完整C程序代码 优选Word格式文档下载.docx

《停车场问题 含 完整C程序代码 优选Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《停车场问题 含 完整C程序代码 优选Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。

停车场问题 含 完整C程序代码 优选Word格式文档下载.docx

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文本---------------------方便更改

赠人玫瑰,手留余香。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1