使用Go語言實現連結串列
在 Go 程式語言中,連結串列是一種線性資料結構,由一系列節點組成,這些節點透過下一個指標相互連結,該指標指向下一個地址。我們將使用兩種方法在這個程式中實現連結串列。在第一種方法中將使用結構體,在第二個示例中將使用列表結構體。
方法 1:使用結構體
在這種方法中,此連結串列中有三個節點,每個節點的值為 1、2 或 3。每個節點的下一個指標指向列表中其後的節點,而 head 變數指向第一個節點。for 迴圈沿著每個節點的下一個指標遍歷連結串列,直到到達下一個指標為 nil 的節點,這表示列表的結尾。
演算法
步驟 1 − 建立一個包 main 並宣告程式中的 fmt(格式化包)包,其中 main 生成可執行程式碼,fmt 幫助格式化輸入和輸出。
步驟 2 − 建立一個具有 next 和 num_val 欄位的節點結構。節點的值儲存在 value 中,next 是指向列表中其後節點的指標。
步驟 3 − 在 main 函式中建立一個 head 節點,並將其 num_value 設定為列表的第一個值。
步驟 4 − 應建立一個第二個節點,並將其 num_value 設定為列表中的下一個值。
步驟 5 − 透過將 head 節點的 next 指標設定為第二個節點,可以連線 head 節點和第二個節點。
步驟 6 − 要新增更多節點並將其連線起來,請重複步驟 3 和 4 以完成連線列表。
步驟 7 − 在下一步中,建立指向 head 節點的當前指標並將其設定。
步驟 8 − 使用 for 迴圈遍歷連結串列時,請遵循每個節點的 next 指標。
步驟 9 − 使用 fmt.Println() 函式在 for 迴圈內列印當前節點的值,其中 ln 表示換行。
步驟 10 − 透過將其更新為 next 指標的值,當前指標將更改為列表中的下一個節點。
步驟 11 − 重複步驟 7-9,直到當前節點的 next 指標為 nil,這表示列表的結尾。
示例
在這個示例中,我們將使用結構體來實現連結串列。
package main
import "fmt"
type node struct { //create a struct
num_val int
next *node
}
func main() {
head := &node{num_val: 1}
head.next = &node{num_val: 2}
head.next.next = &node{num_val: 3}
fmt.Println("The implementation of linked list is given as following:")
current := head
for current != nil { //run a for loop to print values of current node
fmt.Println(current.num_val)
current = current.next
}
}
輸出
The implementation of linked list is given as following: 1 2 3
方法 2:使用列表結構體
在此實現中,連結串列被實現為一個 List 結構體,該結構體具有一個指向根節點的 head 欄位。透過構造一個新節點,將其 next 指標設定為現有的 head 節點,並將 List 結構體的 head 欄位修改為指向新節點,Insert 方法在列表的開頭新增一個具有指定值的新節點。Print 方法沿著每個節點的 next 指標遍歷列表,並列印每個節點的值。
演算法
步驟 1 − 建立一個包 main 並宣告程式中的 fmt(格式化包)包,其中 main 生成可執行程式碼,fmt 幫助格式化輸入和輸出。
步驟 2 − 建立一個 List 結構體,並將其 head 欄位的型別設定為 *Node。
步驟 3 − 建立一個 Node 結構體,其兩個欄位為 value 和 next。節點的值儲存在 value 中,next 是指向列表中其後節點的指標。
步驟 4 − 為 List 結構體建立一個接受一個值作為引數的 Insert 方法。
步驟 5 − 在 Insert 方法內建立一個具有指定值的新節點 n。
步驟 6 − 將新節點的 next 指標設定為 List 結構體的當前 head。
步驟 7 − 要指向新節點,請更新 List 結構體的 head 欄位。
步驟 8 − 為 List 結構體建立一個名為 Print 的方法,該方法遍歷連結串列並輸出每個節點的值。
步驟 9 − 在 main 函式中建立一個 List 結構體,並使用 Insert 方法向其中新增多個節點。
步驟 10 − 要列印列表中每個節點的值,請呼叫 Print 方法。
示例
在這個示例中,我們將使用列表結構體來實現連結串列。
package main
import "fmt"
type List struct { //create a list struct
head *Node
}
type Node struct {
value_num int
next *Node
}
func (l *List) Insert(value_num int) {
n := &Node{value_num: value_num}
n.next = l.head
l.head = n
}
func (l *List) Print() {
current := l.head
for current != nil {
fmt.Println(current.value_num)
current = current.next
}
}
func main() {
list := &List{} //create a list struct
fmt.Println("The implementation of linked list is given as:")
list.Insert(3)
list.Insert(2)
list.Insert(1)
list.Print()
}
輸出
The implementation of linked list is given as: 1 2 3
結論
我們使用兩個示例執行了實現連結串列的程式。在第一個示例中,我們使用了結構體,在第二個示例中,我們使用了列表結構體來實現連結串列。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP