1.程序编写
#include<stdio.h>
#include<malloc.h>
#define n 5 //定义每个链表中的结点数,即每个链表中有五位学生
#define LEN sizeof(struct student) //命令行,令 LEN 代表struct student类型数据的长度
typedef struct student
{
int num;
float score;
struct student * next;
}stu;
stu * creat() //定义函数,此函数带回一个指向链表头的指针
{
stu * p,* head = NULL, * tail = head;
for (int i = 0; i < n; i++)
{
p = (stu *)malloc(LEN); //开辟一个新单元
scanf("%d %f", &p->num, &p->score);
p->next = NULL;
if (p->num < 0)
{
free (p);
break;
}
if (head == NULL)
{
head = p;
}
else
tail->next = p;
tail = p;
}
return head;
}
stu * link(stu *p1, stu *p2)
{
stu * p, *head;
if (p1->num < p2->num)
{
head = p = p1;
p1 = p1->next;
}
else
{
head = p = p2;
p2 = p2->next;
}
while ((p1 != NULL) && (p2 != NULL))
{
if (p1->num < p2->num)
{
p->next = p1;
p = p1;
p1 = p1->next;
}
else
{
p->next = p2;
p = p2;
p2 = p2->next;
}
if (p1 != NULL)
{
p->next = p1;
}
else
{
p->next = p2;
}
}
return head;
}
void print(stu * p)
{
if (p == NULL)
{
printf("空链表!\n");
}
while (p != NULL)
{
printf("%d %5.2lf\n", p->num, p->score);
p = p->next;
}
}
int main()
{
stu * a, * b, * c;
printf("请输入链表a的信息,学号小于零时结束:格式(学号 成绩)\n");
a = creat();
printf("请输入链表b的信息,学号小于零时结束:格式(学号 成绩)\n");
b = creat();
printf("链表a的信息为:\n");
print(a);
printf("链表b的信息为:\n");
print(b);
c = link(a, b);
printf("合并后链表的信息为:\n");
print(c);
return 0;
}
2.学生信息备份
9001 90 9002 52
9003 98 9004 69
9005 96 9006 64
9007 96 9008 65
9009 63 9010 63
3.结果演示