程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c語言 鏈表-我的代碼沒有辦法刪除節點,有大神可以給看一下嗎?

c語言 鏈表-我的代碼沒有辦法刪除節點,有大神可以給看一下嗎?

編輯:編程解疑
我的代碼沒有辦法刪除節點,有大神可以給看一下嗎?

/*停車場有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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved