停车场管理系统(数据结构。C语言版)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

//设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。//汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),//若车场内已停满n辆汽车,则后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;//当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车长为它让路,待该车开出大门外,//其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。//基本要求:以栈模拟停车场,以队列模拟车场外的便道//部分源代码(栈和队列的数据结构自己定义,在清华版的数据结构课本上有详细的描述)//停车场管理系统//停车场管理系统#includestdio.htypedefstructCar{//结构体:车辆Carintnumber;intinTime;intoutTime;}Car;typedefCarUser;//用户自定义类型#defineFEIYONG0.05//停车费用单价#defineMAXSIZE5//停车场容量//--------------系统库函数------------------#includestdlib.h//--------------通用变量、常量、类型声明------------------#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineOVERFLOW-2typedefintStatus;typedefUserSElemType;//---------------存储表示---------------------#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;//---------------函数原型---------------------//StatusInitStack(SqStack&S);//构造空栈//StatusDestroyStack(SqStack&S);//销毁栈S//StatusClearStack(SqStack&S);//置空//StatusStackEmpty(SqStackS);//判空;空:TRUE,不空:FALSE。//intStackLength(SqStackS);//返回S的元素的个数,即栈的长度。//StatusGetTop(SqStackS,SElemType&e);//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR。//StatusPush(SqStack&S,SElemTypee);//插入元素e为新的栈顶元素//StatusPop(SqStack&S,SElemType&e);//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR。//StatusStackTraverse(SqStackS,Status(*visit)());//从栈底到栈顶依次对栈中每个元素调用函数visit()。一旦visit()失败,则操作失败。//---------------基本操作---------------------StatusInitStack(SqStack&S){//构造空栈S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnOK;}//InitStackStatusDestroyStack(SqStack&S){//销毁栈Sfree(S.base);returnOK;}//DestroyStackStatusClearStack(SqStack&S){//置空returnOK;}//ClearStack//StatusClearStack(SqStack&S);//置空StatusStackEmpty(SqStackS){//判空;空:TRUE,不空:FALSE。if(S.top==S.base)returnTRUE;elsereturnFALSE;}//QueueEmptyintStackLength(SqStackS){//返回S的元素的个数,即栈的长度。returnS.top-S.base;}StatusGetTop(SqStackS,SElemType&e){//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR。if(S.top==S.base)returnERROR;e=*(S.top-1);returnOK;}//GetTopStatusPush(SqStack&S,SElemTypee){//插入元素e为新的栈顶元素if(S.top-S.base=S.stacksize){//栈满,追加存储空间S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW);//存储分配失败S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;returnOK;}//PushStatusPop(SqStack&S,SElemType&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR。if(S.top==S.base)returnERROR;e=*--S.top;returnOK;}//PopStatusStackTraverse(SqStackS){//,Status(*visit)()){//从栈底到栈顶依次对栈S中每个元素调用函数visit()。一旦visit()失败,则操作失败。for(SElemType*p=S.base;pS.top;p++)printf(%d\n,p-number);returnOK;}//StackTraversetypedefintStatus;typedefUserQElemType;//---------------存储表示---------------------typedefstructQNode{QElemTypedata;structQNode*next;}QNode,*QueuePtr;typedefstruct{QueuePtrfront;QueuePtrrear;}LinkQueue;//---------------函数原型---------------------//StatusInitQueue(LinkQueue&Q);//构造空队列Q//StatusDestroyQueue(LinkQueue&Q);//销毁队列Q//StatusClearQueue(LinkQueue&Q);//置空//StatusQueueEmpty(LinkQueueQ);//判空;空:TRUE,不空:FALSE。//intQueueLength(LinkQueueQ);//返回S的元素的个数,即队列的长度。//StatusGetHead(LinkQueueQ,QElemType&e);//若队列不空,则用e返回S的队头元素,并返回OK;否则返回ERROR。//StatusEnQueue(LinkQueue&Q,QElemTypee);//插入元素e为新的队尾元素//StatusDeQueue(LinkQueue&Q,QElemType&e);//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR。//StatusQueueTraverse(LinkQueueQ,Status(*visit)());//从队头到队尾依次对队列Q中每个元素调用函数visit()。一旦visit()失败,则操作失败。//---------------基本操作---------------------StatusInitQueue(LinkQueue&Q){//构造空队列QQ.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));if(!Q.front)exit(OVERFLOW);Q.front-next=NULL;returnOK;}//InitQueueStatusDestroyQueue(LinkQueue&Q){//销毁队列Qwhile(Q.front){Q.rear=Q.front-next;free(Q.front);Q.front=Q.rear;}returnOK;}//DestroyQueue//StatusClearQueue(LinkQueue&Q);//置空StatusQueueEmpty(LinkQueueQ){//判空;空:TRUE,不空:FALSE。if(Q.front==Q.rear)returnTRUE;elsereturnFALSE;}//QueueEmpty//intQueueLength(LinkQueueQ);//返回Q的元素的个数,即队列的长度。StatusGetHead(LinkQueueQ,QElemType&e){//若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR。if(Q.front==Q.rear)returnERROR;e=Q.front-next-data;returnOK;}//GetHeadStatusEnQueue(LinkQueue&Q,QElemTypee){//插入元素e为新的队尾元素QueuePtrp;p=(QueuePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);p-data=e;p-next=NULL;Q.rear-next=p;Q.rear=p;returnOK;}//EnQueueStatusDeQueue(LinkQueue&Q,QElemType&e){//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR。QueuePtrp;if(Q.front==Q.rear)returnERROR;p=Q.front-next;e=p-data;Q.front-next=p-next;if(Q.rear==p)Q.rear=Q.front;free(p);returnOK;}//DeQueueStatusQueueTraverse(LinkQueueQ){//,Status(*visit)()){//从队头到队尾依次对队列Q中每个元素调用函数visit()。一旦visit()失败,则操作失败。for(QueuePtrp=Q.front-next;p!=NULL;p=p-next)printf(%d\n,p-data.number);returnOK;}//QueueTraverse//函数声明部分voidWelcome();//主选项画面voidGoIn();//进场部分intGoOut();//出场部分voidLookChang();//查看停车场部分voidLookDao();//查看便道部分voidLookCopyRight();//查看版权信息//全局变量声明SqStackS1,S2;//S1为停车场,S2为暂存的地方LinkQueueQ;//Q为便道voidWelcome(){//主选项画面//clrscr();printf(****************欢迎使用停车场管理系统****************\n);printf(请选择以下功能:\n\n);printf(1.

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功