【发布时间】:2021-09-05 20:27:05
【问题描述】:
我一直在学习 Rust,并决定做一些基本类型有助于更深入地学习这门语言。
链接列表状态的"Rust by Example" 页面
Ln 4: // 缺点:包含一个元素和一个指向下一个节点的指针的元组结构
我认为这意味着它通过始终使用Cons 填充一个空节点来递归创建列表。
enum linkedList
{
Head(Head), // Front Pointer and list metrics
Cons(Arc<linkedList>, isize), //(Data, Next Value) Cons is apparently a LISP construct
Tail(isize), // Rear Pointer
Nil //Used to drop the stream
}
我真正的问题是允许数据存储在Arc<linkedList> 节点中的底层机制是什么?我认为需要通用 (<T>) 将数据存储在列表中,但显然这是不正确的。
p.s 我的印象是 ARC 和 BOX 智能指针可以互换,但用于不同的目的。我试图制作一个单端翻转安全链表的线程安全版本,有点像循环队列。
【问题讨论】:
-
真正的 rust by example 很旧而且很糟糕,请忘记 Rust 中的链表
-
它肯定不是很好@Stargateur,但我用它来提高我的知识。否则
和 在性能、内存使用和易用性方面要好得多。不过感谢您的意见! -
如果你对链表特别感兴趣,有一整本书适合你:Learn Rust With Entirely Too Many Linked Lists
-
我不清楚混乱在哪里。您不确定
enum T { A(B, C) }是如何存储其数据的吗?或者Arc是如何工作的? -
我错过了什么吗?您链接的 RbE 页面不包含此
enum定义。那么这是什么?你自己的发明?您是什么意思“我认为将数据存储在列表中需要通用”... RbE 中的数据只是u32。您是在谈论 RbE 的代码还是您自己的代码?添加Head和Tail变体有什么意义?
标签: data-structures rust linked-list cons