Go語言程式:連結串列與陣列的相互轉換


在Go程式語言中,連結串列是一種由一系列節點組成的動態資料結構,每個節點包含一個值和指向下一個節點的引用(指標)。連結串列允許在不重新排列整個資料集的情況下新增或刪除專案,提供了一種動態且靈活的資料儲存方式。Go語言中可以使用結構體和指標來實現連結串列,而陣列是大小固定的同類型元素的集合,可以透過其整數索引(從零開始)訪問。陣列的大小在宣告時確定,之後無法更改。

方法一:將連結串列轉換為陣列

在此方法中,我們使用節點結構體將連結串列轉換為陣列。連結串列中的值被設定並轉換為使用make函式建立的陣列。迴圈遍歷連結串列,並將元素新增到陣列中,然後使用fmt包在控制檯上列印。

演算法

  • 步驟1 − 建立一個名為main的包,並在程式中宣告fmt(格式化包),其中main生成可執行程式碼,fmt幫助格式化輸入和輸出。

  • 步驟2 − 建立一個名為node的結構體,包含型別為int的val和型別為Node的next。

  • 步驟3 − 建立一個名為array的空陣列。

  • 步驟4 − 建立一個名為curr的指標,並將其初始化為連結串列的頭節點。

  • 步驟5 − 當curr不為空時,使用curr.next迴圈。

  • 步驟6 − 將陣列返回到連結串列。

示例

在此示例中,我們將連結串列轉換為陣列。

package main
import "fmt"
type Node struct {
   val  int
   next *Node
}

func main() {
   // Creating linked list
   head := &Node{val: 10, next: &Node{val: 20, next: &Node{val: 30, next: nil}}}

   // Converting linked list to an array
   array := make([]int, 0)
   for curr := head; curr != nil; curr = curr.next {
      array = append(array, curr.val)
   }
   fmt.Println("The linked list is converted into array:")
   fmt.Println("Linked List:", array)
}

輸出

The linked list is converted into array:
Linked List: [10 20 30]

方法二:將陣列轉換為連結串列

在此方法中,我們藉助函式array_to_List將陣列轉換為連結串列,該函式將執行一個迴圈並返回頭節點值。連結串列將使用fmt包在控制檯上列印。

演算法

  • 步驟1 − 建立一個名為main的包,並在程式中宣告fmt(格式化包),其中main生成可執行程式碼,fmt幫助格式化輸入和輸出。

  • 步驟2 − 建立一個名為head的頭節點,其值為陣列的第一個元素。

  • 步驟3 − 建立一個名為curr的指標,並將其初始值設定為head。然後,迭代陣列的其餘元素。

  • 步驟4 − 新增一個新節點newNode,其值為當前元素。

  • 步驟5 − 將curr指標移動到newNode。

  • 步驟6 − 在下一步中,將head返回給函式。

示例

在此示例中,我們將陣列轉換為連結串列。

package main
import "fmt"

type Node struct {
   val  int
   next *Node
}

func array_to_List(array []int) *Node {
   head := &Node{val: array[0], next: nil}
   curr := head
   for i := 1; i < len(array); i++ {
      curr.next = &Node{val: array[i], next: nil}
      curr = curr.next
   }
   return head
}

func main() {
   // Creating array
   array := []int{10, 20, 30}

   // Converting array to linked list
   head := array_to_List(array)

   // Printing linked list
   fmt.Println("The array after its converted to linked list:")
   for curr := head; curr != nil; curr = curr.next {
      fmt.Print(curr.val, " -> ")
   }
   fmt.Print("nil")
}

輸出

The array after its converted to linked list:
10 -> 20 -> 30 -> nil

結論

我們透過兩個示例執行了連結串列與陣列相互轉換的程式。在第一個示例中,我們使用將連結串列轉換為陣列,在第二個示例中,我們將陣列轉換為連結串列。兩個程式都生成了預期的輸出。

更新於:2023年2月21日

瀏覽量:329

開啟您的職業生涯

完成課程,獲得認證

開始學習
廣告
© . All rights reserved.