⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdj停车场管理5.txt

📁 同样是数据结构中停车场管理问题。比较常见的。这个还算不错
💻 TXT
字号:
#include<stdio.h> 
 #include<stdlib.h> 
 #include<string.h> 
 #define MAX 2 /*车库容量*/ 
 typedef struct node 
 {char num[10]; 
 }CarNode;/*车辆信息结点*/ 
 typedef struct NODE{ 
 CarNode *stack[MAX+1]; 
 int top; 
 }SeqStackCar; /*模拟车站*/ 
 typedef struct car{ 
 CarNode *data; 
 struct car *next; 
 }QueueNode; 
 typedef struct Node{ 
 QueueNode *head; 
 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); /*初始化通道*/ 
 printf("\n\n\n\n\n-----------按任意键继续---------------");  
 while(1) 
 { printf("\n1. 车辆到达"); 
 printf(" 2. 车辆离开"); 
 printf(" 3. 列表显示"); 
 printf(" 4. 退出系统\n"); 
 while(1) 
 {scanf("%d",&ch); 
 if(ch>=1&&ch<=4)break; 
 else printf("\n请选择: 1|2|3|4."); 
 } 
 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;i<=MAX;i++) 
 s->stack[s->top]=NULL;} 
 int InitQueue(LinkQueueCar *Q) /*初始化便道*/ 
 {Q->head=(QueueNode *)malloc(sizeof(QueueNode)); 
 if(Q->head!=NULL) 
 {Q->head->next=NULL; 
 Q->rear=Q->head; 
 return(1);} 
 else return(-1);} 
 void PRINT(CarNode *p) /*打印出站车的信息*/  
 { 
 printf("\n离开车辆的车牌号为:"); 
 puts(p->num); 
 } 
 int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/  
 { CarNode *p; 
 QueueNode *t; 
 p=(CarNode *)malloc(sizeof(CarNode)); 
 flushall(); 
 printf("\n请输入车牌号(例:鲁B1234):"); 
 gets(p->num); 
 if(Enter->top<MAX) /*车场未满,车进车场*/ 
 {Enter->top++; 
 printf("\n车辆在车场第%d位置.",Enter->top); 
 Enter->stack[Enter->top]=p; 
 return(1);} 
 else /*车场已满,车进便道*/ 
 { printf("\n该车须在便道等待!"); 
 t=(QueueNode *)malloc(sizeof(QueueNode)); 
 t->data=p; 
 t->next=NULL;  
 W->rear->next=t; 
 W->rear=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请输入车在车场的位置/1--%d/:",Enter->top); 
 scanf("%d",&room); 
 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]; 
 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); 
 /*判断通道上是否有车及车站是否已满*/ 
 if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/ 
 { q=W->head->next; 
 t=q->data; 
 Enter->top++; 
 printf("\n便道的%s号车进入车场第%d位置.",t->num,Enter->top); 
 W->head->next=q->next; 
 if(q==W->rear) W->rear=W->head; 
 Enter->stack[Enter->top]=t; 
 free(q);} 
 else printf("\n便道里没有车.\n");} 
 else printf("\n车场里没有车."); /*没车*/ } 
 void List1(SeqStackCar *S) /*列表显示车场信息*/ 
 {int i; 
 if(S->top>0) /*判断车站内是否有车*/ 
 {printf("\n车场:"); 
 printf("\n 位置 车牌号\n"); 
 for(i=1;i<=S->top;i++) 
 {printf(" %d ",i); 
 puts(S->stack[i]->num);}} 
 else printf("\n车场里没有车");} 
 void List2(LinkQueueCar *W) /*列表显示便道信息*/ 
 { QueueNode *p; 
 p=W->head->next; 
 if(W->head!=W->rear) /*判断通道上是否有车*/ 
 {printf("\n等待车辆的号码为:\n"); 
 while(p!=NULL) 
 {puts(p->data->num); 
 p=p->next;}} 
 else printf("\n便道里没有车."); } 
 void List(SeqStackCar S,LinkQueueCar W) 
 {int flag,tag; 
 flag=1; 
 while(flag) 
 {printf("\n请选择 1|2|3:"); 
 printf("\n1.车场\n2.便道\n3.返回\n"); 
 while(1) 
 { scanf("%d",&tag); 
 if(tag>=1||tag<=3) break; 
 else printf("\n请选择 1|2|3:"); 
 }switch(tag) 
 {case 1:List1(&S);break; /*列表显示车场信息*/ 
 case 2:List2(&W);break; /*列表显示便道信息*/ 
 case 3:flag=0;break; 
 default: break; }}} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -