視訊地址:www.bilibili.com/video/av78062009/
相關原始碼:github.com/anonymousGiga/Rust-link...
在之前我們已經實現了一個單連結串列,從這節開始,我們將實現一個持久化的單連結串列。通過持久化的單連結串列,可以讓其他人來共享使用連結串列的資料。
考慮如下例子:
list1 = A -> B -> C -> D
list2 = tail(list1) = B -> C -> D
list3 = push(list2, X) = X -> B -> C -> D
我們希望我們看到的記憶體佈局是這樣:
list1 -> A ---+
|
v
list2 ------> B -> C -> D
^
|
list3 -> X ---+
因為我們連結串列中的B的所有權是共享的,所以我們不能像之前那樣定義我們的連結串列了。
那我們怎麼辦喃?我們將使用Rc引用計數來實現我們的共享。
我們將Box換成Rc重新定義我們的連結串列,程式碼如下:
use std::rc::Rc;
pub struct List<T> {
head: Link<T>,
}
type Link<T> = Option<Rc<Node<T>>>;
struct Node<T> {
elem: T,
next: Link<T>,
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結