高分求大神给代码注释,c语言 代码作用是用函数insert向一个动态链表插入节点。 越详细越好,谢谢啊!!

2020-06-28 教育 56阅读
#include //包含的头文件
#include
#define LEN sizeof(struct student)
struct student//定义一个结构体
{
long num;//应该是学号
float score;
struct student *next;
};
int n;
int main()
{
struct student *creat();
struct student *insert(struct student *, struct student *);
void print(struct student *);
struct student *head,stu;
printf("input records:\n");
head=creat();
print(head);
printf("input the inserted record:");
scanf("%ld,%f",&stu.num,&stu.score);
head=insert(head,&stu);
print(head);
return 0;
}
struct student *creat()
{
struct student *head;//创建头节点
struct student *p1,*p2; //定义两个指向节点的指针
n=0;
p1=p2=( struct student*) malloc(LEN); //给节点分配空间
scanf("%ld,%f",&p1->num,&p1->score); //给节点空间里面的数据赋值
head=NULL;//头节点指向空
/*
------下面的while循环就是为了构成一个链表--------
*/
while(p1->num!=0) //学号不能为0 只有在输入学号为0时候 循环才会退出来
{
n=n+1;
if(n==1) //当只有一个
head=p1; //使头节点指针指向P1指向的节点空间 head和P1就指向同一节点了
else
p2->next=p1;//使p2的next指针指向P1指向的节点空间 那么P2和P1就连接起来了
p2=p1;//然后使p2和P1指向同一节点空间
p1=(struct student*)malloc(LEN); //为了添加节点 就得给节点分配空间
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL; //这里是不是应该p1->next=NULL
return(head);
}
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;
}
/*
----while循环结束的条件(p0->num) < (p1->num)) 和 (p1->next==NULL)----
*/
if(p0->num<=p1->num) //当满足(p0->num) <= (p1->num)) && (p1->next!=NULL)
{
if(head==p1)
head=p0;
else
p2->next=p0;
p0->next=p1;
}
else //当满足(p0->num) > (p1->num)) && (p1->next==NULL)
{
p1->next=p0; p0->next=NULL;}
}
n=n+1;
return(head);
}
void print(struct student *head)
{
struct student *p;
printf("\nNow,These %d records are:\n",n);
p=head;
if(head!=NULL)
{
do //循环打印
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com