此处安利一波广告,没收广告费的,推荐大家一个刷题的网址 https://www.dotcpp.com/,话不多说,好不好进去就知道了,
思路:
该题目较为简单,一个链表的空间足矣,但是时间复杂度就有点难算了,基本想法就是,先直接输入时候就组成一张链表,然后直接对链表进行排序(此处选择了冒泡排序,比较熟悉也容易实现),再打印输出即可。
代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Link{
int stu_Num;
int stu_score;
struct Link *next;
}Link;
Link *InitLink(){
Link *p1 = (Link *)malloc(sizeof(Link));
p1->next = NULL;
return p1;
}
Link *CreatLink(int num,Link *head){
Link *Link1 = head;
for(int i = 0;i < num;i++){
Link *p1 = (Link *)malloc(sizeof(Link));
scanf("%d%d",&p1->stu_Num,&p1->stu_score);
p1->next = NULL;
Link1->next = p1;
Link1 = p1;
}
return Link1;
}
Link *SortLink(Link *head){
int tempnum,tempscore;
Link *start = head->next;
Link *end = start->next;
while(start!=NULL){
while(end!=NULL){
if(start->stu_Num >end->stu_Num){
tempnum = end->stu_Num;
tempscore = end->stu_score;
end->stu_Num = start->stu_Num;
end->stu_score = start->stu_score;
start->stu_Num = tempnum;
start->stu_score = tempscore;
}
end = end->next;
}
end = start = start->next;
}
}
void printfLink(Link *head){
Link *temp = head->next;
while(temp!=NULL){
printf("%d %d\n",temp->stu_Num,temp->stu_score);
temp = temp->next;
}
}
int main()
{
int M,N;
Link *head = InitLink();
scanf("%d%d",&M,&N);
CreatLink(M+N ,head);
SortLink(head);
printfLink(head);
return 0;
}