Go語言程式:將向量轉換為列表


在Go語言中,向量被稱為陣列或切片。切片是大小可變的動態陣列,而連結串列是一種列表資料結構,其中每個節點都包含一個值並指向下一個元素。我們將在這個程式中使用兩個示例來將向量轉換為列表。第一個示例將使用內建的複製函式,第二個示例將反向迭代切片以獲得輸出。

方法一:使用複製函式

在此方法中,我們建立了一個向量,它將使用複製和make函式轉換為列表。複製函式將使用make函式將向量元素複製到新建立的列表。

語法

func copy(dst, str[] type) int

Go語言中的copy函式用於將一個源陣列的值複製到目標陣列,並返回已複製元素的數量作為結果。它接受兩個陣列作為引數。

func make ([] type, size, capacity)

Go語言中的make函式用於建立陣列/對映,它接受要建立的變數型別、大小和容量作為引數。

func len(v Type) int

len()函式用於獲取任何引數的長度。它接受一個引數作為要查詢長度的資料型別變數,並返回一個整數值,即變數的長度。

演算法

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

  • 步驟2 - 建立一個包含一些值的int切片向量。

  • 步驟3 - 在下一步中,使用make函式生成一個與向量長度相同的新的切片列表。

  • 步驟4 - 現在,使用複製函式將向量的專案新增到列表中。

  • 步驟5 - 使用fmt.Println()函式在控制檯上列印新的列表和向量列表,其中ln表示換行。

  • 步驟6 - 應該注意的是,在Go中,切片是一種類似動態陣列的資料結構,複製現有切片通常涉及建立一個與原始切片長度相同的新的切片。元素使用複製函式從一個切片複製到另一個切片。

示例

在這個示例中,我們將使用複製函式將向量轉換為列表。讓我們透過程式碼瞭解它是如何完成的。

package main
import (
   "fmt"
)

func main() {
   slice := []int{10, 20, 30, 40, 50}  //create a vector

   // convert slice to list
   list := make([]int, len(slice))
   copy(list, slice)  //use copy function to copy the elements of a slice to a list

   fmt.Println("Vector:", slice)  //print the vector
   fmt.Println("The conversion of slice to list looks like:")
   fmt.Println("List:", list)  //print the list
}

輸出

Vector: [10 20 30 40 50]
The conversion of slice to list looks like:
List: [10 20 30 40 50]

方法二:使用連結串列

此方法透過反向迭代切片併為切片中的每個元素構造一個新節點,然後是之前建立的節點,來生成一個連結串列。

語法

func len(v Type) int

len()函式用於獲取任何引數的長度。它接受一個引數作為要查詢長度的資料型別變數,並返回一個整數值,即變數的長度。

演算法

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

  • 步驟2 - 建立一個名為Node的結構體型別,它包含兩個成員:Value和Next,它們分別為int和*Node型別。

  • 步驟3 - 建立一個int切片,並建立一個型別為*Node的變數head,並將其初始值設定為nil。

  • 步驟4 - 反向遍歷整數切片。

  • 步驟5 - 使用Node結構體為切片中的每個元素建立一個新節點,並將Value欄位設定為當前切片中的元素,並將Next欄位設定為先前建立的節點。

  • 步驟6 - 建立一個新節點並將其賦值給head變數。

  • 步驟7 - 對切片的每個元件重複步驟5和6。

  • 步驟8 - 跟蹤Next指標來遍歷連結串列,然後輸出每個節點的值。

  • 步驟9 - 使用fmt.Println()函式執行輸出語句,其中ln表示換行。

示例

在這個示例中,我們將使用連結串列將向量轉換為列表。讓我們透過程式碼瞭解其執行。

package main
import "fmt"

type Node struct {
   Value int
   Next  *Node
}

func main() {
   // Create a slice of ints
   vector_val := []int{10, 20, 30, 40, 50}  //create a vector
   fmt.Println("The initially created vector is:", vector_val)

   // Convert the slice to a linked list
   var head *Node
   for i := len(vector_val) - 1; i >= 0; i-- {
      head = &Node{vector_val[i], head}  //convert the vector to list
   }

   // Print the linked list
   fmt.Println("The elements of list are:")
   for node := head; node != nil; node = node.Next {
      fmt.Println(node.Value)  //print the values of list
   }
}

輸出

The initially created vector is: [10 20 30 40 50]
The elements of list are:
10
20
30
40
50

結論

我們使用兩種方法執行了將向量轉換為列表的程式。在第一個示例中,我們使用了內建的複製函式,在第二個示例中,我們使用了連結串列來執行。

更新於:2023年2月20日

910 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告