如何寫乙個鍊錶

2021-07-25 11:41:22 字數 1784 閱讀 6540

有的時候,處於記憶體中的資料並不是連續的。那麼這時候,我們就需要在

資料結構中新增乙個屬性,這個屬性會記錄下面乙個資料的位址。有了這個位址之後,所有的資料就像一條鍊子一樣串起來了,那麼這個位址屬性就起到了穿線鏈結的作用。

相比較普通的線性結構,鍊錶結構的優勢是什麼呢?我們可以總結一下:

(1)單個節點建立非常方便,普通的線性記憶體通常在建立的時候就需要設定資料的大小

(2)節點的刪除非常方便,不需要像線性結構那樣移動剩下的資料

(3)節點的訪問方便,可以通過迴圈或者遞迴的方法訪問到任意資料,但是平均的訪問效率低於線性表

那麼在實際應用中,鍊錶是怎麼設計的呢?我們可以以int資料型別作為基礎,設計乙個簡單的int鍊錶:

(1)設計鍊錶的資料結構

[cpp]view plain

copy

typedef

struct _link_node  

link_node;  

(2)建立鍊錶

[cpp]view plain

copy

link_node* alloca_node(int value)    

(3)刪除鍊錶

[cpp]view plain

copy

void delete_node(link_node** pnode)    

(4)鍊錶插入資料

[cpp]view plain

copy

status _add_data(link_node** pnode, link_node* pdatanode)  

return _add_data(&(*pnode)->next, pdatanode);  

}  status add_data(const link_node** pnode, int value)    

(5)刪除資料

[cpp]view plain

copy

status _delete_data(link_node** pnode, int value)  

else  

}  status delete_data(link_node** pnode, int value)  

return _delete_data(pnode, value);  

}  

(6)查詢資料

[cpp]view plain

copy

link_node* find_data(const link_node* plinknode, int value)    

(7)列印資料

[cpp]view plain

copy

void print_node(const link_node* plinknode)  

}  (8)統計資料

[cpp]view plain

copy

int count_node(const link_node* plinknode)  

如何寫乙個Stack?

1.棧是陣列 2.先進後出 3.出棧 4.入棧 手寫乙個雙向鍊錶 棧 public class stackpopandpush public stackpopandpush int lens 返回元素個數 public intsize 返回陣列長度,容量,棧資料長 private intcapaci...

如何寫乙個Vue元件

寫的是以.vue結尾的單檔案元件的寫法,是基於webpack構建的專案。template 模板 js 邏輯 css 樣式 每個元件都有屬於自己的模板,js和樣式。如果將乙個頁面比喻成一間房子的話,元件就是房子裡的客廳 臥室 廚房 廁所。如果把廚房單獨拿出來的話,元件又可以是刀 油煙機.等等。就是說頁...

如何寫乙個MPI程式

2.輸入命令sudo apt get install y build essential,通過包管理器安裝build essential來實現基礎的編譯環境。3.輸入gcc v來檢視gcc版本資訊。5.輸入mpicc v來觀察mpicc版本資訊。6.輸入 cd 切換到使用者家目錄。7.輸入vim m...