停车场问题含完整C程序代码.docx

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

停车场问题含完整C程序代码.docx

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

停车场问题含完整C程序代码.docx

停车场问题含完整C程序代码

最新文件仅供参考已改成word文本方

便更改

停车场问题完整c程序代码

1)内容:

设停车场是一个可停放n辆汽车的狭长通道,且只有一个人门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(人门在最南端,最先到达的在最北端),若停车场内已经停满n辆车,那么后来的车只能在场外等候,一旦有车开走,则等候在第一位的车即可开入(这是一个队列设长度为m);当停车场内某辆车需要开出,则在它之后的车辆必须给它让道,当这辆车驶出停车场后,其他车辆按序入栈。

每辆车按时间收费。

2)要求:

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。

每一组输入数据包括三个数据:

汽车的"到达"(A表示)或"离去"("表示)信息,汽车标识(牌照号)以及到达或离去的时刻。

对每一组输入数据进行

操作后的输出信息为:

若是车辆到达,则输出汽车在停车场内或者便道上的停车位置;若是车辆离去,则输出汽车在停车场停留的时间和应缴纳的费用(便道上不收费)。

栈以顺序结构实现,队列以链表结构实现。

#include

#include

#definepmax3

〃定义停车场的最大容车量为3

#defineprice2

〃停车单价为2

staticintflag=O;

〃全局变量,用来记录停车场车的数量

structparkcar

〃定义车辆的结构体

longnum;

inttime;

 

structparkcar*next;}*head,*rear;

structparkcarpc[pmax];

structparkcartc[pmax];

结构体数组

〃创建停车场的结构体数组

〃创建用来缓存停车场出来的车辆的

structparkcar*inqueue(longcarnumzintatime);

〃声明入队列函数,让车辆进入

候车区

voidarrive(void);

voidleave(void);

voiddisplay_P(void);

voiddisplay_W(void);

函数

intmain()

{

head=NULL;

针和尾指针

rear=NULL;

intstate=O;

======ParkcarMenu======\nn);

〃声明到达函数

〃声明离开函数

/廣明显示停车场车辆信息的函

〃声明显示侯车区车辆信息的

〃初始化队列头指

printfCV

/瀚出停车菜单

 

 

printf(H\t

price:

2\n");

printf("\tinput

state\nH);

A),后执行相应函数

printf(H\tA

arrive\nJ;

printf(H\tD

leave\nJ;

printf(H\tP

displaypark_car\nJ;

printf(H\tW

displaywait_car\rf);

printf(H\tE

quit\n”);

do

〃通过先输入状态(如

 

 

〃通过先输入状

〃如果停车场为空则

printf(”input:

\n“);

scanf(,,%c,,/&state);

fflush(stdin);

switch(state)

态(如A),后执行相应函数

{

case'A'larriveOjbreak;

case,D':

if(pc[flag-l].num==NULL)

输出为空

printf("Parkisempty!

\n");

else

leave();break;

caseP:

display_P();break;

case'W':

clisplay_W();break;

case'E':

break;

default:

printf("eirormessage,!

nputagain!

\rf);

〃当输入E

}

}while(state!

=,E,);

则退出

return0;

}

voidarrive(void)

{longcarnum;

intatime;

printf(Mpleaseinputcarnumberandarrivetime!

\nn);

scanf("%ld%d,,/&carnum,&atime);fflush(stdin);

if(flag!

=pmax)〃如果停

车场未满,则入停车场

{

pc[flag].num=carnum;

pc[flag].time=atime;

++flag;

}

else

〃否则

inqueue(carnunxatime);

囲唉车区

structparkcar才inqueue(longcarnumjntatime)

立候车区的队列链表

structparkcar*p;

p=(structparkcar*)malloc(sizeof(structparkcar));

p->num=carnum;p->time=atime;

if(head==NULL)head=p;elserear->next=p;

rear=p;

rear->next=NULL;returnhead;

}

voidleave(void)

{

longcarnum;

intltime,dtime;

intsave=0;

inti=l,flagO;

〃以尾插法建

//flagO用来存储刚调用离开函数

时flag的值

structparkcar*p;

printf(npleaseinputcarnumberandleavetime!

\nJ;

scanf("%ld%d,,,&carnum,<ime);fflush(stdin);

while(pc[flag-l].num!

=carnum)〃从栈顶往下找要离开的那

辆车

{

tc[save].num=pc[flag-l].num;

tc[save].time=pc[flag-l].time;

tc[save].next=pc[flag-l].next;

if(flag==l&&pc[O].num!

=carnum)〃如果找到栈底都没

有这辆车,则返回,并将存储着刚调用离开函数时flag的值,即flagO重新

{〃赋值给flag,避

免在没有车辆离开的情况下对全局变量flag进行修改而导致错误

printf(nThiscarisnotfounded!

\nn);

flag=flagO;

return;

}

flag-;save++;

}

dtime=ltime-pc[flag-l].time;〃停车时间的计算

〃5口果输入的离开时间小于到达时间则重新输入离开时间

{

printf(nTheleavetimeisillegal,pleaseinputtheleavetimeagain\n”);scanf(,,%d,,,<ime);fflush(stdin);

dtime=ltime-pc[flag-l].time;

}

printf("\tparktime:

%d\rV:

dtime);

printf("\tcost:

%d\n"/dtime*price);〃输出停车时间和费用

while(save!

=O)〃当车辆离开后,

将缓存栈里的车回到停车场

{

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++;

printfC't'Wld'carinpark,arrivetime:

%d\n蔦p->numJtime);

进停车场的车辆车牌号和进入时间

head=head->next;

free(p);

}

}

voiddisplay_P(void)〃从栈

顶往栈底显示停车场的车辆信息

{

intflagl;

flagl=flag;〃用

flagl记录此时的flag,避免对全局变量进行操作

printfC'Xtpark^carnumairive_time\rf);fflush(stdin);

while((flagl)!

=O)

{

printf(H\t%ld%d\rCpc[flagl・l]・num,pc[flag:

lJ]・tirne);

flagl-;

}

〃从队首

voiddisplay_W(void)

往队尾显示候车区的车辆信息

{

structparkcar*w;

w=head;

printf(H\twait_carnumarrive_time\nH);

while(w!

=NULL)

{

printf(H\t%ld%d\n:

w・>num,w・>time);

w=w・>next;

}

free(w);

}

/*

可参考的测试数据,含一定團士性,复制粘贴可用

D

A

1015

A

10210

P

D

10315

D

10115

P

A

10320

A

10425

A

10530

P

W

D

10235

P

W

D

10420

柿品WORD•仅供参考

榕品Word•仅供参考

40

P

W

E

*/

word文本

最新文件仅供参考已改成

方便更改

赠人玫瑰,手留余香。

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

当前位置:首页 > 求职职场 > 简历

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

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