带头节点单链表的删除(元素) 操作(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);


}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值