0
点赞
收藏
分享

微信扫一扫

Rust中最常见的链表

代码敲到深夜 2022-02-14 阅读 97


用函数式的语法定义一个链表如下:

元素A是分配在栈上而不是分配在堆上的;
最后的空元素需要分配空间。
1、占用多余的空间

我们再考虑下面的布局:

2、便于拆分

在一种布局中,第一个节点没有在堆上分配,这也是不太好的,可能在push、pop的时候没有太大影响,但是在拆分链表的时候影响就比较大了。

考虑以下例子的拆分:

第一种布局:

**链表的一个比较好的特性就是,我们可以在节点本身进行构造元素,然后在不移动它(节点本身)的情况下,自由的在链表中移动它。**链表的特性如下面的示意图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aeyjQ9Gt-1630653384240)(F9EC93015194433981E8BB6FF5DF16BF)]
在上图中,我们删除中间的节点,我们对中间节点本身的数据并没有影响,只是修改了第一个节点的next指针指向的地址,即未移动节点本身而实现在节点在链表中的移动。

很明显,上面的第一种布局方式破坏了链表的此特性。

更复杂的枚举
那我们是否可以定义成如下方式:

c风格的链表
通过上面的分析,我们会发现,我们其实需要的是一个类似于在c语言中实现的链表。
我们把List定义成如下:

举报

相关推荐

0 条评论