#include "stdio.h"
#include<malloc.h>
#include<string.h>
#include<ctype.h>
#define LEN sizeof(struct student)
struct student{
long num;
float score;
struct student*next;
};
struct student*creat()
{
struct student *head;
struct student*p1,*p2;
char ch;
int a=0;
head=NULL;
printf("是否输入新数据?(y/n):");
while(toupper(ch=getchar())=='Y')
{
p1=(struct student * )malloc(LEN);
a++;
printf("\n请输入:");
scanf("%ld,%f",&p1->num,&p1->score);
printf("是否输入新数据?(y/n):");
scanf("%ld,%f",&p1->num,&p1->score);
getchar();
printf("是否输入新数据:?(y/n):");
if(a==1)
{
head=p1;
p2=p1;
}
else
{
p2->next=p1;
p2=p1;
}
p1->next=NULL;
}
return (head);
}
struct student * insert(struct student * head)
{
struct student *p0,*p1,*p2;
p0=(struct student * )malloc(LEN);
printf("\n输入所要插入节点的数据:");
scanf("%ld,%f",&p0->num,&p0->score);
p1=head;
if(head==NULL)
{
head=p0;
p0->next=NULL;
}
else
if(p1->num>p0->num)
{
p0->next=head;
head=p0;
}
else
{
while(p1!=NULL)
{
if(p1->num<p0->num)
{
p2=p1;
p1=p1->next;
}
else
{
p0->next=p1;
p2->next=p0;
break;
}
}
if(p1==NULL)
{
p0->next=NULL;
p2->next=p0;
}
}
return(head);
}/////
void print(struct student *head)
{
struct student *p;
p=head;
while(p!=NULL)
{
printf("\n学生学号:%d,成绩:%4.1f",p->num,p->score);
p=p->next;
}
}
struct student *del(struct student *head)
{
struct student *p1,*p2;
long num;
printf("\n请输入所要删除的学号:");
scanf("%ld",&num);
if(head==NULL)
{
printf("\n链表为空!\n");
return(head);
}
if(head->num==num)
{
printf("删除学号:%ld,成绩%4.1f",head->num,head->score);
return(head);
}
else
{
p2=head;
p1=head->next;
while(p1!=NULL)
{
if(p1->num==num)
{
p2->next=p1->next;
break;
}
else
{
p2=p1;
p1=p1->next;
}
}
return(head);
}
}
void main( )
{
struct student *stu;//用于指向结构体变量
stu=creat();
stu=insert(stu);
print(stu);
stu=del(stu);
print(stu);
}
OSong
ziom
相关分类