您的位置:首页 > 其它

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

2016-06-08 21:24 417 查看
#include <stdio.h>
#include <stdlib.h>
#define N 10

typedef struct student
{
int num;
float score;
struct student *next;
}stu;

stu *creat()
{
int i;
stu *p,*head = NULL,*tail = head;
for (i = 0; i < N; i++)
{
p = (stu *)malloc(sizeof(stu));
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;
}

void print(stu *p)
{
while (p != NULL)
{
printf("%d\t%.2f\n",p->num,p->score);
p = p->next;
}
}

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;
}

int main()
{
stu *a,*b,*c;
printf("\n请输入链表a的信息,学号小于等于零时结束输入:格式(学号 成绩)\n");
a = creat();
printf("\n请输入链表b的信息,学号小于等于零时结束输入:格式(学号 成绩)\n");
b = creat();
printf("\n链表a的信息为:\n");
print(a);
printf("\n链表b的信息为:\n");
print(b);
c = link(a,b);
printf("\n合并后的链表信息为:\n");
print(c);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: