C++---链表

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};//尾节点,指针域为nullptrStudent b = { "t2",27,&c };Student a = { "t1",22,&b };Student* head = &a; //头指针,指向a,无值

1.3、链表数据的遍历

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

	//定义一个指针来指向headStudent *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.mzph.cn/news/81955.shtml

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

相关文章

网络编程 day1

1->x.mind网络编程基础 2->简述字节序的概念&#xff0c;并用共用体&#xff08;联合体&#xff09;的方式计算本机的字节序 1.字节序是指不同类型的CPU主机&#xff0c;内存存储多字节整数序列的方式 2.小端字节序&#xff1a;低序字节存储在低地址上 3.大端字节序&a…

定制化图标——Element UI 组件图标替换指南

本篇博客将介绍如何在使用 Element UI 组件时对原生图标进行定制化替换&#xff0c;提供了适用于满足个性化需求的方法和技巧。 引言 Element UI 是一款基于 Vue.js 的流行 UI 组件库&#xff0c;在前端开发中得到广泛应用。然而&#xff0c;在使用 Element UI 的组件时&#…

中小型教育机构这样做,让你轻松抓住受众注意力

教育一直都是家长对于孩子最关心的事情&#xff0c;对于部分家庭来说&#xff0c;教育支出占整个家庭支出的50%左右。 而软文作为目前效果比较明显而且性价高的推广方式&#xff0c;也很适合教育培训行业&#xff0c;因为它能让潜在客户可以清楚地了解产品的特性&#xff0c;感…

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap

前言 除了基本的数组&#xff0c;还有其他高级的数据结构&#xff0c;用于更复杂的数据存储和检索需求。其中&#xff0c;HashMap 是 Java 集合框架中的一部分&#xff0c;用于存储键值对&#xff08;key-value pairs&#xff09;。HashMap 允许我们通过键来快速查找和检索值&…

004-Windows下开发环境搭建

Windows下开发环境搭建 文章目录 Windows下开发环境搭建项目介绍版本控制工具Git 与 SVNWindow下安装Git Qt 开发工具静态编译Qt环境安装 串口模拟器比较工具SQLite 数据库查看小工具预告 关键字&#xff1a; Qt、 Qml、 开发环境、 Windows、 C 项目介绍 欢迎来到我们的 …

数据库操作-DML/DQL

数据库操作-DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09; 修改数据&#xff08;UPDATE&#xff09; 删除数据&#xff08;DELETE&#xff09; 增加(ins…

python 异常

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

【业务功能118】微服务-springcloud-springboot-Kubernetes集群-k8s集群-KubeSphere-OpenELB部署及应用

OpenELB部署及应用 一、OpenELB介绍 网址&#xff1a; openelb.io OpenELB 是一个开源的云原生负载均衡器实现&#xff0c;可以在基于裸金属服务器、边缘以及虚拟化的 Kubernetes 环境中使用 LoadBalancer 类型的 Service 对外暴露服务。OpenELB 项目最初由 KubeSphere 社区发…

【Seata】05 - Seata Saga 模式简单整理、Docker 部署 Nacos 单机(基于 Jpom)相关配置

文章目录 前言参考目录Saga 模式知识点简单整理1、适用场景、优缺点2、Saga 模式的使用3、可能出现的问题以及解决方法 Docker 部署 Nacos 单机&#xff08;基于 Jpom&#xff09;步骤 1&#xff1a;拉取镜像步骤 2&#xff1a;构建容器步骤 3&#xff1a;Nacos 设置 Seata 配置…

自动化测试工具slelnium的初体验

1.slelnium介绍 1.1 一个Web的自动化测试工具&#xff0c;最初是为网站自动化测试而开发的。 1.2 可以直接运行在浏览器上&#xff0c;它支持所有主流的浏览器&#xff08;包括PhantomJS这些无界面的浏览器&#xff09;&#xff0c;可以接收指令&#xff0c;让浏览器自动加载页…

23062QTday2

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

ROS 入门

目录 简介 ROS诞生背景 ROS的设计目标 ROS与ROS2 安装ROS 1.配置ubuntu的软件和更新 2.设置安装源 3.设置key 4.安装 5.配置环境变量 安装可能出现的问题 安装构建依赖 卸载 ROS架构 1.设计者 2.维护者 3. 立足系统架构: ROS 可以划分为三层 ROS通信机制 话…

SQL中的PowerDesigner逐步深入提问,你能掌握多少?

你提到了有PowerDesigner操作经验&#xff0c;请解释一下PowerDesigner是什么&#xff0c;以及它在数据库设计和开发中的作用是什么&#xff1f; 标准回答&#xff1a; PowerDesigner是一种数据库建模和设计工具&#xff0c;它用于创建数据库模型、设计表结构、定义关系和生成…

【漏洞复现】Smanga未授权远程代码执行漏洞(CVE-2023-36076) 附加SQL注入+任意文件读取

文章目录 前言声明一、产品简介一、漏洞描述二、漏洞等级三、影响范围四、漏洞复现五、修复建议六、附加漏洞漏洞一、SQL注入漏洞二、任意文件读取 前言 Smanga存在未授权远程代码执行漏洞,攻击者可在目标主机执行任意命令,获取服务器权限。 声明 请勿利用文章内的相关技术从…

windows彻底卸载unity

1.控制面板卸载 双击打开桌面的控制面板&#xff0c;选择卸载程序&#xff0c;选中Unity和UnityHub右击卸载。 2.清除unity的注册表 在运行中输入“regedit”双击打开注册表界面 删除 HKEY_CURRENT_USER\Software\Unity 下所有项 删除 HKEY_CURRENT_USER\Software\Unity Tec…

电脑怎么取消磁盘分区?

有时候&#xff0c;我们的电脑会出现一个磁盘爆满&#xff0c;但另一个却空着&#xff0c;这时我们可以通过取消磁盘分区来进行调整&#xff0c;那么&#xff0c;这该怎么操作呢&#xff1f;下面我们就来了解一下。 磁盘管理取消磁盘分区 磁盘管理是Windows自带的磁盘管理工具…

BMS电池管理系统的蓝牙芯片 国产高性能 低功耗蓝牙Soc芯片PHY6222

电池管理系统是对电池进行监控与控制的系统&#xff0c;将采集的电池信息实时反馈给用户&#xff0c;同时根据采集的信息调节参数&#xff0c;充分发挥电池的性能。但是&#xff0c;前技术中&#xff0c;在管理多个电池时&#xff0c;需要人员现场调试与设置&#xff0c;导致其…

uniapp h5网页打开白屏

修改了默认基本运行路径&#xff0c;然后直接打开index.html的情况下是会这样&#xff0c;放在nginx服务器上运行就ok了。 把默认的./ 路径修改了&#xff1a;/cloudh5 nginx html目录下放子网站 &#xff1a;/cloudh5&#xff1a;

6-2 pytorch中训练模型的3种方法

Pytorch通常需要用户编写自定义训练循环&#xff0c;训练循环的代码风格因人而异。&#xff08;养成自己的习惯&#xff09; 有3类典型的训练循环代码风格&#xff1a;脚本形式训练循环&#xff0c;函数形式训练循环&#xff0c;类形式训练循环。 下面以minist数据集的多分类模…

Spring Boot集成Redis实现数据缓存

&#x1f33f;欢迎来到衍生星球的CSDN博文&#x1f33f; &#x1f341;本文主要学习Spring Boot集成Redis实现数据缓存 &#x1f341; &#x1f331;我是衍生星球&#xff0c;一个从事集成开发的打工人&#x1f331; ⭐️喜欢的朋友可以关注一下&#x1faf0;&#x1faf0;&…