c语言 控制链表(登录学生分数)

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define NULL 0
#define LEN sizeof(struct student)

struct student
{
long num;
float score;

//char *name;   为了方便测试,所以注销掉了
struct student *next;
};

int n;

struct student *create(void)
{
struct student *head;
struct student *p1,*p2;

p1=p2=(struct student *)malloc(LEN);

scanf("%ld,%f",&p1->num,&p1->score);


head=NULL;
while(p1->num !=0)
{
n=n+1;
if(n==1)
{
head=p1;
}else
{
p2->next=p1;
}
p2=p1;
p1=(struct student *)malloc(LEN);
scanf("%ld,%f",&p1->num,&p1->score);


}
p2->next=NULL;
return(head);
}

void print(struct student *head)
{
struct student *p;
printf("\n %d \n",n );
p=head;
if(head != NULL)
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}

//delete
struct student *del(struct student *head,long num)
{
struct student *p1,*p2;
if(head ==NULL){
printf("list is null \n");
return head;
}
p1=head;

while(num !=p1->num && p1->next != NULL)
{
p2=p1;
p1=p1->next;
}
if(num == p1->num)
{
if(p1==head)head=p1->next;
else p2->next=p1->next;
n=n-1;

}
else

printf("not found" );
return head;


}


//insert
struct student *insert(struct student *head,struct student *stud)
{
struct student *p0,*p1,*p2;
p1=head;
p0=stud;
if(head ==NULL)
{
head=p0; p0->next=NULL;
}
else
{
while((p0->num>p1->num) && (p1->next !=NULL))
{
p2=p1;
p1=p1->next;

}
if(p0->num <= p1->num)
{
if(head==p1)head=p0;
else p2->next=p0;
p0->next=p1;
}
else{
p1->next=p0;p0->next=NULL;
}

}
n=n+1;
return head;
}

void main()
{
struct student *p=(struct student *)malloc(LEN);
p=create();
p=del(p,22);
print(p);

}

相关推荐