|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct student
{
long num;
float grad;
struct student *next;
}linklist;
linklist *insert(linklist *head,linklist *p); //按成绩小到大插入到单链表中
linklist *creat(); //创造一个单链表
void output(linklist *head); //输出单链表的数据
void main()
{
linklist *head;
head=creat();
output(head);
}
linklist *creat(void)
{
linklist *head,*p;
long nu;
float gra;
head=NULL;
p=(linklist *)malloc(sizeof(linklist));
printf("请输入学号 成绩:");
scanf("%ld %f",&nu,&gra);
while(nu!=0)
{
p->num=nu;
p->grad=gra;
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
head=insert(head,p);
}
printf("请输入学号 成绩:");
p=(linklist *)malloc(sizeof(linklist));
scanf("%ld %f",&nu,&gra);
}
return (head);
}
void output(linklist *head)
{
linklist *p1;
p1=head;
while(p1!=NULL)
{
printf("%ld,%f\n",p1->num,p1->grad);
p1=p1->next;
}
}
linklist *insert(linklist *head,linklist *p)
{
linklist *p1,*p2;
p1=head;
p2=NULL;
while((p1->grad<p->grad)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p1->next!=NULL)
{
if(p2==NULL)
{
p->next=head;
head=p;
}
else
{
p->next=p1;
p2->next=p;
}
}
else
{
p2->next=p;
p->next=NULL;
}
return(head);
while((p1->grad<p->grad)&&(p1->next!=NULL))
这一句视乎你输入的分数才会执行和是否一个节点才会执行的,当你输入1 20 再输入2 30 这条件根本不会符合,即使你输入1 20再输入2 19依旧不会执行,因为这个时候p1->next是NULL,也不符合条件,所以你输入两个数据一定会报错
|
|