使用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

結論

我們使用兩個示例執行了實現連結串列的程式。在第一個示例中,我們使用了結構體,在第二個示例中,我們使用了列表結構體來實現連結串列。

更新於: 2023年2月22日

287 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.