C++---链表

news2024/11/25 22:52:44

1、链表

1.1、链表的结构

image-20230918180750132

  • 每个链表开头都有一个头指针Head
  • 尾节点的指针域为NULL,用于判断此列表是否结束
    • 如果一个链表开始就为NULL,那么该链表为空链表
  • 链表中的先后不代表在真实内存中的位置,只是单纯的逻辑上关系

1.2、创建链表

  1. 我们首先利用结构体创建一个Student的结构体
//利用链表创建3个学生的信息,学生信息包括姓名和年龄
struct Student
{
	char name[20];
	int age;
	//这里存放的下个节点的地址
	Student *next;
};
  1. 接着我们给我们的节点赋值,跟着上面的图,我们知道需要一个头节点(无数据,只存地址),一个尾节点(有数据,地址为NULL)
	Student c = { "t3",21, nullptr};//尾节点,指针域为nullptr
	Student b = { "t2",27,&c };
	Student a = { "t1",22,&b };
	Student* head = &a; //头指针,指向a,无值

1.3、链表数据的遍历

创建完链表后,我们来输出一下内容,那么我们就需要链表a的地址,然后输出完当前内容后,将指针指向下一个地址

	//定义一个指针来指向head
	Student *pointer = head;
	//循环到尾节点(nullptr)时结束
	while (pointer)
	{
		cout << pointer->name << " " << pointer->age << endl;
		//输出完后指向下一个
		pointer = pointer->next;
	}

image-20230918184725137

1.4、链表的查找

  1. 我们查找一下t2这个人,并返回他的年龄
	while (pointer)
	{
		if (pointer->name=="t2")
		{
			cout << pointer->age << endl;
			break;
		}
		pointer = pointer->next;
	}
	if (pointer==nullptr)
	{
		cout << "没有找到此人" << endl;
	}

1.5、链表的插入

我们首先手动新加一条数据

Student d = { "t4",21,nullptr };

​ 区别与数组,我们不需要移动任何数据,只需要将要插入的地方的前一项地址指向插入的数据,插入的数据再指向后一条数据即可(PS:灵魂画手,不要介意)

image-20230918195201994

​ 这里需要注意一点,先指向C,不然早断开C会找不到C的地址,也就是E的指针域要先指向C的地址,防止丢失。

​ 那么我们就在t2的后面插入一条数据

	//before指向前一条数据
	//pointer指向后一条数据
	Student* before = head;
	Student *pointer = before->next;

	while (before)
	{
		if (before->name=="t2")
		{
			d.next = pointer; //赋值&c的地址
			before->next = &d; //t2断开c的地址,链接d的地址
			break;
		}
		//如果不匹配,就让俩个指针往后走
		before = pointer;
		pointer = before->next;
	}

image-20230918202035976

1.6、链表的删除

那么删除就只需要将要被删除的节点指向的地址,给到前一个节点。

image-20230918202535567

那我们就删除上面新加的t4

	before = head;
	pointer = before->next;
	//这里需要注意是因为要删除后一个,所以pointer作为循环条件
	while (pointer)
	{
		if (pointer->name == "t4")
		{
			before->next = pointer->next;
			break;
		}
		before = pointer;
		pointer = pointer->next;
	}

image-20230918203247697

2、链表和数组的区别

数组链表
内存占用连续内存灵活,无限制
元素类型相同类型可以相同,可以不同
组织形式在内存中连续排序各节点在内存中彼此分散,靠指针联系
插入删除元素需要遍历只修改某个或几个节点的指针

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

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

相关文章

Spring常见面试题总结

什么是Spring Spring是一个轻量级Java开发框架&#xff0c;目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题&#xff0c;以提高开发效率。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c;为开发Java应用程序…

iPhone升级iOS17后待机模式不能用、没反应?这7个方法快速解决!

iPhone待机模式是苹果为iOS17版本加入的新功能之一&#xff0c;当我们不用iPhone 时&#xff0c;能将它随手放在一旁&#xff0c;并以横向全屏的方式观看时钟与App小工具资讯等。 不过有些果粉发现他们的iPhone待机模式不能用、没反应&#xff0c;照着步骤操作也无法进入iPhon…

MX6LL控制LED设备

注&#xff1a;本篇基于野火IMX6LL PRO开发板 一.什么是驱动程序 驱动程序&#xff08;Driver&#xff09;是一种软件&#xff0c;用于充当操作系统与硬件设备之间的桥梁&#xff0c;使它们能够互相通信和交互。驱动程序的主要功能是提供一个标准化的接口&#xff0c;使操作系…

从0搭建夜莺v6基础监控告警系统(一):基础服务安装

文章目录 1. 写在前面1.1. 官方文档传送门1.2. 部署环境 2. 服务安装2.1. 基础设置2.2. 安装中间件2.3. 安装 nightingale-v62.4. 安装 VictoriaMetrics2.5. 安装 Categraf 3. 部署总结3.1. 安装总结 1. 写在前面 1.1. 官方文档传送门 项目介绍 架构介绍 仪表盘 黄埔营培训计…

来袭!SOLIDWORKS 2024 主要增强功能

在SOLIDWORKS软件使用过程中&#xff0c;我们知道您创建了出色的设计&#xff0c;您的出色设计也会得到构建。为了简化和加快从概念到制造产品的产品开发流程&#xff0c;SOLIDWORKS 2024 包含用户驱动的全新增强功能&#xff0c;重点关注&#xff1a; • 提高工作智能化程度。…

怎么在便携式手持嵌入式设备中实现安全的数字数据传输

为了实施附加的安全性&#xff0c;一些密码算法也可以指定一组不应从设备公开的常数值。这些存储在设备中的&#xff0c;需要防止未经授权暴露的秘密密钥和秘密值在一系列文章中被称为“秘密密钥”。 秘密密钥存储在设备内部&#xff0c;甚至在设备的整个生命周期中都存在。设…

浅谈双十一背后的支付宝LDC架构和其CAP分析

本人汤波&#xff0c;superthem.com 圆领超级个体创始人&#xff0c;Github page地址&#xff1a;https://tbwork.github.io/ 看到很多人在盗用我的文章&#xff0c;还标记成原创&#xff0c;进行收费&#xff0c;非常令人作呕。 我的所有技术文章全部免费阅读&#xff0c;大家…

在Python中 作用域与命名空间的坑

前言&#xff1a; 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 1. 命名空间 1.1 什么是命名空间 Namespace命名空间&#xff0c;也称名字空间&#xff0c;是从名字到对象的映射。 Python中&#xff0c;大…

VMware17 不可恢复错误mks解决方案

用的虚拟机VMware17版本&#xff0c;然后运行带HDR的unity程序&#xff0c;结果报错 网上找了很多解决方案&#xff0c;都没用。毕竟需要在不放弃虚拟机3D加速的情况下运行。 最终皇天不负有心人&#xff0c;亲测有效的方法&#xff1a; 在虚拟机名字.vmx文件里添加以下2行&a…

【整理】难得的中文开源数据集

搞大模型训练&#xff0c;最重要的就是高质量的数据集。 得数据者得天下。全球最大的AI开源社区Huggingface上&#xff0c;已经有5万多的开源数据集了&#xff0c;其中涉及中文的数据集只有区区可怜的151个。中国的AI产业要迎头赶上&#xff0c;中文的数据集是最大的短板之一。…

IOTE2023物联网展最新快讯|央企入驻,找物联网平台这一家就够了

IOTE 2023第20届国际物联网展深圳站即将于9月20-22日在深圳国际会展中心&#xff08;宝安&#xff09;启幕&#xff01;航天科技控股集团股份有限公司旗下AIRIOT物联网平台亮相【工业物联网展区9B31-1展位】。 AIRIOT物联网平台定位于通用型物联网技术框架产品&#xff0c;以软…

oracle创建数据库以及用户,并导入dmp格式数据

oracle创建数据库以及用户&#xff0c;并导入dmp格式数据 安装可参考之前的文章https://blog.csdn.net/qq_43421954/article/details/132717546?spm1001.2014.3001.5501 首先创建表空间&#xff08;也就是其他数据库所谓的数据库&#xff09; 使用的是navicat,连接配置可以参…

python 异常

1.捕获异常 2.密码爆破 3.

Feign远程调用丢失请求头

前言 我们在写服务端项目的时候&#xff0c;总会限制对某些资源的访问&#xff0c;最常见的就是要求用户先登录才能访问资源&#xff0c;当用户登录后就会将此次会话信息保存进session&#xff0c;同时返回给浏览器指定的cookie键值&#xff0c;下次浏览器再次访问&#xff0c…

【虚拟现实】2023年VR技术的10个应用行业

1.医疗保健 现代医疗保健的培训方式离不开VR虚拟现实。。由于医疗行业的特殊性&#xff0c;不允许拿大量的病人来练手&#xff0c;但医疗又非常注重实践&#xff0c;一些新手医生就缺乏锻炼的机会&#xff0c;而VR虚拟现实技术很好的解决了这一问题。医生可以在高清晰、低延时…

【C++】搜索二叉树底层实现

目录 一&#xff0c;概念 二&#xff0c;实现分析 1. 插入 &#xff08;1.&#xff09;非递归版本 &#xff08;2.&#xff09;递归版本 2. 打印搜索二叉树 3.查找函数 &#xff08;1.&#xff09;非递归版本 &#xff08;2.&#xff09;递归版本 4. 删除函数&#x…

【Linux-Day13-生产者消费者模型】

生产者消费者模型 生产者消费者问题概述 生产者/消费者问题&#xff0c;也被称作有限缓冲问题。可以描述为&#xff1a;两个或者更多的线程共享同一个缓冲 区&#xff0c;其中一个或多个线程作为“生产者”会不断地向缓冲区中添加数据&#xff0c;另一个或者多个线程作为“消…

基于CNN-LSTM的时序预测MATLAB实战

一、算法原理 1.1 CNN原理 卷积神经网络具有局部连接、权值共享和空间相关等特性。卷积神经网络结构包含卷积层、激活层和池化层。 &#xff08;a&#xff09;二维卷积层将滑动卷积滤波器应用于输入。该层通过沿输入垂直和水平方向 移动滤波器对输入进行卷积&#xff0c;并计…

阿里云无影电脑:免费体验无影云电脑3个月

阿里云无影云电脑免费领取流程&#xff0c;免费无影云电脑配置为4核8G&#xff0c;可以免费使用3个月&#xff0c;阿里云百科分享阿里云无影云电脑&#xff08;云桌面&#xff09;免费申请入口、申请流程及免费使用限制条件说明&#xff1a; 目录 阿里云无影云电脑免费申请入…

汉威科技亮相上海传感器展并发表主题演讲,智能传感器大有可为

9月15日&#xff0c;第8届中国&#xff08;上海&#xff09;国际传感器技术与应用展览会圆满落幕&#xff0c;该展会吸引了逾400家传感领域国内外的企业、100余家专业传感应用单位、500余位传感大咖共同参与&#xff0c;展会观众达30000人。作为全球三大传感器展之一的盛会&…