中法计122班--实验二.doc

中法计122班--实验二剖析

数据结构实验二 停车场管理 【实验内容】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现。队列以链表结构实现。 【实验目的】 深入了解栈和队列的特性,掌握栈和队列的存储方法。 掌握栈和队列的基本操作,如初始化、入栈(队列)、出栈(队列)等,并能在实际问题背景下灵活运用。 【程序清单】 #includestdio.h #includestdlib.h #includemalloc.h #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status; int si; //栈,模拟停车场 typedef struct Car1{//车 int number;//汽车车号 int ar_time;//汽车到达时间 }CarNode; typedef struct{//停车场 CarNode *base;//停车场的堆栈底 CarNode *top;//停车场的堆栈顶 int stacksize; }Park; //队列,模拟便道 typedef struct Car2{//车 int number;//汽车车号 int ar_time;//汽车到达时间 struct Car2 *next; }*CarPtr; typedef struct{//便道 CarPtr front;//便道的队列的对头 CarPtr rear;//便道的队列的队尾 int length; }Shortcut; Status InitStack(Park P){//初始化停车场 P.base=(CarNode*)malloc(si*sizeof(Car1)); if(!P.base) exit(OVERFLOW); P.top=P.base; P.stacksize=0; return OK; } Status Push(Park P,CarNode e){//车进入停车场 *P.top++=e; ++P.stacksize; return OK; } Status Pop(Park P,CarNode e){//车离开停车场 if(P.top==P.base) printf(停车场为空。); else { e=*--P.top; --P.stacksize; } return OK; } Status InitQueue(Shortcut S){//初始化便道 S.front=S.rear=(CarPtr)malloc(sizeof(Car2)); if(!S.front||!S.rear) exit(OVERFLOW); S.front-next=NULL; S.length=0; return OK; } Status EnQueue(Shortcut S,int number,int ar_time){//车进入便道 CarPtr p; p=(CarPtr)malloc(sizeof(Car2)); if(!p) exit(OVERFLOW); p-number=number; p-ar_time=ar_time; p-next=NULL; S.rear-next=p; S.rear=p; ++S.length; return OK; } Status DeQueue(Shortcut S,CarPtr w){ //车离开便道 if(S.length == 0) printf(通道为空。); else { w = S.front-next; S.

文档评论(0)

1亿VIP精品文档

相关文档