数据结构算法-链表技术点

这篇博客通过火车车厢的连接比喻,深入浅出地解释了链表这一数据结构的原理。内容涵盖了链表的创建、添加、删除元素等基本操作,并通过结构体实例展示了如何用C++实现链表。此外,还提到了链表在逻辑上的线性特性以及物理存储的非连续性,并探讨了链表在信息技术中的应用。
摘要由CSDN通过智能技术生成

基本描述

大家都知道火车 还有自行车的链条, 包括中国高铁

蒸汽火车
自行车链条
他们都有一个共同的特征 链结在一起的, 可以任意的添加,删除
假设:临时用到的一个火车车箱 我们怎么给它们链接起来呢?
大家想想;

首先 有你得火车车箱才行
由于我没有"火车车箱",但是我们可以模拟的嘛
“火车车箱”:
在这里插入图片描述

假设前面有20节火车车箱,后面也有20节火车车箱

如何添加车箱:

  • 我们来捋一下思路:
    1 . 得有新的车箱
    2 . 将新车箱链接后续20节车箱
    3 . 将第20节火车车箱的连接到新车箱

如何移除该车箱

  • 我们来捋一下思路:
    1 . 得找到21节车箱的前一个车箱
    2 . 将21节车箱为移除车箱
    6 . 将第22节车箱链接到20节车箱
    7 . 移除21节车箱

这一节节车箱就对应的 数据结构-链表

链表原理精讲:

链式存储

链表也是线性,也就是说一个挨着一个,它只是物理储存上不相同 ,而逻辑上是相同的
举个例子: 张三出门 去李四家玩 而且李四在另外一个村庄, 而且有五百米,走过去 玩了一会后,该吃饭了,于是想到了王五家蹭蹭饭,巧了的是王五家 又在另外一个村庄,从李四的村庄出发,有一公里距离, 就跑了过去 刚刚好王五煮了饭,王五热情的招待着
" 这个例子"告诉我们友情非常重要* …啪啪啪 醒醒吧 不对 ,我们应该是理解链表的原理 而不是友情 ,搞错了,抱歉啊!
这很明显"物理"上不相同 逻辑上是相同的 张三 ---- 李四家 ----- 王五家 可以看成是一个链条连接着关系
如何表示这种关系呢 无论你在那里我知道你们的地址就可以访问 张三知道李四家地址也知道王五的地址 可以随时互换
张三 ----> 李四家 ----->王五家 只需要修改目的地就可以了想去的地方
如何表示访问这些好基友呢?
首先定义一个结构体

//好基友
struct BestGayFriends{
	string FriendName;//好基友的名字
	BestGayFriends*next//下一个好基友家的地址
};

使用好基友结构体

//创建好基友
BestGayFriends* lisi= new BestGayFriends;//李四
BestGayFriends* wangwu= new BestGayFriends;//王五
lisi->FriendName="李四";
wangwu->FriendName="王五";

//张三去李四家再去王五家 
lisi->next = wangwu;
wangwu->next = nullptr;//不能再去其他的地方
BestGayFriends* zhangsan=lisi;
//主要是可去的地方就去看
while(zhangsan){

	cout << "张三" << "去" << zhangsan->FriendName << endl;
	zhangsan=zhangsan->next;//张三去下一位好基友那里
}

delete lisi;//访问结束
delete wangwu;//访问结束

一般来说链表需要首节点 而 这个 lisi 就是首节点 首节点一般不会放数据 只会留着来当首节点方便维护整个链表
链表有两种组成部分 :

  • 数据域
  • 指针域

链表的算法实现:

单向链表

链表添加元素 web link
链表添加元素 web link

链表插入元素 web link
链表插入元素 web link

链表删除元素 web link
链表删除元素 web link

获取链表元素 web link

获取链表元素 web link

查找链表结点 web link
查找链表结点 web link

链接链表结点 web link
链接链表结点 web link

解除链接结点 web link
解除链接链表结点 web link

循环链表

循环链表 - 约瑟夫问题 web link
循环链表 - 约瑟夫问题 web link

双向链表

链表添加元素 web link
链表添加元素 web link

链表插入元素 web link
链表插入元素 web link

链表删除元素 web link
链表删除元素 web link

链接链表结点 web link
链接链表结点 web link

解除链接链表结点 web link
解除链接链表结点 web link

Linux"共享"链表

Linux"共享"链表原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值