1 21 Go之鍊錶操作

2022-09-27 10:15:12 字數 3027 閱讀 9696

定義:

鍊錶是物理儲存單元上非連續、非順序的儲存結構

特點:

資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的

概括:

鍊錶是一種資料儲存結構,通過指標指向定義它的鏈結次序。有點像區塊鏈。只不過乙個鍊錶的結構體擁有的元素比區塊鏈的區塊少

鍊錶的每個點稱為節點,乙個節點包括:

資料域指標域

鍊錶的優缺點

優點:

免在使用陣列時需要預先知道資料大小的缺點

充分利用計算機記憶體空間,實現靈活的記憶體動態管理

缺點:

失去了陣列隨機讀取的優點

空間開銷比較大

在之前的資料結構一章講過,鍊錶屬於線性表的一種。鍊錶的種類有:

乙個節點包括:

頭節點在鍊錶中的好處:

使用struct關鍵字定義節點:

package main​/*

定義節點

*/type node struct

為鍊錶賦值並遍歷節點:

package main

​import "fmt"​/*

定義乙個遍歷鍊錶節點的方法

*/func shownode(p *node) }}

​/*呼叫該方法

*/func main()

插入節點

頭插法本質:

每次都在鍊錶的頭部插入資料,相當於修改新插入的節點都是頭節點。

實現:

只需要構造乙個頭指標,該指標只指向頭節點即可。每次插入節點都將該指標指向最新的節點

package main

​import (

"fmt")​

/*定義節點

*/type node2 struct ​/*

定義遍歷列印方法:

傳入指標變數,每次修改指標變數進行讀取

*/func shownode2(p *node2) }​

/*頭插法插入鍊錶

*/func main()

// 每次新增成功都將頭指標指向新增的節點

node.next = top

// 給頭指標重新賦值

top = &node}​

// 呼叫列印節點方法

shownode2(top)

}

尾插法

本質:

每次插入資料直接修改頭節點的指標值,將新加入的節點的指標賦值給頭節點

實現:

package main

​import (

"fmt")​

/*定義節點

*/type node2 struct ​/*

定義遍歷列印方法:

傳入指標變數,每次修改指標變數進行讀取

*/func shownode2(p *node2) }​

/*頭插法插入鍊錶

*/func main()

// 每次新增成功都修改頭節點的指標域的值,將新插入的節點指標值賦值給頭節點

(*top).next = &node

// 重新給頭節點賦值

top = &node}​

// 呼叫列印節點方法

shownode2(top)

}

訪問元素,鍊錶沒有陣列高效。因為陣列的儲存位址是連續的。新增和刪除元素,鍊錶比陣列高效很多。因為鍊錶本身的位址就是不連續的。迴圈鍊錶

本質:

鍊錶最後的節點的指標域指向頭節點的資料域。實現的時候就需要固定乙個頭節點

實現:

package main

​import "fmt"​/*

定義節點

*/type node3 struct ​/*

迴圈列印指標節點內容方法

*/func shownode3(p *node3) }​

/*雙指標方法定位迴圈鍊錶結構

*/func main()

// 每次修改移動指標的指標域指向新建的節點的位址

(*movenode).next = &node

// 重新給移動節點賦值

movenode = &node

if i == 9 }​

shownode3(headtop)

}

雙向鍊錶

本質:

鍊錶的乙個節點不止有後繼指標,還有前驅指標。前驅指標指向前乙個節點。後繼指標指向下乙個節點

特點:

優點:缺點:

package main

​import "fmt"​/*

定義雙向鍊錶節點資訊

*/type node4 struct ​/*

遍歷節點的方法

*/func shownode4(p *node4)

// 將指標移向下乙個節點

p = p.next}}

​/*遍歷雙向鍊錶

*/func main()

// 修改頭指標指向新建節點

(*headtop).next = &node

// 修改新建的節點的前驅指標指向頭指標

node.prev = headtop

// 更新頭指標

headtop = &node}​

shownode4(headtop)

}// 此答案有誤

6 9 Go語言鍊錶操作

鍊錶是一種物理儲存單元上非連續 非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。使用鍊錶結構可以避免在使用陣列時需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷...

C 之鍊錶操作

1 鍊錶題 乙個鍊錶的結點結構 struct node typedef struct node node 1 已知鍊錶的頭結點head,寫乙個函式把這個鍊錶逆序 intel node reverselist node head 鍊錶逆序 p2 next p1 head p2 return head ...

Go 雙向鍊錶

雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點,相對於單鏈表來講 往前往後遍歷都很方便。相對於單向鍊錶優勢 插入資料 刪除資料 實現了基本的雙向鍊錶功能,包括元素的插入 刪除...