C语言:已有a,b两个链表,每个链表中的节点包括学号,成绩。要求把两个链表合并,按学号的升序排列

//(未完成)已有a,b两个链表,每个链表中的节点包括学号,成绩。要求把两个链表合并,按学号的升序排列#include<stdio.h>#defineNULL0struc... //(未完成)已有a,b两个链表,每个链表中的节点包括学号,成绩。要求把两个链表合并,按学号的升序排列
#include<stdio.h>
#define NULL 0
struct student
{
long num;
float score;
struct student * next;
};
struct student a[5]=
{
{1005,10.23,&a[1]},
{1004,10.54,&a[2]},
{1003,11.55,&a[3]},
{1002,12.32,&a[4]},
{1001,15.65,NULL}
};
struct student b[5]=
{
{2005,11.23,&b[1]},
{2004,12.54,&b[2]},
{2003,16.55,&b[3]},
{2002,14.32,&b[4]},
{2001,17.65,NULL}
};
void print(struct student * head)//打印链表的函数
{
struct student * p;
p=head;
if(head==NULL){}
else{
do{
printf("%ld %f \n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
}
void * sx(struct student * head)//升序函数,返回值是head的地址。将所有的节点按升序排列。
{
/*
这里是需要编写升序程序的代码区域,我不会。你帮帮我。谢谢!
*/
return (head);
}
void main()
{
a[4].next=&b[0];//将两个链表先连接起来
struct student * head;
head=&a[0];
print(head);
printf("num 按升序排列之后的输出结果是 :\n");
head=sx(head);//将经过升序排列之后的节点链表的首地址,赋值给head
print(head);//打印升序之后的链表
}
展开
 我来答
yuzhun21
推荐于2016-09-19 · TA获得超过373个赞
知道答主
回答量:101
采纳率:0%
帮助的人:81.5万
展开全部
struct student* sx(struct student * head)
{ // 用递归,每次找出原链表中学号最小的元素,插入到新链表的后面。
struct student *cursor, *first, *prev, *min;
first = NULL;

if (head == NULL)
return NULL;

for (cursor = min = head; cursor->next != NULL; cursor = cursor->next)
{
if (cursor->next->num < min->num)
{
prev = cursor;
min = cursor->next;
}
}

first = min;

if (min == head)
head = head->next;
else
prev->next = min->next;

first->next = sx(head);

return first;

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式