1. 程式人生 > >帶頭節點單鏈表的刪除(元素) 操作(C語言完整版)

帶頭節點單鏈表的刪除(元素) 操作(C語言完整版)

#include <stdio.h>
#include <malloc.h>
#define N 5
typedef struct node
{
char name[20];
float score;
struct node *next;
}stud;




stud *creat(int n)
{
stud *p, *h, *s;
int i;
if((h=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("No memory space can be allocated!");
exit(0);
}
h->name[0]='\0';
h->score=0;
h->next=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s=(stud*)malloc(sizeof(stud)))==NULL)
{
printf("No memory space can be allocated!");
exit(0);
}
p->next=s;
printf("Enter the %d name and score",i+1);
scanf("%s%f",s->name,&s->score);
s->next=NULL;
p=s;
}
return(h);
}








stud *del(stud *head, char name[10])
{
stud *p1, *p2;
if(head==NULL){printf("\n list null!\n");}
p2=head;
p1=head->next;


while(strcmp(p1->name,name)!=NULL  && p1->next!=NULL)
{
p2=p1; p1=p1->next;
}


if(strcmp(p1->name,name)==NULL)
{
p2->next=p1->next;
printf("delete: %s\n",name);



}
else printf("%s not been found! \n",name);
return(head);
}






void print(stud *h)//輸出連結串列
{
int n;
stud *p;



p=h->next ; //如果選擇p=h,則頭結點中的資料域中會出現亂碼
if(h !=NULL)
do
{
printf("%s%f\n",p->name,p->score);
p=p->next;
}while(p!=NULL);
}






main()
{char name[10];
int number;
stud *head;

number=N;
head=creat(number);
printf("The original records are:\n");
print(head);


printf("input the deleted name:");
scanf("%s",name);
while(strcmp(name,"quit")!=0)
{
head=del(head,  name);
printf("the new records  are: \n");
print(head);
printf("input the deleted name:");
scanf("%s",name);


}


}