解题思路:话不多说看注释就行
注意事项:看注释咯
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct _node{
int id;
int grade;//前两个是结点所存的数据
struct _node *next;//指向下一个结点的指针
}Node;//这里用了typedef所以Node是类型而不是变量
int main()
{
int N,M;
int i;
scanf("%d %d",&N,&M);
Node *head1=NULL;//定义一个链表的头,它指向第一个结点
for(i=0;i<N;i++){//这里有明确的结点数量,所以用for循环
Node *p=(Node*)malloc(sizeof(Node));
scanf("%d %d",&p->id,&p->grade);
p->next=NULL;
Node *last=head1; //将链表的结点连接起来,需要遍历链表
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else{
head1=p;
}
}
Node *head2=NULL;
for(i=0;i<M;i++){
Node *p=(Node*)malloc(sizeof(Node));
scanf("%d %d",&p->id,&p->grade);
p->next=NULL;
Node *last=head2;
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else{
head2=p;
}
}
Node *last=head1;//注意这里需要再次定义last,因为上次定义在大括号中
while(last->next){//连接两个链表,先找到第一个链表的末端NULL,让它等于head2,实现连接
last=last->next;//需要注意这里结束的条件是last->next而不是last
}
last->next=head2;
//下面开始按照学号排序,采用选择排序
int t;
Node *min=head1;
for(min=head1;min;min=min->next){
for(last=min->next;last;last=last->next){//注意这里遍历链表结束的条件是last而不是last->next
if(min->id>last->id){//且注意这里每轮last的位置应该随min改变而改变
t=min->id;min->id=last->id;last->id=t;
t=min->grade;min->grade=last->grade;last->grade=t;
}
}
}
last=head1;
while(last){
printf("%d %d\n",last->id,last->grade);
free(last);
last=last->next;
}
return 0;
}
0.0分
3 人评分
C语言程序设计教程(第三版)课后习题11.11 (C语言代码)浏览:772 |
弟弟的作业 (C++代码)浏览:1304 |
【亲和数】 (C语言代码)浏览:542 |
分糖果 (C++代码)浏览:1449 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:563 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:576 |
Cylinder (C语言描述+详细分析)浏览:3266 |
简单的a+b (C语言代码)浏览:546 |
简单的a+b (C语言代码)浏览:582 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:605 |