C语言 麻烦帮我解决一下,我等答案,谢谢,急

来源:百度知道 编辑:UC知道 时间:2024/07/03 14:54:34
题目是:已有a、b两个链表,每个链表中的节点包括学号、成绩。要求把两个链表合并,按学号由小到大重新排列。
我已经写好了a、b两个链表和已经把b链表接到了a链表后面,但我不知道怎么排序,麻烦哪位大哥大姐帮我解决一下。谢谢
#include<stdio.h>
struct student
{
int num;
float result;
struct student *next;
};

void main()
{
struct student *a,*b;
struct student q,w,e,r,t,y;
q.num=1001;
q.result=92.5;
w.num=1005;
w.result=85;
e.num=1003;
e.result=88;
a=&q;
q.next=&w;
w.next=&e;
e.next=NULL; /*定义一个a链表*/

r.num=1002;
r.result=90.5;
t.num=1004;
t.result=99;
y.num=1008;
y.result=96.5;
b=&r;
r.next=&t;
t.next=&y;
y.next=NULL; /*定义一个b链表*/

e.next=b; /*将b链表连接到a链表后面*/

}

e.next=b;

}

#include<stdio.h>
#include<stdlib.h>

struct Student
{
int num;
float result;
struct Student *next;
};

//按照学号排序
Student *InsertSort(struct Student *head)
{
struct Student *first; /*为原链表剩下用于直接插入排序的节点头指针*/
struct Student *t; /*临时指针变量:插入节点*/
struct Student *p; /*临时指针变量*/
struct Student *q; /*临时指针变量*/

first = head->next; /*原链表剩下用于直接插入排序的节点链表*/
head->next = NULL; /*只含有一个节点的链表的有序链表。*/
while (first != NULL) /*遍历剩下无序的链表*/
{
/*注意:这里for语句就是体现直接插入排序思想的地方*/
for (t=first, q=head; ((q!=NULL) && (q->num < t->num)); p=q, q=q->next); /*无序节点在有序链表中找插入的位置*/

/*退出for循环,就是找到了插入的位置*/
first = first->next; /*无序链表中的节点离开,以便它插入到有序链表中。*/

if (q == head) /*插在第一个节点之前*/
{
head = t;
}
else /*p是q的前驱*/
{
p->next = t;
}
t->next = q; /