收藏 分享(赏)

栈和队列及其应用_停车场管理.doc

上传人:精品资料 文档编号:10394906 上传时间:2019-11-06 格式:DOC 页数:8 大小:54KB
下载 相关 举报
栈和队列及其应用_停车场管理.doc_第1页
第1页 / 共8页
栈和队列及其应用_停车场管理.doc_第2页
第2页 / 共8页
栈和队列及其应用_停车场管理.doc_第3页
第3页 / 共8页
栈和队列及其应用_停车场管理.doc_第4页
第4页 / 共8页
栈和队列及其应用_停车场管理.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、实验 2 栈和队列及其应用-停车场管理一 需求分析设停车场是一个可停放 n 辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按到达时间的先后顺序,一次由北朝向南排列(大门在最南边最先到达的第一辆汽车停放在车场最北端) ,若停车场已满,则以后来的汽车只能停在便道上,一旦有车辆开走,则便道上的第一辆车便可开进车场;当车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为其让路,待该车辆开出大门后,其他车辆在按原来顺序 开进车场,每辆停放在车场内的车辆按其待得时间长短缴纳费用(便道上不收费) 。以栈模拟停车场,以队列模拟便道,按照从终端读入的数据进行模拟管理。每一组数据包括三个数据项:

2、汽车“到达”或“离开”的信息,汽车牌照号以及到达或离开的时间。对每一组输入数据进行操作后的输出信息为:若是车辆到达则输出汽车在停车场或在便道上的位置,若是车辆离开则输出汽车在停车场内停留的时间和需要缴纳的费用(便道不收费) 。栈以顺序结构实现,队列以链表结构实现。二 概要设计1. 设定栈的抽象数据类型定义:ADT Stack 数据对象:D=ai|aiElemSet,i=1,2,n,n=0数据关系:R=|ai-1,ai D,约定 an 为栈顶元素基本操作:InitStack (int car_ID;int time;car_info;/-栈-/Status 表示函数的返回状态typedef in

3、t Status;typedef car_info SElemType;#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STACKINCREMENT 10 /存储空间分配增量typedef structSElemType *base;SElemType *top;int stacksize;SqStack;Status InitStack(SqStack if(!S.base)exit(Overflow); /存储分配失败S.top=S.base;S.stacksize=STACK_INIT_SIZE;return ok;/InitStackStat

4、us StackFull(SqStack S)/栈满则返回 TRUE ,否则返回 FALSEif(S.top-S.base=S.stacksize) return True;else return False;/栈满吗Status StackEmpty(SqStack S)/栈空则返回 TRUE ,否则返回 FALSEif(S.top=S.base)return True;else return False;/栈空吗 Status Push(SqStack S.top+;return ok;/PushStatus Pop(SqStack S.top-;e=*S.top;return ok;/P

5、op/*-*-*-*-*-*队列*-*-*-*-*-*-*-/typedef car_info QElemType;typedef struct QNodeQElemType data;struct QNode *next;QNode,*QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;Status InitQueue(LinkQueue if(!Q.front) exit(Overflow);/存储分配失败Q.front-next=NULL;return ok;/InitQueueStatus EnQueue(Link

6、Queue p=(QueuePtr)malloc(sizeof(QNode);if(!p) exit(Overflow);/存储分配失败p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;return ok;/ EnQueueStatus DeQueue(LinkQueue /否则返回 Errorif(Q.front=Q.rear)return Error;QueuePtr p;p=Q.front-next;e=p-data;Q.front-next=p-next;if(p=Q.rear)Q.rear=Q.front;free(p);return ok;/D

7、eQueueStatus QueueEmpty(LinkQueue else return Error;/*-*-*-*-*-*-*-*-*费用定义函数*-*-*-*-*-*-*-*/int GetFee(car_info now,car_info before) int NowTime;int BeforeTime;int Fee;NowTime=now.time;BeforeTime=before.time;Fee=(NowTime-BeforeTime)*10;/每分钟 10 元return Fee;/-*-*-*-*-*-*-*-*-*-*-*-*-车辆到达函数-*-*-*-*-*-*

8、-*-*-*-*-/void ArriveF(SqStack a+;printf(“汽车在便道上第%d 个位置n“,a);/如果停车场栈满 ,则入队else Push(parking,t);p+;printf(“在停车场第%d 个位置。n“,p); /不满进停车场栈,并输出位置/-*-*-*-*-*-*-*-*-*-*-*-*-*-*-车辆离开函数-*-*-*-*-*-*-*-*-*-*-*-/void DepartF(SqStack int temp;int Fee;if(t.time=0)/证明在便道上 e=t;DeQueue(road,e);a-;printf(“车辆%d 开出便道。n“

9、,e.car_ID);else/在停车场 temp=(*-parking.top).car_ID;/停车场的最后一位置车牌号赋予 temp+parking.top;while(temp!=t.car_IDPush(S,e);/从停车场栈出来进入暂存栈temp=(*-parking.top).car_ID;/现有车辆的最后一辆+parking.top;p-;/出去一辆车就 p-,表示现有最后一辆车的位置if(StackEmpty(parking)printf(“输入有误!请检查输入数据!n“);else Pop(parking,e);/从停车场出来,但并不进暂存栈,而应计费Fee=GetFee(

10、t,e);printf(“该车应缴费用为%dn“,Fee);/计费完毕p-;/从暂存栈进入停车场栈,并且在便道上的第一辆车开始进入 停车场栈while(!StackEmpty(S)/只要暂存栈不空 Pop(S,e);Push(parking,e);/从暂存栈进入停车场栈p+;/在便道上的第一辆车开始进入停车场站栈,并且应输入进停车场栈时间和在停车场站的位置if(!QueueEmpty(road)DeQueue(road,e);temp=e.car_ID;printf(“车辆%d 出便道进停车场,请输入进停车场时间n“,temp);scanf(“%d“,Push(parking,e);p+;el

11、se printf(“便道现已没车辆!n“);/-*-*-*-*-*-*-*-主函数*-*-*-*-*-*-/void main()SqStack parking;SqStack S;LinkQueue road;InitStack(parking);InitStack(S);InitQueue(road);int i=0;int a=0;/显示在便道上的位置int p=0;/显示在停车场上的位置car_info car100;/用以存放每辆车的数据printf(“举例说明本程序用法:n 如果输入 A 1 12,表示牌照号为 1 的车辆到达时间为12!n“);printf(“如果输入为 D 1

12、 12,表示牌照号为 1 的车辆离开停车场,离开时间为 12!n“);printf(“如果下班请输入 E 0 0n“);while(1) i+;printf(“请输入车辆进出情况:n“);scanf(“%c %d %d“,char c;c=cari.AD;if(c=A)/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*若车辆到达-*-*-*ArriveF(parking,road,cari,p,a);c=getchar();else if(c=D)/-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-若车辆离开-*-*

13、-*-*-*-*-*DepartF(parking,road,S,cari,p,a);c=getchar();else if(c=E) printf(“下班时间,回家吃饭!n“);break;else printf(“输入有误!请重新输入!n“);c=getchar();四 调试分析处于调试需要,本程序设置的停车场容量为 4。当输入的进场车辆数量小于等于 4 时,计算机会依次显示车辆在的位置,当大于 4 时,会依次显示在便道上的位置。当输入出场车辆信息时,会显示停留时间以及费用并会显示从便道进车场的车辆信息。当用户输入的车牌号不在车场时系统会提示你输入错误,请重新输入。注意:本程序的计费单位为 10 元/分钟。车辆从便道进入车场会要求重新输入时间,因为在便道上不收费!具体操作请看下图!

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报