有a,b两个已按学号升序排序的链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,仍按学号升序排列。
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct student
{
int num;
float score;
struct student *next;
}STU;
STU *create()
{
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 output(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(int argc, char *argv[])
{
STU *a,*b,*c;
printf("\n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)\n");
a=create();
printf("\n请输入链表b的信息,学号小于零时结束输入:格式(学号 成绩)\n");
b=create();
printf("\n链表a的信息为:\n");
output(a);
printf("\n链表b的信息为:\n");
output(b);
c=link(a,b);
printf("\n合并后的链表信息为:\n");
output(c);
return 0;
}
#include <stdlib.h>
#define N 10
typedef struct student
{
int num;
float score;
struct student *next;
}STU;
STU *create()
{
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 output(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(int argc, char *argv[])
{
STU *a,*b,*c;
printf("\n请输入链表a的信息,学号小于零时结束输入:格式(学号 成绩)\n");
a=create();
printf("\n请输入链表b的信息,学号小于零时结束输入:格式(学号 成绩)\n");
b=create();
printf("\n链表a的信息为:\n");
output(a);
printf("\n链表b的信息为:\n");
output(b);
c=link(a,b);
printf("\n合并后的链表信息为:\n");
output(c);
return 0;
}