数据结构入门——单向链表
基本知识点
注:数据结构系列将持续更新,欢迎交流讨论…
- 单向链表是一种线性结构
- 优点:作数据的删除、插入简单;缺点:数据查找慢
- 组成:数据域、后继节点的一个指针域;
- 单向链表,后继指针指向下一个结点
- 学数据结构的建议:学习每种结构的时候,首先得清除它的结构,所以自己首先要清楚大概的结构,自己画一画;文中我会展示出部分图片以供参考。
基本结构示意图
一般实现步骤
- 初始化结点参数/创建结点;
- 链接每个结点,让这些结点成为一个逻辑上相连接的链表;
- 注意点:指针的先后指向要捋清楚,谁先指,谁后指;
- 建议:学编程就是学的一种思维,有的问题可以不必深究;
简单的代码实现链表逻辑
typedef struct node//用typedef就可以在后面起别名
{int num;struct node* next;
}*p_node;//别名void testList()
{node data_1 = { 1,nullptr };node data_2 = { 2,nullptr };node data_3 = { 3,nullptr };node data_4 = { 4.nullptr };data_1.next = &data_2;data_2.next = &data_3;data_3.next = data_4;node* pMove = &data_1;while (pMove != nullptr){cout << pMove->num << " ";pMove = pMove->next;}
- 上图展示的就是基本操作,创建结点和链接,打印,接下来我们只需要用函数将他封装一下,简单的实现一下增删改查的功能,就算是实现好了一个最基本的单向链表;
封装初始化结点函数
node* initnode(int value)
{p_node newnode = new node;newnode->num = value;newnode->next = nullptr;return newnode;
}
头插法插入节点
void insertHead(node* p_head, node* data)
{data->next = p_head->next;p_head->next = data;
}
插入过程示意图
尾插法
void insertTail(node* p_tail, p_node data)
{data->next = p_tail->next;p_tail->next = data;
}
插入过程示意图
查找和修改数据
(这个没什么好说的,看代码)
bool search(p_node pHead, int target, int value)
{p_node pMove = pHead;while (pMove != nullptr){if (pMove->num == target){pMove->num = value;return true;}pMove = pMove->next;}return false;
}
删除结点
- 删除一个结点需要两个结点,一个指向当前结点,一个指向当前结点左侧,这样的目的是为了作结点删除时方便结点直接的链接;
- 删除过程:左侧结点断开当前结点的链接,去链接当前结点的右侧结点,如图所示:
bool deleteNode(p_node pHead,int target)
{p_node pMove = pHead;p_node pLight = pHead;while (pMove != nullptr){if (pMove->num == target){pLight->next = pMove->next;delete pMove;pMove = nullptr;return true;}pLight = pMove;pMove = pMove->next;}return false;
}
删除过程指针移动示意图
注意点:要始终保持pLight结点在pMove结点的左侧,这样删除的时候好作结点之间的链接。
结语
数据结构的内容将持续更新,如文中有误还请不吝赐教;欢迎评论区留言或私信讨论。
数据结构入门——单向链表相关推荐
- 数据结构 (二) ----- 单向链表双向链表
相关文章: <数据结构 (一) ----- 数据结构基本概念&基于数组实现线性表> <数据结构 (二) ----- 单向链表&双向链表> 文章目录 单链表 一. ...
- Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)
Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...
- Java版数据结构之单向链表
Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...
- 算法与数据结构(part6)--单向链表
学习笔记,仅供参考,有错必纠 参考自:单链表头指针.头结点.头元结的辨析 文章目录 算法与数据结构–基于python 链表 为啥需要链表 什么是链表 单向链表 什么是单向链表 单列表的操作 节点的实现 ...
- Day 62 数据结构(单向链表,单向循环链表,双向链表)
1. 单向链表的设计 例程:创建一个动态单向链表 1.定义链表结点:数据域+指针域 2.定义链表结构体:头结点指针+结点数 3.初始化链表 4.指定位置插入新数据 5.删除指定位置数据 6.获取链表长 ...
- 数据结构——求单向链表的倒数第K个节点
首先,对于链表来说,我们不能像数组一样直接访问,所以我们想到要求倒数第K个节点首先要知道最后一个节点. 然后从最后一个节点往前数K个. 最后得到想要的值. 但是这是不对的,为什么呢?因为题目给出的是单 ...
- php mysql 链表_php实现数据结构的单向链表
啥是单向链表 链表是以链式存储数据的结构,其不需要连续的存储空间,链表中的数据以节点来表示,每个节点由元素(存储数据)和指针(指向后继节点)组成. 单向链表(也叫单链表)是链表中最简单的一种形式,每个 ...
- 数据结构:单向链表(SingleLinkedList)删除某一节点
定义一个简单的单向链表节点 public class ListNode {int value;ListNode next;ListNode(int x) { val = x;} } 思路一 //将前一 ...
- 【数据结构】单向链表的原理及实现
1.什么是单链表 链表里的数据是以节点的方式表示的,每一个结点的组成是由:元素+指针来组成的,元素就是存储数据里的存储单元,指针就是用来连接每一个结点的地址数据.这个以结点的序列来表示线性表被称作为单 ...
最新文章
- C++插入中文到mysql乱码
- jflash烧录教程_Jflash烧录(windows)原理分析
- IPC的标准是什么?
- 专精特新是什么,为什么要申报“专精特新”中小企业
- 质谱流式细胞技术 小笔记
- 计算机触摸板设置方法,笔记本电脑触摸板设置
- 一级域名和二级域名的区别
- Win10任务栏卡死解决方法
- 民法典实施后,夫妻共同债务如何认定?
- 分层强化学习:基于选项(option)的强化学习/论文笔记 The Option-Critic Architecture 2017 AAAI
- 正则表达式--文本处理神器
- 软件测试之项目实战,必须知道的事与测试面试项目测试流程......
- 敏俊物联MJIOT-AMB-03 RTL8710BN 高性能wifi模块
- 关闭Windows系统中的UAC用户帐户控制
- 电路+模电+电力电子基础
- “问渠哪得清如许?为有源头活水来” – 提高技术源头数据的质量成为技术信息化热点
- docker-compose模板指令 命令行指令
- C语言刷题训练营-自我补全
- 西交大卢院士、方学伟团队:钛纤维增强铝基复合材料增材制造技术研究
- Git 中 tag 的用法(打tag、删除tag等)