C/C++数据结构-链表-链表合并排序输出

news2025/1/9 4:29:40

文章目录

  • 前言
  • 例题
  • 题解
    • 带头结点
    • 不带头结点

前言

这个小例题涵盖的知识点还是非常多的。包括链表的定义,链表的尾插法,链表的遍历,冒泡排序用链表实现。链表可以使用带头结点和不带头结点的形式,各有千秋。
本文完整版使用带头结点的链表。


例题

在这里插入图片描述下面这个是便于复制单独列一下。

样例输入

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

样例输出

2 10
3 82
4 95
5 100
6 89


题解

因为代码写了很多注释,这里就直接贴代码了.
自己写的时候有一些注意点如下:
1.定义结构体指针之后,如果不给已有结构体对象的地址,要使用malloc分配内存。
2.使用头结点作为链表的开头,头结点本身不存放数据。
3.插值以及遍历之后,对与头指针的位置,记得归位。
4.带头结点的链表更容易操作,理解起来没那么困难。

带头结点

#include<iostream>
using namespace std;
struct node{
	int num;
	int score;
	struct node *nextNode;
};
void insertNodeAtTail(struct node* head,int num,int score)
{
	//尾插法插入节点
	struct node* newNode=(struct node*)malloc(sizeof(struct node));
	newNode->num=num;
	newNode->score=score;
	newNode->nextNode=nullptr;
	
	head->nextNode=newNode;
	
	
};
void merage(struct node* a,struct node* b)
{
	//先找到a的最后一个节点
	while(a->nextNode!=NULL){
		a=a->nextNode;
	}
	
	//将a链表的最后一个节点与b链表头相连
	a->nextNode=b->nextNode;
	
};

void sort_by_Num(struct node* a)
{
	struct node *b;
	//采用冒泡排序的方式
	for(a=a->nextNode;a!=NULL;a=a->nextNode){
		
		for(b=a->nextNode;b!=NULL;b=b->nextNode){
			if(a->num > b->num){
				int temp=a->num;
				a->num=b->num;
				b->num=temp;
				
				int tempScore=a->score;
				a->score=b->score;
				b->score=tempScore;
			}
		}
		//可以在这里排序完直接输出,也可以在main里面单独遍历
		//cout<<a->num<<" "<<a->score<<endl;	
	}

	
}

int main () {
	//两个链表的头结点,但不存放数据
	node a,b;
	
	int n,m,num,score;
	cin>>n>>m;
	node *head=&a;
	node *headb=&b;

	for(int i=0;i<n;i++){
		cin>>num>>score;
		insertNodeAtTail(head,num,score);
		head=head->nextNode;
	}
	for(int i=0;i<m;i++){
		cin>>num>>score;
		insertNodeAtTail(headb,num,score);
		headb=headb->nextNode;
	}
	
	merage(&a,&b);
	sort_by_Num(&a);
	
	//单独遍历输出的情况,需要让头指针指回头结点,因为上面尾插法
	//改变了头指针位置
	head=&a;
	while(head->nextNode!=NULL){	
		head=head->nextNode;
		cout<<head->num<<" "<<head->score<<endl;
	}
	return 0;
}

不带头结点

下面是不使用头结点的情况,即不单独用一个节点表示头结点,头结点本身存放数据。
我只写了插入数据的函数,其他两个函数都可以类比上面的写法。

#include<iostream>
using namespace std;
struct node{
	int num;
	int score;
	struct node *nextNode;
};
void insertNodeAtTail(struct node* head,int num,int score)
{
	//尾插法插入节点
	struct node* newNode=(struct node*)malloc(sizeof(struct node));
	newNode->num=num;
	newNode->score=score;
	newNode->nextNode=nullptr;
	
	head->nextNode=newNode;		
};

int main () {
	//两个链表的第一个节点,要存数据的头结点
	node a,b;
	
	int n,m,num,score;
	cin>>n>>m;
	
	//两个链表头指针
	node *headA=&a;
	node *headB=&b;

	for(int i=0;i<n;i++){
		cin>>num>>score;
		if(i==0)
		{
			//如果头结点,直接赋值
			a.num=num;
			a.score=score;
		}
		else
		{
			//不是头结点就尾插法
			insertNodeAtTail(headA,num,score);
			headA=headA->nextNode;
		}

	}
	for(int i=0;i<m;i++){
		cin>>num>>score;
		if(i==0)
		{
			b.num=num;
			b.score=score;
		}
		else
		{
			insertNodeAtTail(headB,num,score);
			headB=headB->nextNode;
		}
	}
	headA=&a;
	for(int i=0;i<n;i++){
		cout<<headA->num<<endl;
		headA=headA->nextNode;
	}
	headB=&b;
	for(int i=0;i<m;i++){
		if(i!=m-1)
			cout<<headB->num<<endl;
		else
			cout<<headB->num;
		headB=headB->nextNode;
	}
	

	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1163007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美团圈圈私域加群app拉新 单价高一手渠道整理

美团圈圈为我们现在主推产品 可以通过”聚量推客“ 申请推广 一手数据&#xff0c;外面很多其它的数据都会阉割的很厉害&#xff0c;可以对比 下面介绍下圈圈的优势&#xff0c;我们目前圈圈对外结算时间为11天&#xff08;因为美团官方有个要求 10天内退群无效&#xff09;&…

技能证里的天花板—阿里云云计算架构师ACE认证!

在当今的社会中&#xff0c;想要获得一份好工作、得到丰厚的报酬&#xff0c;唯一的方法就是证明自己优秀&#xff0c;能给公司创造价值&#xff0c;是大多数公司想要看到的。 那么在面试过程中&#xff0c;怎么样才能让面试官一眼就记住呢&#xff1f;那一定是有一份足够优秀…

Java生成二维码并打印二维码和文字信息

目录 1、生成二维码&#xff0c;并调用画布进行二维码和文字的描绘。 2、主程序&#xff1a;获取打印机&#xff0c;并打印内容 3、打印效果 参考文献&#xff1a; 前期工作是安装好打印机驱动&#xff0c;可连接打印机。 添加三个依赖jar&#xff1a; 具体见文底的参考文献…

什么情况会造成电表不走数?

电表是衡量用电量的重要设备&#xff0c;一旦出现不走数的情况&#xff0c;不仅会影响用户对用电量的准确计算&#xff0c;还可能造成电费纠纷。那么&#xff0c;究竟什么情况下会造成电表不走数呢&#xff1f;接下来&#xff0c;小编来为大家介绍下&#xff0c;一起来看下吧&a…

学习使用php实现汉字验证码

学习使用php实现汉字验证码 <?php //开启session &#xff0c;方便验证 session_start(); //创建背景画布 $image imagecreatetruecolor(200, 60); $background imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $background);//创建背景画布 for ($…

【腾讯云HAI域探秘】AI让我变成灵魂画手

【腾讯云HAI域探秘】AI让我变成灵魂画手 文章目录 【腾讯云HAI域探秘】AI让我变成灵魂画手前言环境搭建进入 StableDiffusionWebUI使用 高性能应用服务HAI 部署的 StableDiffusionWebUI 快速进行AI绘画总结 前言 最近有幸参与了腾讯云举办的 腾讯云 HAI 产品体验活动。在这个过…

解决VS中文编译时出现:常量中有换行符

错误如下 首先确定文件编码格式已经是utf-8了&#xff0c;然后在有中文的情况的下&#xff0c;编译时会报错&#xff0c;真的很恶心 tabWidget.addTab(widget, tr("材料库"));tabWidget.addTab(widget1, tr("B"));解决方案 通过在项目里设置编译选项: /utf…

【docker使用Jar自定义镜像:基于windows】

在一个空文件夹中创建Dockerfile 将jar包复制到该路径下 在Dockerfile中添加以下内容 # 指定基础镜像 FROM java:8-alpine# 和java项目的包 COPY ./study_dockerfile-1.0.0.jar /tmp/app.jar# 暴露端口 EXPOSE 8081# 入口&#xff0c;java项目的启动命令 ENTRYPOINT java -jar…

开发ros一定要买树莓派吗?

结论&#xff1a;开发ros不一定要买树莓派&#xff0c;但是买一个会更方便&#xff0c;市场价410元/块&#xff1b; 开发ros机器人的时候&#xff0c;分为上位机和下位机2个控制中心&#xff0c; 其中下位机基本就是用STM32控制一个驱动电机。负责这个运动方向和速度。&#…

算法通关村第五关-白银挑战实现队列

大纲 队列基础队列的基本概念和基本特征实现队列队列的基本操作Java中的队列 队列基础 队列的基本概念和基本特征 队列的特点是节点的排队次序和出队次序按入队时间先后确定&#xff0c;即先入队者先出队&#xff0c;后入队者后出队&#xff0c;即我们常说的FIFO(first in fi…

感受野(Receptive Field)理解和计算

[Toc](感受野(Receptive Filed)的理解和计算) 感受野定义 在卷积神经网络中&#xff0c;感受野(Receptive Filed)是经过神经网络后生成的指特征图上的某个像素点所对应输入图像的区域。 针对上面的图&#xff0c;经过conv2 卷积神经网络后&#xff0c;生成了22 的特征图&…

微软曝光!ChatGPT 真实参数只有 200 亿?大模型评测基准已经失去意义?丨 RTE 开发者日报 Vol.76

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

【Cheat Engine7.5】基础教程第一关(STEP3)

文章目录 一、STEP3练习1、打开文件2、简介&#xff08;2种解决方法&#xff09;2.1、第一种解决方法(未知的初始值)2.1.1、未知的初始值2.1.2、点击打我&#xff0c;发现数值减少2&#xff0c;值在变小2.1.3、选择数值减少了多少&#xff0c;针对性搜索2.1.4、继续上一次反复操…

竞赛 深度学习火车票识别系统

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 图像识别 火车票识别系统 该项目较为新颖&#xff0c;适…

springboot+vue跨域请求使用方法

这里写目录标题 一、所谓跨域:二、不做任何处理三、解决跨域请求案例 一案例 二 一、所谓跨域: 在前后端分离的项目中&#xff0c;前台一个服务&#xff0c;后台一个服务。 前台的一个Axios请求打进来&#xff0c;要访问后台Tomcat服务器Restful接口 浏览器出于安全的考虑&…

“泰山众筹:引爆全球的财富狂潮!“

想象一下&#xff0c;你手中的白酒不再只是简单的饮品&#xff0c;而是一份珍贵的投资&#xff0c;一份充满惊喜的冒险&#xff0c;一份财富的种子&#xff01;在这个神奇的时刻&#xff0c;让我们一起探索泰山众筹模式的魅力&#xff01; 在传统的投资领域&#xff0c;你是否…

跨国传输的常见问题与对应解决方案

在今天的全球化时代&#xff0c;跨国数据传输已经成为一个不可或缺的需求。不论是个人还是企业&#xff0c;都需要通过网络将文件或数据从一个国家传输到另一个国家&#xff0c;以实现信息共享、协作、备份等目的。然而&#xff0c;跨国数据传输并不是一项容易的任务&#xff0…

我应该删除低质量页面以提高Google排名吗?

为什么考虑删除低质量页面&#xff1f; 上个月&#xff0c;根据Google的搜索团队John Mueller和Gary Illyes在 “Search Off the Record”播客中的讨论&#xff0c;质量是影响搜索的几乎每一个方面的关键因素。 虽然高质量的内容不能保证高排名&#xff0c;但它可以影响Googl…

三相电表逆相序是由于负载造成的吗

大家好&#xff0c;最近有蛮多客户问三相电表逆相序是由于负载造成的吗&#xff1f;那么答案是&#xff1a;是的&#xff0c;但是负载只是导致三相电表出现逆向序的原因之一&#xff0c;下面&#xff0c;小编来带大家一起了解下三相电表出现逆相序的原因有哪些&#xff0c;一起…