Enter->top--; }
p=Enter->stack[Enter->top]; /*p是离开车辆的结点*/ 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);
/*LXY判断通道上是否有车及车站是否已满*/
if((W->head!=W->rear)&&Enter->top q=W->head->next; /*队列结点中头结点的指针结点*/ t=q->data;/*车辆队列中要出去的结点的数据*/ Enter->top++; printf(\现在请便道上的车进入车场,该车的车牌号为:\ puts(t->num); printf(\该车进入车场第%d位置.\ printf(\请输入现在的时间(即该车进站的时间)(小时:分钟):\ scanf(\ fflush(stdin); do{/*控制到达的时间*/ if(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60) { printf(\输入的时间格式有错,请重新输入!\ scanf(\ fflush(stdin); } // else // break; } 21 while(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60); W->head->next=q->next; if(q==W->rear) W->rear=W->head; Enter->stack[Enter->top]=t; free(q); } else printf(\目前便道里没有车.\\n\ } /*车场没车*/ else printf(\目前车场里没有车,来车请直接进入车场!\\n\ } void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W,int n) //车辆离开 { int i, room;//room为要输出的位置 CarNode *p,*t; //车辆本生的结点是p,车辆在队列中的结点是t QueueNode *q; //判断车场内是否有车,队列结点q if(Enter->top>0) //车场有车 { while(1) //输入离开车辆的信息 { printf(\请输入要离开的车在车场的位置/1--%d/:\ scanf(\ fflush(stdin); if(room>=1&&room<=Enter->top) break; } while(Enter->top>room) //车辆离开* { Temp->top++; Temp->stack[Temp->top]=Enter->stack[Enter->top];//把剩余的车辆退出车站并送入临时栈内 Enter->stack[Enter->top]=NULL;//栈顶为空 Enter->top--; } p=Enter->stack[Enter->top]; //p是离开车辆的结点 Enter->stack[Enter->top]=NULL; //栈顶为空 22 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); //LXY判断通道上是否有车及车站是否已满 if((W->head!=W->rear)&&Enter->top q=W->head->next; //队列结点中头结点的指针结点 t=q->data;//车辆队列中要出去的结点的数据 Enter->top++; printf(\现在请便道上的车进入车场,该车的车牌号为:\ puts(t->num); printf(\该车进入车场第%d位置.\ printf(\请输入现在的时间(即该车进站的时间)(小时:分钟):\ scanf(\ fflush(stdin); do{//控制到达的时间 if(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60) { printf(\输入的时间格式有错,请重新输入!\ scanf(\ fflush(stdin); } else break; } while(t->reach.hour<0 || t->reach.hour>=24 || t->reach.min<0 || t->reach.min>=60); W->head->next=q->next; if(q==W->rear) W->rear=W->head; 23 Enter->stack[Enter->top]=t; free(q); } else printf(\目前便道里没有车.\\n\ } //车场没车 else printf(\目前车场里没有车,来车请直接进入车场!\\n\ } void List1(SeqStackCar *S) //列表显示车场存车信息 { int i; if(S->top>0) //判断车站内是否有车 { printf(\车场:\ printf(\位置||到达时间||车牌号\\n\ for(i=1;i<=S->top;i++) { printf(\ %d \ printf(\ %d:%d \ puts(S->stack[i]->num); } } else printf(\目前车场里没有车\} void List2(LinkQueueCar *W)//LXY列表显示便道信息 { QueueNode *p; p=W->head->next; if(W->head!=W->rear) //判断通道上是否有车 { printf(\目前正在等待车辆的号码为:\\n\ while(p!=NULL) { puts(p->data->num); p=p->next; printf(\ } 24 } else printf(\目前便道里没有车.\} void List(SeqStackCar S,LinkQueueCar W) { int tag; /*tag为(1-3)的选择*/ int flag=1;/*flag判断返回主菜单*/ while(flag) { printf(\车场\\n2.便道\\n3.返回\\n\ while(1) { printf(\请选择 1|2|3:\ scanf(\ fflush(stdin); do{ if(tag<1||tag>3) { printf(\输入有误,请按要求重新输入:\ scanf(\ fflush(stdin); } else break; } while(tag>3 && tag<1);break;/*直到输出的tag是正确的值*/ } switch(tag) { case 1:List1(&S);break; /*列表显示车场信息*/ case 2:List2(&W);break; /*列表显示便道信息*/ case 3:flag=0;break;/*返回*/ default: break; } } } void main() { 25