数据结构基础:链表操作入门

数据结构基础:链表操作入门

  • 数据结构基础:链表操作入门
    • 链表的基本概念
    • 链表的基本操作
      • 输出链表
      • 插入节点
      • 删除节点
      • 查找值
    • 完整的链表操作示例
    • 结语

数据结构基础:链表操作入门

在计算机科学中,数据结构是组织和存储数据的方式,它对程序的执行效率有着至关重要的影响。链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。在本文中,我们将通过C++语言探讨链表的基本概念和操作。

链表的基本概念

链表中的每个节点通常包含两个部分:存储数据的 val 和指向下一个节点的 next 指针。在单链表中,每个节点只有一个指向后续节点的指针。这是链表节点的基本结构:

struct ListNode {int val;ListNode *next;ListNode(int x): val(x), next(NULL) {}
};

链表的基本操作

输出链表

首先,我们需要一种方法来输出链表中的所有元素,以便于观察链表的内容。以下是输出链表的函数:

void print(ListNode *n) {ListNode *p = n;while(p != NULL) {cout << p->val << "->";p = p->next;}cout << endl;
}

插入节点

在链表中插入新节点是一个常见的操作。我们可以在链表的任意位置插入一个新节点:

void insert(ListNode *n, int val) {ListNode *p = new ListNode(val);p->next = n->next;n->next = p;
}

删除节点

删除操作涉及找到特定节点并将其从链表中移除。以下是删除节点的函数:

void remove(ListNode *n) {if(n->next == NULL) {return;}ListNode *t = n->next;n->val = t->val;n->next = t->next;delete(t);
}

查找值

在链表中查找特定值的位置也是一个基本操作。以下是查找函数的实现:

int find(ListNode *n, int val) {int index = 1;while(n != NULL) {if(n->val == val) {return index;} else {n = n->next;index++;}}return -1;
}

完整的链表操作示例

main 函数中,我们创建了一个简单的链表,并演示了如何进行插入、删除和查找操作:

int main() {ListNode *n0 = new ListNode(1);ListNode *n1 = new ListNode(2);// ... 其他节点创建和链接// 输出链表print(n0);// 在链表中插入节点insert(n0, 666);print(n0);// 删除链表中的节点remove(n0);print(n0);// 查找节点cout << find(n0, 2) << endl;cout << find(n0, 8888) << endl;return 0;
}

结语

链表是一种强大且灵活的数据结构,它在内存分配和动态数据存储方面具有优势。理解链表的工作原理和操作对于任何学习计算机科学的学生或编程爱好者都是基础且必要的。通过本文的示例和解释,读者应该能够对链表有一个基本的了解,并能够开始在自己的程序中实现和使用链表。


本文适合青少年学生和编程教师作为学习数据结构链表知识的入门材料。通过实际的代码示例,读者可以更容易地理解链表的工作原理和操作方法。希望本文能够帮助你在编程的道路上更进一步!

完整代码:

#include<bits/stdc++.h>
using namespace std;
struct ListNode{	//链表节点结构体 int val; 		//值 ListNode *next; //节点指针ListNode(int x):val(x),next(NULL){}  //构造函数,使用链表初始化 
}; 
//1.输出链表 
void print(ListNode *n){ListNode *p = n;while(p!=NULL){ 		//当链表不为空 cout<<p->val<<"->"; //输出节点的值 p = p->next; 		//更新p指针指向 }cout<<endl; 
}//2.插入节点 
void insert(ListNode *n, int val){ListNode *p = new ListNode(val); //初始化p节点ListNode *t = n->next; //t指向 n的下一个节点p->next = t; //p的下一个节点是tn->next = p; //n的下一个节点就是p 
}//3.删除节点
void remove(ListNode *n){if(n->next==NULL){return ;}//开始删除ListNode *t = n->next; //t指向 n的下一个节点n->val = t->val; 	//后面的节点值往前推一位n->next = t->next; //节点也往前推一位 delete(t); 		  //删除临时节点,释放空间 
} //4.查找值 
int find(ListNode *n,int val){int index = 1; 			//从第一个节点位置查while(n!=NULL){if(n->val==val){   //节点值==查值 return index; //返回位置 }else{n = n->next;  //节点后移 index++; 	 //位置+1 } }return -1; //查不到,返回-1 
} int main(){// n0=1 n1=2 n2=3 n3=5 n4=6 ListNode *n0 = new ListNode(1);ListNode *n1 = new ListNode(2);ListNode *n2 = new ListNode(3);ListNode *n3 = new ListNode(5);ListNode *n4 = new ListNode(6);//节点连接:1->2->3->5->6 n0->next = n1;n1->next = n2;n2->next = n3;n3->next = n4;//1.输出函数:从n0节点往后输出链表 print(n0); //2.插入:从n0节点位置后插入节点 insert(n0,666);print(n0); //3.删除: 删除n0节点remove(n0);print(n0); //4.查找值在不在链表中,在输出位置,不在输出-1cout<<find(n0,2)<<endl; cout<<find(n0,8888)<<endl; return 0;
}

在这里插入图片描述

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

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

相关文章

哪些因素影响了PCB电路板切割精度?

PCB电路板切割是电子制造过程中一个至关重要的环节&#xff0c;其精度对后续工序的质量和效率具有决定性影响。因此&#xff0c;了解影响PCB电路板切割精度的原因&#xff0c;对于提高电子产品的质量和生产效率具有重要意义。 1. PCB分板机稳定性 PCB分板机的性能直接影响到切…

docker内实现多机多卡分布式训练

docker内实现多机多卡分布式训练 1. 多台docker宿主机网络配置2. 创建overlay 网络3. 注意 1. 多台docker宿主机网络配置 https://docs.docker.com/network/overlay/ 这里需要创建overlay网络使得多台宿主机的容器可以通过网络连接 初始化swarm集群&#xff0c;并设置主节点&a…

Tensorflow2.0笔记 - BatchNormalization

本笔记记录BN层相关的代码。关于BatchNormalization&#xff0c;可以自行百度&#xff0c;或参考这里&#xff1a; 一文读懂Batch Normalization - 知乎神经网络基础系列&#xff1a; 《深度学习中常见激活函数的原理和特点》《过拟合: dropout原理和在模型中的多种应用》深度…

【JavaEE多线程】线程中断 interrupt()

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

StarRocks最佳实践经验

目录 一、部署 1.1 容量规划 1.2 基础环境配置 1.3 机器配置 1.3.1 FE节点 1.3.2 BE节点 1.4 部署方案 二、建模 2.1 建表规范 2.2 模型选择 2.3 排序列和前缀索引选择 2.4 分区选择 2.5 分桶选择 2.6 字段类型 2.7 索引选择 2.7.1 Bitmap索引 2.7.2 Bloom fi…

debian8安装后无法使用博通无线网卡BCM43224,提示缺少固件

装完debian8后发现主机自带的无线网卡不能使用,并且在安装系统过程中会有提示: 您的一些硬件需要非自由固件文件才能运转。固件可以从移动介质加载。 缺失的固件文件是:brcm/brcm43xx-0.fw我没有理会,装完后发现无线网卡不能用 需要安装 broadcom-wl 查看网卡芯片型号 …

笔记本电脑耗电和发热比较厉害怎么处理

工作中会遇到有同事反馈笔记本电脑耗电和发热比较厉害&#xff0c;主要检查以下几个地方 1、CPU频率 很多人觉得是cpu使用率高就代表电脑跑得快&#xff0c;发热量就大&#xff0c;其实不是的&#xff0c;主要是看的cpu频率&#xff0c;频率越高&#xff0c;电脑发热量越大。如…

(N-151)基于微信小程序校园学生活动管理平台

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatisplus 本系统分微信小程序和管理后台两部分&am…

探索开源的容器引擎--------------Docker容器操作

目录 一、Docker 容器操作 1.1容器创建 1.2查看容器的运行状态 1.3启动容器 1.4创建并启动容器 1.4.1当利用 docker run 来创建容器时&#xff0c; Docker 在后台的标准运行过程是&#xff1a; 1.4.2在后台持续运行 docker run 创建的容器 1.4.3创建容器并持续运行容器…

免费开源线上社交交友婚恋系统平台 可打包小程序 支持二开 源码交付!

婚姻是人类社会中最重要的关系之一&#xff0c;它对个人和家庭都有着深远的影响。然而&#xff0c;在现代社会的快节奏生活中&#xff0c;找到真爱变得越来越困难。在这个时候&#xff0c;婚恋产品应运而生&#xff0c;为人们提供了寻找真爱的新途径。 1.拓宽人际交流圈子 现代…

手撕netty源码(一)- NioEventLoopGroup

文章目录 前言一、NIO 与 netty二、NioEventLoopGroup 对象的创建过程2.1 创建流程图 前言 本文是手撕netty源码系列的开篇文章&#xff0c;会先介绍一下netty对NIO关键代码的封装位置&#xff0c;主要介绍 NioEventLoopGroup 对象的创建过程&#xff0c;看看new一个对象可以做…

【国产替代】航空电子通信总线航空电子通信总线产品为MIL-STD-1553和ARINC 429等协议提供原生支持

航空电子通信总线 航空电子通信总线产品为MIL-STD-1553和ARINC 429等协议提供原生支持。这些产品用于进行航空电子应用所需的开发、生产和系统测试。 PXIe&#xff0c;2通道PXI ARINC-664接口模块 AIM ARINC-664具有板载处理器&#xff0c;可自动处理所有与协议相关的活动&…

界面组件DevExpress Blazor UI v23.2 - 支持.NET 8、全新的项目模版

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…

(五)AB测试及两个案例 学习简要笔记 #统计学 #CDA学习打卡

目录 一. AB测试简介 1&#xff09;假设检验的一般步骤 2&#xff09;基于假设检验的AB测试步骤 二. 案例1&#xff1a;使用基于均值的假设检验进行AB测试 1&#xff09;原始数据 2&#xff09;提出原假设H0和备择假设H1 3&#xff09;使用均值之差的t检验&#xff0c;计…

AI视频改字个性化祝福豪车装X系统uniapp前端开源源码下载

装X系统源码简介 创意无限&#xff01;AI视频改字祝福&#xff0c;豪车装X系统源码开源&#xff0c;打造个性化祝福视频不再难&#xff01; 想要为你的朋友或家人送上一份特别的祝福&#xff0c;让他们感受到你的真诚与关怀吗&#xff1f;现在&#xff0c; 通过开源的AI视频…

【深度学习】yolo-World,数据标注,zeroshot,目标检测

仓库&#xff1a;https://github.com/AILab-CVC/YOLO-World 下载权重&#xff1a; 仓库下载和环境设置 下载仓库&#xff1a;使用以下命令从 GitHub 上克隆仓库&#xff1a; git clone --recursive https://github.com/AILab-CVC/YOLO-World.git创建并激活环境&#xff1a…

scipy csr_matrix: understand indptr

See https://stackoverflow.com/questions/52299420/scipy-csr-matrix-understand-indptr

架构师核心-云计算云上实战(云计算基础、云服务器ECS、云设施实战、云上高并发Web架构)

文章目录 云计算基础1. 概念1. 云平台优势2. 公有云3. 私有云4. IaaS、PaaS、SaaS 2. 云设施1. 概览2. 核心组件 云服务器ECS1. ECS介绍1. 简介2. 组件3. 概念4. 图解5. 规格6. 场景 2. ECS服务器开通1. 开通服务器2. 连接服务器 3. 云部署准备1. 1Panel介绍2. 安装1Panel3.安全…

梯度,hesse阵与Jacobi矩阵

分清楚三个量的含义和计算方法。 梯度 表征的是一个列向量&#xff0c;是相对于某个方向而言的&#xff0c;但是某个方向上可能有多个变量&#xff0c;所以梯度不是简单的直接求偏导&#xff0c;并且说了&#xff0c;它是一个列向量&#xff0c;所以&#xff0c; 我们设 f : …

ArcGIS Pro 和 Python — 分析全球主要城市中心的土地覆盖变化科林

第一步——设置工作环境 1–0. 地理数据库 在下载任何数据之前,我将创建几个地理数据库,在其中保存和存储所有数据以及我将创建的后续图层。将为我要分析的五个城市中的每一个创建一个地理数据库,并将其命名为: “Phoenix.gdb” “Singapore.gdb” “Berlin.gdb” “B…