C++链表操作入门

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

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

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

在计算机科学中,数据结构是组织和存储数据的方式,它对程序的执行效率有着至关重要的影响。链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。在本文中,我们将通过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/diannao/3999.shtml

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

相关文章

【Linux学习】​​学习Linux的准备工作和Linux的基本指令

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

C语言:插入排序

插入排序 1.解释2.步骤3.举例分析示例结果分析 1.解释 插入排序是一种简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采…

Rust的Clone

Clone 是 Rust 编程语言中一个核心特质&#xff08;trait&#xff09;&#xff0c;位于标准库中的 std::clone 模块。Clone trait 定义了类型如何安全、明确地创建其值的深拷贝&#xff08;deep copy&#xff09;。实现 Clone 的类型可以使用 .clone() 方法创建现有实例的完全独…

直播带货秘籍:人气飙升的成交话术大揭秘

在营销的广阔天地中&#xff0c;种草话术如同一把锐利的剑&#xff0c;能精准切入消费者的心智。选择恰当的切入点是关键&#xff0c;它可能是一个普遍的生活场景&#xff0c;一个共同的消费痛点&#xff0c;或是一处人们向往的心理寄托。通过细致的观察和分析&#xff0c;我们…

Hutool工具包 常见类使用

JSON工具-JSONUtil hutool工具-----JSON工具-JSONUtil-CSDN博客 BEAN工具-BeanUtil Hutool工具包中 BeanUtil中主要方法 beanToMap &#xff0c;toBean&#xff0c;copyProperties&#xff0c;fillBeanWithMap 的使用-CSDN博客

Nest.js项目小结2

1.配置了项目路径别名 tsconfig.json {"compilerOptions": {"module": "commonjs","declaration": true,"removeComments": true,"emitDecoratorMetadata": true,"experimentalDecorators": true,&quo…

图纸文件如何实现全加密,在透明加密的基础上实现全加密功能

最近不断在网络上有人提出来为什么我公司已经用了图纸加密软件&#xff0c;还是会出来图纸泄露的情况&#xff0c;他们是如何泄露出去的呢&#xff1f;我们知道市场上现在有很多图纸加密软件&#xff0c;都是采用驱动层透明加密技术&#xff0c;每家公司在介绍方案时&#xff0…

Markdown 列表语法

有序列表 要创建有序列表&#xff0c;请在每个列表项前添加数字并紧跟一个英文句点。数字不必按数学顺序排列&#xff0c;但是列表应当以数字 1 起始。 Markdown语法HTML预览效果1. First item 2. Second item 3. Third item 4. Fourth item<ol> <li>First item&…

Apollo 7周年大会:百度智能驾驶的展望与未来

本心、输入输出、结果 文章目录 Apollo 7周年大会&#xff1a;百度智能驾驶的展望与未来前言百度集团副总裁、智能驾驶事业群组总裁王云鹏发言 直播回放大会相关内容先了解 Apollo&#xfeff;开放平台 9.0架构图 发布产品Apollo 定义自己对于智能化的认知百度集团副总裁 王云鹏…

沉浸式推理乐趣:体验线上剧本杀小程序的魅力

在这个信息爆炸的时代&#xff0c;人们的娱乐方式也在不断地推陈出新。其中&#xff0c;线上剧本杀小程序以其独特的沉浸式推理乐趣&#xff0c;成为了许多人的新宠。它不仅让我们在闲暇之余享受到了推理的快乐&#xff0c;更让我们在虚拟的世界里感受到了人性的复杂与多彩。 线…

AI新闻速递:揭秘本周科技界最热的AI创新与发展

兄弟朋友们&#xff0c;本周的AI领域又迎来了一系列激动人心的进展。在这个快速变化的时代&#xff0c;不会利用AI的人&#xff0c;就像在数字化高速公路上步行的旅行者&#xff0c;眼看着同行者驾驶着智能汽车绝尘而去&#xff0c;而自己却束手无策。 1. Adobe Firefly 3&…

Jsoup爬虫

1 Jsoup简介 Jsoup是一个Java库&#xff0c;它简化了使用真实世界的HTML和XML。它提供了一个易于使用的API&#xff0c;用于使用DOM API方法、CSS和xpath选择器进行URL获取、数据解析、提取和操作。 Jsoup实现了WHATWG HTML5规范&#xff0c;并将HTML解析为与现代浏览器相同的D…

Java Spring中的事务管理是如何实现的?

Spring框架中的事务管理是其核心特性之一&#xff0c;它允许开发者以声明式或编程式的方式控制数据库事务。这确保了数据的完整性和一致性&#xff0c;特别是在并发操作和多用户环境中。 Spring事务管理主要基于以下几个核心概念&#xff1a; PlatformTransactionManager&…

QT C++ QCustomPlot 简单使用

//本文描述QCustomPlot的简单使用&#xff0c; //使用QCustomPlot 画曲线分5步 //1.初始化 //2.发送 //3.接收 //4.绑定 //5.重绘 //通常单独的线程发送&#xff0c;发送线程通过emit函数或者waik函数告诉接收方&#xff0c; //接收方通常是GUI类的函数&#xff0c;把数…

go 测试和文件

go 测试和文件 需求传统测试单元测试牛刀小试总结练习文件介绍打开关闭文件读文件一次性读取文件写文件文件或文件夹是否存在文件拷贝 需求 有一个函数&#xff0c;怎样确认他运行结果是正确的&#xff1f; func addUpper(n int)int {res : 0for i : 1; i < n; i {res1}r…

Matlab绘制对数轴

Matlab绘制对数轴 在Matlab中&#xff0c;可以使用semilogx和semilogy函数分别绘制对数坐标轴和线性坐标轴的图形&#xff0c;可以使用loglog绘制双对数轴图形。 使用semilogx函数绘制对数x轴的图形示例&#xff1a; x linspace(0.1, 10, 100); % 生成从0.1到10的100个等间隔…

【基础算法总结】双指针算法二

双指针 1.有效三角形的个数2.和为S的两个数字3.和为S的两个数字4.四数之和 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.有效三角形的个数…

elasticsearch-8.1.0安装记录

目录 零、版本说明一、安装二、使用客户端访问 零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)elasticsearch elasticsearch-8.1.0-linux-x86_64一、安装 systemctl stop firewalld.servicesystemctl disable firewal…

mysql中join内外连接查询例子

文章目录 join关键字概要举例using 与 on 区别 join关键字 在MySQL中&#xff0c;JOIN 是一种用于将两个或多个表中的行联合起来的操作。 连接&#xff08;join&#xff09;就是将一张表中的行按照某个条件&#xff08;连接条件&#xff09;与另一张表中的行连接起来形成一个新…