C语言-链表排序_单链表的排序c语言

C语言-链表排序_单链表的排序c语言C语言-链表排序题目描述已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。输入第一行,a、b两个链表元素的数量N、M,用空格隔开。接下来N行是a的数据然后M行是b的数据每行数据由学号和成绩两部分组成输出按照学号升序排列的数据样例输入235100689382495210样例输出210382…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

C语言-链表排序

题目描述

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

输入

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

输出

按照学号升序排列的数据

样例输入

2 3
5 100
6 89
3 82
4 95
2 10

样例输出

2 10
3 82
4 95
5 100
6 89

My first try on Linkedlist, quite hard for me at first
especially the beginning part
also pointer is a hard part for I havn’t understood yet
BUT PRACTICE PAYS
I finally get to know it

#include<cstdio>
#include<cstdlib>
typedef struct student{ 
   //定义结构 
	int num;
	int sco;
	struct student *next;
}stu;

stu *creat(int n){ 
   //创建链表 
	stu *head,*node,*end;
	head=(stu*)malloc(sizeof(stu));
	end=head;
	for(int i=0;i<n;i++){ 
   
		node=(stu*)malloc(sizeof(stu));
		scanf("%d %d",&node->num,&node->sco);
		end->next=node;
		end=node;
	}
	end->next=NULL;
	return head;
}

stu *link(stu *a,stu*b)//链接 
{ 
   
	stu *p=a;
	while(p->next!=NULL){ 
   
		p=p->next;
	}
	p->next=b->next;
	return a;
}

void linksort(struct student *p){ 
   //排序 
	int tnum,tsco,k=0,i=1;
	 
	struct student *p1;
	p1=p;
	while(i!=0){ 
   
	    while(p1->next!=NULL){ 
   
	        if(p1->num>p1->next->num)  { 
   
	           tnum=p1->num;
	           p1->num=p1->next->num;
	           p1->next->num=tnum;
	 
	           tsco=p1->sco;
	           p1->sco=p1->next->sco;
	           p1->next->sco=tsco;
	           k++;
	        }
	        p1=p1->next;
	    }
	    p1=p;
	    if(k>0){ 
   
			k=0;
		}
	    else i=0;
	}
}

void print(stu *a)//输出 
{ 
   
	stu *p=a;
	while(p->next!=NULL){ 
   
		printf("%d %d\n",p->num,p->sco);
		p=p->next;
	}
}
int main()
{ 
   
	int n,m;
	scanf("%d %d",&n,&m);
	stu *a=creat(n);
	stu *b=creat(m);
	stu *p=link(a,b);
	linksort(p);
	print(p);
	return 0;
} 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/183087.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Robotium DialogUtils「建议收藏」

    Robotium DialogUtils「建议收藏」packagecom.robotium.solo;importandroid.app.Activity;importandroid.content.Context;importandroid.os.SystemClock;importandroid.view.ContextThemeWrapper;importandroid.view.View;impo

  • 图片变透明之opacity属性

    图片变透明之opacity属性CSS3图像透明度开发工具与关键技术:DW-opacity属性作者:徐晶旗撰写时间:2019年1月18日利用opacity属性来改变图片的透明度,opacity属性能够设置的值从0.0到1.0。值越小,图片越透明。下面这几张图片是执行代码得出的效果,第一张图片没有给它设置opacity值,所以它呈现的是原图,没有透明的效果,后面几张图设置的opacity值越来越小,可…

  • 翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书[通俗易懂]

    翻译:VESA Adaptive-Sync / AMD FreeSync / VRR 白皮书[通俗易懂]译者注以下为正文。介绍多年来,显示行业一直普遍认为显示器是以固定的刷新率(refreshrate)运行的,如60Hz。这与以下事实形成鲜明对比:送给显示器的图像内容多种多样,每种图像都有自己独特的、变化的帧率(framerate)。当显示的刷新率与图像内容自身的帧率不同步时,用户可能会察觉到撕裂(tearing)和卡顿(stutter)之类的异常效果。在移动应用程序中(如平板、笔记本电脑),对于静态图像和视频播放来说,较高的显示刷新率不仅显得多余,还增加了系统功耗,降低了续航能力。这些因素使得我

  • 使用JAX-WS进行应用程序身份验证「建议收藏」

    使用JAX-WS进行应用程序身份验证「建议收藏」在JAX-WS中处理身份验证的常用方法之一是客户端提供“用户名”和“密码”,将其附加在SOAP请求标头中并发送到服务器,服务器解析SOAP文档并检索提供的“用户名”和“密码”从请求标头中进行,并从数据库中进行验证,或者使用其他任何方法。在本文中,我们向您展示如何实现上述“JAX-WS中的应用程序级别认证”。想法…在Web服务客户端站点上,只需将“用户名”和“密码”放入请…

  • navicat8注册码

    navicat8注册码NavicatforMySQLEnterpriseEdition8注册码:NAVJ-W56S-3YUU-MVHVNAVE-WAGB-ZLF4-T23K

    2022年10月10日
  • 什么是计算机补码_二进制原码反码补码

    什么是计算机补码_二进制原码反码补码计算机中数字都是用二进制来表示的,有三种编码方式:原码、反码、补码,而计算中用到最多的就是补码,原因是什么呢?让我们来看一下这三种方式的具体表示吧原码原码的表达很简单,最高位为符号位,0表示正数,1表示负数。其它位即为绝对值的二进制表示,非常直观。但是使用原码存在哪些问题呢?0的表示存在二义性如果按照上述的表示方式,那么0就可以分为+0和-0两种表示。即以8位字长来说+0的原码为00000000…

    2022年10月21日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号