已有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