012 透過連結串列學習Rust之持久化單連結串列

linghuyichong發表於2021-06-20

影片地址: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 協議》,轉載必須註明作者和本文連結
令狐一衝

相關文章