Rust實現鍊錶 unsafe

2022-06-22 23:30:14 字數 948 閱讀 6287

下面簡單的用unsafe rust完成乙個三節點鍊錶(主要原因是safe rust的所有權讓我頭大)

連線,遍歷的思想與c語言裡的完全相同.

struct linknode 

impl linknode

}}fn main() ->",(*p).data);

p = (*p).ptr;}}

//插入

println!("");

let mut new_node = linknode::new(666);//插入新節點 data域為666

new_node.ptr = &node3 as *const linknode;

node2.ptr = &new_node as *const linknode;

p = &node1 as *const linknode;

unsafe->",(*p).data);

p = (*p).ptr;}}

//刪除

println!("");

node2.ptr = &node3 as *const linknode;

drop(new_node);//清理掉新的節點

p = &node1 as *const linknode;

unsafe->",(*p).data);

p = (*p).ptr;}}

}

執行結果如下圖所示:

需要注意的是我這裡使用的裸指標型別為*const t,即裸指標指向的內容不可變,若想讓data域可變應該使用*mut t 型別

鍊錶 java實現雙向鍊錶

前面已經總結了單向鍊錶,有興趣的兄弟可以進我部落格看一下。大家對比就可以看出,實現同樣的功能單向鍊錶要比雙向鍊錶痛苦的多。所以呀不斷地總結前輩留下的東西,是社會進步的基礎呀。可以直接看linkedlist的原始碼,其就是個雙向鍊錶。一 雙向鍊錶的結構。1 首先節點的結構,其中包含本節點內容,同時需要...

JS實現單向鍊錶 雙向鍊錶 迴圈鍊錶

鍊錶儲存有序的元素的集合,但是和陣列不同的是,鍊錶中的元素在記憶體中的儲存並不是連續的。每乙個鍊錶元素都包含了乙個儲存元素本身的節點和乙個指向下乙個元素的引用。看起來就像這樣 相對於傳統的陣列,鍊錶的乙個好處就是增刪的時候無需移動其它元素,只要更改指標的指向就可以了。但是缺點就是如果想要訪問鍊錶中的...

鍊錶實現系列(一) 簡單鍊錶Java實現

簡單鍊錶的原理在這裡就不贅述了,推薦一篇比較不錯的部落格 鍊錶原理 需要實現的操作包括 在頭節點之前插入節點 在尾節點之後插入節點 刪除包含指定資料的節點 刪除尾節點 查詢包含指定資料的節點 獲取鍊錶的長度 輔助操作包括 清空鍊錶 判斷鍊錶是否為空。下面是簡單鍊錶的實現 注意 該鍊錶實現不適合用於儲...