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.hqwc.cn/news/652587.html

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

相关文章

Redis高级篇详细讲解

0.今日菜单 Redis持久化【理解】 Redis主从 Redis哨兵 Redis分片集群【运维】 单点Redis的问题 数据丢失问题&#xff1a;Redis是内存存储&#xff0c;服务重启可能会丢失数据 并发能力问题&#xff1a;单节点Redis并发能力虽然不错&#xff0c;但也无法满足如618这样的高…

构建安全高效的前端权限控制系统

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

insightface 环境配置

首先创建续集环境&#xff1a; conda create -n insightface3 python3.8 然后打开此虚拟环境&#xff1a;conda activate insightface3 然后安装&#xff1a; pip install insightface 再安装&#xff1a;pip install onnxruntime-gpu 就可以了

OV SSL证书申请指南——六步轻松搞定

OV证书的申请流程如下&#xff1a; 一 确定申请渠道 根据自己的品牌偏好&#xff0c;选择一个证书服务商&#xff0c;这里推荐JoySSL,作为国产服务商&#xff0c;除了提供Digicert、Sectigo、Geotrust、Globalsign等国际品牌证书外&#xff0c;还拥有自主品牌OV证书。在JoySSL…

微信小程序:8.WXSS

WXSS和CSS的关系 WXSS具有CSS大部分特性&#xff0c;同时&#xff0c;WXSS还对CSS进行扩充以及修改&#xff0c;适应微信小程序的开发。 与CSS相比&#xff0c;WXSS扩展的特性有&#xff1a; rpx尺寸单位imprt样式导入 rpx尺寸单位 rpx是微信小程序中独有的&#xff0c;用来…

elasticsearch 常用语法汇总

文章目录 前言elasticsearch 常用语法汇总1. 创建索引2. 检索索引信息3. 删除索引4. 文档操作4.1. 对blog_new索引指定文档ID新增4.2. 对blog_new索引不指定文档ID新增&#xff0c;随机文档ID:4.3. 获取文档4.4. 更新文档4.5. 删除文档 5. 查询5.1. 匹配查询5.2. 范围查询5.3. …

【golang学习之旅】Go 的循环结构

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 目录 系列文章for循环基本的for循环for 变 while死循环 for-range for循环 Go 只有一种循环结构&#xff1a;for 循环 基本的for循环 和C以及Java语言一样&#xf…

社区新零售:重构邻里生活圈,赋能美好未来

新时代的邻里脉动 在城市的肌理中&#xff0c;社区作为生活的基本单元&#xff0c;正经历一场由新零售引领的深刻变革。社区新零售&#xff0c;以其独特的商业模式、创新的技术手段和以人为本的服务理念&#xff0c;重新定义了社区商业的边界&#xff0c;重构了邻里生活的形态…

【算法基础实验】图论-基于DFS的连通性检测

基于DFS的连通性检测 理论基础 在图论中&#xff0c;连通分量是无向图的一个重要概念&#xff0c;特别是在处理图的结构和解析图的组成时。连通分组件表示图中的一个子图&#xff0c;在这个子图中任意两个顶点都是连通的&#xff0c;即存在一条路径可以从一个顶点到达另一个顶…

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略&#xff0c;传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下&#xff0c;海特伟业紧跟时代步伐&#xff0c;凭借其深厚…

vue实现录音并转文字功能,包括PC端web,手机端web

vue实现录音并转文字功能&#xff0c;包括PC端&#xff0c;手机端和企业微信自建应用端 不止vue&#xff0c;不限技术栈&#xff0c;vue2、vue3、react、.net以及原生js均可实现。 原理 浏览器实现录音并转文字最快捷的方法是通过Web Speech API来实现&#xff0c;这是浏览器…

Swift-31-泛型和类型操作

泛型 Swift泛型(generics) 让我们写出的类型和函数可以使用对于我们或编译器都未知的类型。 很多内建类型(包括可空类型、数组和字典)都是用泛型实现的&#xff0c;比如数组和一些集合就是用泛型方式来实现的。 一种运行时进行类型检查的技术&#xff0c;效率高但是不安全。在…