/*停車場有100個車位,
當未停滿100輛車時,允許車輛進入,車輛進入時記錄車牌號和進入時間;
停滿100輛車後,不允許車輛進入。
車輛開出時,顯示車輛車牌號和車輛進入的時間。
*/
#include
#include
#include
#include
typedef struct
{
char carnum[10];
char time[10];
}elemtype;
typedef struct node
{
elemtype data;
struct node *next;
}node,*linklist;
int init_link(linklist &la)//構造一個空的線性表
{
la=(node *)malloc(sizeof(node));
if(la==NULL) exit(-1);
la->next=NULL;
return 1;
}
int arrival(linklist &la,elemtype e)//車輛到達
{
linklist p,s;
p=la ;
while(p->next)
p=p->next ;
s=(linklist)malloc(sizeof(node));
if(!s) return 0;
s->data=e ;
s->next=p->next ;
p->next=s ;
return 1 ;
}
int leave(linklist &la,char *carnum1)//車輛離開
{
linklist p,q;
p=la;
while(p->next)
{
if(strcmp(p->next->data.carnum,carnum1)==0)
{
q=p->next ;
p->next=q->next ;
//printf("%s,%s\n",q->data.carnum,q->data.time);
free(q) ;
return 1;
}
p=p->next;
}
return 0;
}
void list(linklist &la)//車輛信息
{
linklist p;
p=la->next;
while(p)
{
printf("%s %s\n",p->data.carnum,p->data.time);
p=p->next;
}
}
int main()
{
linklist adr;
init_link(adr);
elemtype x;
int t=0;
char ch,carnum[10];
do
{
printf("1.車輛到達 \n");
printf("2.車輛離開 \n");
printf("3.車輛信息 \n");
printf("4.退出程序 \n");
printf("請選擇:\n");
scanf("%c",&ch);
switch(ch)
{
case '1'://車輛到達
if(t
{
printf("輸入車牌號和時間\n");
scanf("%s,%s",x.carnum,x.time);
if(arrival(adr,x)==1)
{
t=t+1;
printf("成功進入停車場\n");
}
else
printf("進入停車場失敗\n");
}
else
printf("停車場已滿\n");
break;
case '2'://車輛離開
if(t>0)
{
printf("輸入車牌號\n");
scanf("%s",carnum);
if(leave(adr,carnum))
{
printf("車輛成功開出\n");
t=t-1;
}
else
{
printf("車輛沒有成功開出,請重試!\n");
}
}
else
printf("停車場內沒有車\n");
break;
case '3'://車輛信息
list(adr);
printf("%d\n",t);
break;
case '4'://退出主程序
return 0;
default:printf("沒有該選項,請重新選擇!\n");
}
}while(1);
return 0;
}
把下面的代碼:
p=la;
while(p->next)
{
if(strcmp(p->next->data.carnum,carnum1)==0)
{
q=p->next ;
p->next=q->next ;
//printf("%s,%s\n",q->data.carnum,q->data.time);
free(q) ;
return 1;
}
p=p->next;
}
修改為:
p=la->next;
q=la;
while(p)
{
if(strcmp(p->data.carnum,carnum1)==0)
{
q->next=p->next ;
//printf("%s,%s\n",p->data.carnum,p->data.time);
free(p) ;
return 1;
}
q=p;
p=p->next;
}