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