基本描述
大家都知道火车 还有自行车的链条, 包括中国高铁
他们都有一个共同的特征 链结在一起的, 可以任意的添加,删除
假设:临时用到的一个火车车箱 我们怎么给它们链接起来呢?
大家想想;
首先 有你得火车车箱才行
由于我没有"火车车箱",但是我们可以模拟的嘛
“火车车箱”:
假设前面有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