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


Input:

第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成

Output:

按照学号升序排列的数据

Sample Input:
2 3
5 100
6 89
3 82
4 95
2 10
Sample Output:
2 10
3 82
4 95
5 100
6 89   
解题思路:
1、用两个for循环来给两个链表由小到大排序

for(i=0;i<m+n,i++)
{
     for(j=i+1;j<m+n;j++)
    {
         if(s[i].num>s[j].num)
        {
               t=s[j];
               s[j]=s[i];
               s[i]=t;
        }
    }
}

2、使用冒泡排序,使数列由小到大

for(i=1;i<m+n;i++)

{

    for(j=0;j<m+n-i;j++)

    {

         if(s[j].num>s[j+1].num)

         {

             t=s[j+1];

             s[j+1]=s[j];

             s[j]=t;

          }

     }

}

完整代码:

#include <stdio.h>
struct Student{
	int num;
	int score;
};
void main()
{
	int i,j,m,n;
	scanf("%d%d",&n,&m);
	struct Student s[m+n],t;
	for(i=0;i<m+n;i++)
	{
		scanf("%d %d",&s[i].num,&s[i].score);
	}
	for(i=0;i<m+n;i++)
	{
		for(j=i+1;j<m+n;j++)
		{
			if(s[i].num>s[j].num)
			{
				t=s[j];
				s[j]=s[i];
				s[i]=t;
			}
		}
	}
	for(i=0;i<m+n;i++)
	{
		printf("%d %d\n",s[i].num,s[i].score);
	}
	
}
 

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM