解题思路:1、先创建两个链表,用连接函数将两条链表连接起来
2、用冒泡排序法,将比较后的两个节点数据域进行交换
3、打印出链表,细节还是看代码吧
注意事项:注意连接链表需要前一个链表的最后一个节点,获取节点最好还是写个函数封装起来,这样看着更加清爽。还有冒泡排序中的循环条件不能搞错,尤其是内层。
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int num;
int score;
struct node* next;
}Node,*Linklist;
Linklist Create_linklist(int x){//头插法创建链表
Node* L=malloc(sizeof(Node*));
L->next=NULL;
Node* p;
int i,n,m;
for(i=0;i<x;i++){
scanf("%d %d",&n,&m);
p=malloc(sizeof(Node*));
p->num=n;
p->score=m;
p->next=L->next;
L->next=p;
}
return L;
}
Node* get_lastnode(Linklist list){
Node* p;
p=list->next;
while(p->next!=NULL){//找链表的最后一个节点的条件需要是它的下一个节点不为空,因为它最后一个节点是有值的
p=p->next;
}
return p;
}
Linklist connect_linklist(Linklist list1,Linklist list2){
Linklist L=malloc(sizeof(Node*));
Node* p=get_lastnode(list1);//得到第一个节点的尾节点
Node* s=list2;//第二个节点的头节点
p->next=s->next;
free(s);
return list1;
}
void bubble_sort(Linklist list){//冒泡排序
Node* p=list->next;
Node* q=NULL;
int temp1;
int temp2;
while(p!=q){ //也可为 p->next!=q
while(p->next!=q){
if(p->num>p->next->num){//判断后进行数据交换
temp1=p->num;
p->num=p->next->num;
p->next->num=temp1;
temp1=p->score;
p->score=p->next->score;
p->next->score=temp1;
}
p=p->next;//每次内循环都将p往后移一个单位
}
q=p;//将p赋给q,用于外层循环的条件判断,提高程序效率,让排好的位置不再进入排序中
p=list->next;//将p重置为头节点
}
}
void print_Linklist(Linklist list){
Node* p=list->next;
while(p!=NULL){
printf("%d %d\n",p->num,p->score);
p=p->next;
}
}
int main(){
Linklist l;
Linklist L;
Linklist J;
int n,m;
scanf("%d %d",&n,&m);
l=Create_linklist(n);
L=Create_linklist(m);
J=connect_linklist(l,L);
bubble_sort(l);
// printf("排序后的数据:\n");
print_Linklist(l);
return 0;
}
0.0分
1 人评分
母牛的故事 (C语言代码)浏览:915 |
【偶数求和】 (C语言代码)浏览:639 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:703 |
关于C语言变量位置的问题浏览:272 |
1024题解浏览:806 |
演讲大赛评分 (C语言代码)浏览:1629 |
C二级辅导-温度转换 (C语言代码)浏览:718 |
勾股数 (C语言代码)浏览:799 |
字符逆序 (C语言代码)浏览:504 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:466 |