1、说明:对时间复杂度的分析,均指在最坏情况下的时间复杂度。在栈结构中:(1) 初始化栈(即车库),使车库为空的,此时,时间复杂度=O(max)。(2) 停车最坏的情况是要车位已经满,此时,时时间复杂度=O(1)。(3) 关于车辆离开的时间复杂度=O(max)。(4) 车场信息的显示的时间复杂度=O(1)。在队列结构中:(1) 出场车的信息的时间复杂度O(1)。(2) 判断通道上是否有车及车站是否已满,此时,时间复杂度O=(max)。(3) 车辆停车费用的时间复杂度O=(1)。四.设计原理、框图 车进入车场不做任何计算无点x有输入离开车辆的离开时间,进行停车费用的计算此车后面的车辆退出并进入临时栈
2、车子离开五.运行结果车辆进入车场:车场已满:车辆离开,并收费:列出车场信息:列出车道信息:2.7程序#includestdlib.hstring.h/*-*/ #define MAX 3 /*车库容量*/ #define price 0.05 /*每车每分钟费用*/ typedef struct time int hour;int min;Time; /*时间结点*/ typedef struct node char num10;Time reach;Time leave;CarNode; /*车辆信息结点*/ /*模拟车场*/ typedef struct car CarNode *data
3、;struct car *next;QueueNode; /*模拟通道*/ void InitStack(SeqStackCar *); /*初始化栈*/ int InitQueue(LinkQueueCar *); /*初始化便道*/ int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/ void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void main() SeqS
4、tackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化车站*/ Temp); /*初始化让路的临时栈*/ InitQueue(&Wait); /*初始化通道*/ while(1) printf(n1.车辆到达); 2.车辆离开 3.列表显示 4.退出系统scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;itop=NULL;int InitQueue(LinkQueueCar *Q) /*初始化便道*/ Q-head=(QueueNode *)malloc(sizeof(QueueNode
5、);if(Q-head!=NULL) head-next=NULL;rear=Q-head;return(1);else return(-1);void PRINT(CarNode *p,int room) /*打印出场车的信息*/ int A1,A2,B1,B2;n请输入离开的时间:/*:*/%d:(p-leave.hour),&leave.min);n离开车辆的车牌号为:puts(p-num);n其到达时间为: %d:,p-reach.hour,p-reach.min);离开时间为:leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min
6、;B1=p-leave.hour;B2=p-leave.min;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();n请输入车牌号(例如:闽A1234):gets(p-if(Enter-toptop+;n车辆在车场第%d位置.,Enter-top);n请输入到达时间:reach.hour),&rea
7、ch.min);stackEnter-top=p;else /*车场已满,车进便道*/ n该车须在便道等待!t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;W-rear-next=t;rear=t;void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*车辆离开*/ int i, room;CarNode *p,*t;QueueNode *q;/*判断车场内是否有车*/ top0) /*有车*/ while(1) /*输入离开车辆的信息*/ n请输入车在车场的位置/1
8、-%d/:room);if(roomroomtop) break;while(Enter-room) /*车辆离开*/ Temp-stackTemp-top=Enter-top;top-;p=Enter-while(Temp-=1) top=Temp-PRINT(p,room);/*判断通道上是否有车及车站是否已满*/ if(W-=W-rear)&MAX) /*便道的车辆进入车场*/ q=W-next;t=q-data;n便道的%s号车进入车场第%d位置.,t-num,Enter-n请输入现在的时间/*:*/:(t-next=q-if(q=W-rear) W-rear=W-top=t;free
9、(q);n便道里没有车.nn车场里没有车. /*没车*/ void List1(SeqStackCar *S) /*列表显示车场信息*/ if(S-0) /*判断车站内是否有车*/ n车场:n 位置 到达时间 车牌号nfor(i=1;=S-top; %d ,i);%d ,S-stacki-reach.hour,S-puts(S-n车场里没有车void List2(LinkQueueCar *W) /*列表显示便道信息*/ QueueNode *p;p=W-if(W-rear) /*判断通道上是否有车*/ n等待车辆的号码为:while(p!data-p=p-n便道里没有车.void List(SeqStackCar S,LinkQueueCar W) int flag,tag;flag=1;while(flag) n请选择 1|2|3:n1.车场n2.便道n3.返回ntag);if(tag=1|tag=3) break;switch(tag) List1(&S); /*列表显示车场信息*/ List2(&W); /*列表显示便道息*/ flag=0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1