#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);
}
}
#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);
}
}
转载请标明出处:带头节点单链表的插入(元素) 操作(C语言完整版)