数据结构课程设计:停车场 |
您所在的位置:网站首页 › 停车场标识p是什么意思 › 数据结构课程设计:停车场 |
1要求:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车时间的早晚依次从停车场最里面向大门口停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车开走,则排在便道上的第一辆车就进入停车场。停车场内如有某辆车要开走,在它之后近来的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编制一程序模拟停车场管理。 实现提示:汽车的模拟输入信息格式可以是:(到达/离去,汽车牌照号码,到达/离去的时刻)。 例如:('A',1,5)表示一号牌照车爱5这个时刻到达,而('D',5,20)表示5号牌照车在20这个时刻离去,整个程序可以在输入信息为('E',0,0)时结束。 基本要求:要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应交纳的费用和它在停车场内停留的时间。 2.代码
#include #include #include #define MAX 2//车库容量 为了便于观察这里把车库容量设置为2 #define price 0.05 //每分钟每辆车的费用 typedef struct time{ int hour; int min; }Time;//时间结点
typedef struct node{ char num[10]; Time reach; Time leave; }CarNode;//车辆信息结点
typedef struct NODE{ CarNode *stack[MAX+1]; int top; }SeqStackCar;//模拟车站
typedef struct car{ CarNode *data; struct car *next; }QueueNode;
typedef struct Node{ QueueNode *front; QueueNode *rear; }LinkQueueCar;//模拟通道
///*定义方法*/ void InitStack(SeqStackCar*);//初始化车站 int InitQueue(LinkQueueCar*);//初始化便道 int Arrival(SeqStackCar*,LinkQueueCar*);//车辆到达 void Leave(SeqStackCar*,SeqStackCar*,LinkQueueCar*);//车辆离开 void List(SeqStackCar,LinkQueueCar);//显示存车信息 /*主函数*/ void main() { SeqStackCar Enter,Temp; LinkQueueCar Wait; int ch; InitStack(&Enter);//构造一个空栈 InitStack(&Temp);// InitQueue(&Wait);//构造一个空队列 while(1) { printf("/n1.车辆到达 "); printf("/n2.车辆离开"); printf("/n3.列表显示"); printf("/n4.退出系统/n"); while(1) { printf("/n请选择:1 2 3 4");
scanf("%d",&ch); if(ch4)//当不符合要求时重新进行选择 { break; } else {//否则则进行方法的操作
switch(ch) { case 1: Arrival(&Enter,&Wait); break;//车辆到达的操作 case 2: Leave(&Enter,&Temp,&Wait); break;//车辆离开的操作 case 3: List(Enter,Wait); break;//列表显示的操作 case 4: exit(0);//退出系统的操作 default: break; } } } } } ///*车场的初始化 栈*/ void InitStack(SeqStackCar *s)// { int i; s->top=0;//栈为空 for(i=0;istack[s->top]=NULL;//初值为空 } ///*便道的初始化 队列的链式结构*/ int InitQueue(LinkQueueCar *Q) { Q->front=(QueueNode*)malloc(sizeof(QueueNode)); if(Q->front!=NULL) { Q->front->next=NULL;//队列头结点为空 Q->rear=Q->front; return (1); }else{ return (0); } } ///*离站所进行的操作*/ void PRINT(CarNode *p,int room){ int A1,A2,B1,B2; printf("/n请输入离开的时间:"); scanf("%d:%d",&(p->leave.hour),&(p->leave.min)); printf("/n离开车辆的车牌号为:"); puts(p->num); printf("/n其到达时间为:%d:%d",p->reach.hour,p->reach.min); printf("离开时间为:%d:%d",p->leave.hour,p->leave.min); A1=p->reach.hour; A2=p->reach.min; B1=p->leave.hour; B2=p->leave.min; printf("/n应缴费用为:%2.1f元",((B1-A1)*60+(B2-A2))*price); free(p); } //*车辆到达*/ int Arrival(SeqStackCar *Enter,LinkQueueCar *W) { CarNode *p; QueueNode *t; p=(CarNode *)malloc(sizeof(CarNode));//生成结点 flushall();//清除所有缓冲区 printf("/n请输入车牌号:"); gets(p->num);//得到车牌号 if(Enter->toptop++;//top指针加一 printf("/n车辆在停车场内的第%d位置",Enter->top); printf("/n请输入到达时间:"); scanf("%d:%d",&(p->reach.hour),&(p->reach.min)); Enter->stack[Enter->top]=p;//车辆进栈 return (1); }else{ printf("/n该车须在便道等候!"); t=(QueueNode*)malloc(sizeof(QueueNode)); t->data=p;//把车辆信息存入队列的结点 即车辆停在便道 t->next=NULL;//t结点的下一个结点为空 W->front->next=t;//头指针的下一个为t W->rear=t;//尾指针指向t return (1); } } //*出栈*/ void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) { int i,room; CarNode *p,*t; QueueNode *q; /*判断车场内是否有车*/ if(Enter->top>0) { while(1) { printf("/n请输入车在车场的位置:",Enter->top); scanf("%d",&room); if(room=Enter->top) { break; } while(Enter->top>room) { Temp->top++;//top指针加一 Temp->stack[Temp->top]=Enter->stack[Enter->top];//把停车场里的车放 入temp中 Enter->stack[Enter->top]=NULL;//把停车场里的位置清空 Enter->top--;//top指针减一同时 } p=Enter->stack[Enter->top]; Enter->stack[Enter->top]=NULL; Enter->top--; while(Temp->top>=1) { Enter->top++;//当车出去后原来的车回到停车场 Enter->stack[Enter->top]=Temp->stack[Temp->top]; Temp->stack[Temp->top]=NULL; Temp->top--; } PRINT(p,room);//离开停车场的信息 if((W->front!=W->rear)&&Enter->top W->rear=W->front;//清空 Enter->stack[Enter->top]=t;//进入停车场 printf("/n便道里没车/n"); free(q); } break; } else { printf("/n车场里没车。"); } break; } } }
//*列表的显示信息*/ void List1(SeqStackCar *s) { int i; if(s->top>0) { printf("/n车场"); printf("/n位置 到达时间 车牌号/n"); for(i=1;itop;i++) { printf("%d%10d:%d ", i, s->stack[i]->reach.hour, s->stack[i]->reach.min); puts(s->stack[i]->num); } } else
printf("/n车场里没车"); } /*便道里的信息*/ void List2(LinkQueueCar *w) { QueueNode *p; p=w->front->next; if(w->front!=w->rear) { printf("/n等待的车辆的号码为:"); while(p!=NULL) { puts(p->data->num); p=p->next; } } else printf("/n便道里没有车。"); }
// void List(SeqStackCar s,LinkQueueCar w) { int flag,m; flag=1; while(flag) { printf("/n请选择 1 2 3"); printf("/n1.车场 /n2.便道 /n3.返回"); while(1) { scanf("%d",&m); if(m>=1||m |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |