C++链表操作入门

embedded/2024/9/25 4:35:57/

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

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

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

相关文章

前端技巧——webgl快速上手

WebGL(Web Graphics Library)是一种在不需要使用插件的情况下在网页浏览器中使用的3D图形API。它是一种低级的、基于OpenGL ES的API,可以直接在网页浏览器的JavaScript中使用,用于创建和操作复杂的3D图形。 一、WebGL 的关键特点 无需插件:WebGL 完全内置于现代浏览器中…

SOLIDWORKS Electrical 3D--精准的三维布线

相信很多工程师在实际生产的时候都会遇到线材长度不准确的问题&#xff0c;从而导致线材浪费甚至整根线材报废的问题&#xff0c;这基本都是由于人工测量长度所导致的&#xff0c;因此本次和大家简单介绍一下SOLIDWORKS Electrical 3D布线的功能&#xff0c;Electrical 3D布线能…

Compose和Android View相互使用

文章目录 Compose和Android View相互使用在Compose中使用View概述简单控件复杂控件嵌入XML布局 在View中使用Compose概述在Activity中使用Compose在Fragment中使用Compose布局使用多个ComposeView 在布局中使用Compose 组合使用 Compose和Android View相互使用 在Compose中使用…

异步日志方案spdlog

异步日志方案spdlog spdlog 是一款高效的 C 日志库&#xff0c;它以其极高的性能和零成本的抽象而著称。spdlog 支持异步和同步日志记录&#xff0c;提供多种日志级别&#xff0c;并允许用户将日志输出到控制台、文件或自定义的接收器。 多线程使用和同步、异步日志没有关系是…

openAI api class 类

实用&#xff0c;我会陆续更新干货&#xff0c;不废话的 <?php require openai.class.php; $apikey "sk-proj-FXA6bazYk9D4ZsrrTPPVT3BlbkFJj6aJBZIAXYdAiFuGL13c"; $chat new class_openai($apikey); $prompt "人生很痛苦&#xff0c;怎么办"; $m…

DBdoctor产品体验报告

DBdoctor产品体验报告 一、产品介绍1.官网信息2.产品特性3.应用场景4.版本区别及功能5.如何体验 二、个人体验1.个人基本信息2.部署相关3.产品体验4.建议/拙见 本篇文章&#xff0c;给大家介绍一下dbdoctor这个工具吧。DBA必备神器&#xff0c;让运维及监控变得像吃饭一样简单。…

四数之和 ---- 双指针

题目链接 题目: 分析: 我们已经知道三数之和如何求取, 并去重了 三数之和 那么四数之和同理, 需要固定两个数a和b 然后用"双指针算法" , 只要两指针之和等于target-a-b即可同样对于四个数都要进行去重 代码: class Solution {public List<List<Integer>…

数据结构面试常见问题:什么是二叉树?如何进行二叉树的遍历?

二叉树的介绍 二叉树是一种特殊的数据结构&#xff0c;它的每个元素都有零个、一个或两个子元素。这些元素被称为节点&#xff0c;每个节点都有一个值&#xff0c;以及两个指向其子节点的链接。 这种结构就像一个家族树&#xff0c;每个节点都有一个父节点&#xff08;除了顶…