/*
有两个链表a和b,设节点中包含学号、成绩。 从a链表中删去b链表中有相同学号的那些节点。
输入
第一行有两个用空格隔开的整数n和m,分别表示a和b两个链表中的节点个数。 保证n和m均不超过100。
之后的n行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
最后的m行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
a和b两个链表中的节点并不一定按照学号顺序排列。 保证a链表中学号各不相同,b链表中学号各不相同。
输出
首先输出a链表最终剩下的节点个数k。
在接下来的k行,每行输出两个用空格隔开的整数,分别表示一个学生的学号和成绩。
请注意行尾输出换行。
*/
/*
#include<stdio.h>
#include <stdlib.h>
typedef struct student
{
int num;
int score;
struct student *next;
}Student;
Student *create(int n)
{
Student *p,*head,*q;
int i;
head=(Student *)malloc(sizeof(Student));
for(i=0;i<n;i++)
{
p=(Student *)malloc(sizeof(Student));
scanf("%d%d",&p->num,&p->score);
p->next=NULL;
if(i==0) head->next=p;
else q->next=p;
q=p;
}
return head;
}
int count(Student *head)
{
Student *p;
int n=0;
p=head->next;
while(p!=NULL)
{
p=p->next;
n++;
}
return n;
}
void print(Student *head)
{
Student *p;
p=head->next;
while(p!=NULL)
{
printf("%d %d\n",p->num,p->score);
p=p->next;
}
}
Student *del(Student *heada,Student *headb)
{
Student *pa,*pb,*qa,*qb;
int y;
pa=heada;
while(pa->next!=NULL)
{
pb=headb;
y=0;
while(pb->next!=NULL)
{
if(pa->next->num==pb->next->num)
{
qa=pa->next;
pa->next=qa->next;
free(qa);
qb=pb->next;
pb->next=qb->next;
free(qb);
y=1;
}
else pb=pb->next;
}
if(y==0) pa=pa->next;
}
return heada;
}
int main()
{
int m,n;
int k;
Student *heada,*headb,*p;
scanf("%d%d",&n,&m);
heada=create(n);
headb=create(m);
heada=del(heada,headb);
k=count(heada);
printf("%d\n",k);
print(heada);
p=heada;
while(p!=NULL)
{
heada=heada->next;
free(p);
p=heada;
}
p=headb;
while(p!=NULL)
{
headb=headb->next;
free(p);
p=headb;
}
return 0;
}
*/
/*
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
输入
第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成
输出
按照学号升序排列的数据
*/
#include <stdio.h>
struct student
{ int num;
int score;
};
int main()
{
int n,m,i,j,t;
struct student a[100];
scanf("%d%d",&n,&m);
for(i=0; i<n; i++)
scanf("%d%d",&a[i].num,&a[i].score);
for(i=n; i<m+n; i++)
scanf("%d%d",&a[i].num,&a[i].score);
for(i=0; i<m+n; i++)
{
for(j=0; j<m+n-i-1;j++)
if(a[j].num>a[j+1].num)
{
t=a[j].num;
a[j].num=a[j+1].num;
a[j+1].num=t;
t=a[j].score;
a[j].score=a[j+1].score;
a[j+1].score=t;
}
}
for(i=0; i<m+n; i++)
printf("%d%d\n",a[i].num,a[i].score);
return 0;
}
网友评论