Golang 将向量转换为列表
在Golang中,向量被称为数组或切片。切片是一个动态数组,其大小可以更改,而链表数据结构是一种列表类型,其中每个节点具有一个值并指向下一个元素。我们将在此程序中使用两个示例将向量转换为列表。在第一个示例中,将使用内置的copy函数,而在第二个示例中,我们将以相反的顺序迭代切片以获得输出。
方法1:使用copy函数
在此方法中,我们创建了一个向量,将使用copy和make函数将其转换为列表。copy函数将使用make函数将向量元素复制到新创建的列表中。
语法
func copy(dst, str[] type) int
在Go语言中, copy 函数用于将源数组的值复制到目标数组,并返回复制的元素数量作为结果。它接受两个数组作为参数。
func make ([] type, size, capacity)
在go语言中, make 函数用于创建一个数组/映射,它接受要创建的变量的类型、大小和容量作为参数
func len(v Type) int
len()函数用于获取任何参数的长度。它接受一个参数作为数据类型变量,我们希望找到其长度,并返回一个整数值,该值是变量的长度。
步骤
- 步骤1 - 创建一个主包,并在程序中声明fmt(格式化包)包,其中main生成可执行代码,而fmt则有助于格式化输入和输出。
-
步骤2 - 创建一个带有一些值的int切片向量。
-
步骤3 - 在下一步中,使用make函数生成一个与向量长度相同的新切片列表。
-
步骤4 - 现在,使用copy函数将向量的项添加到列表中。
-
步骤5 - 使用fmt.Println()函数在控制台上打印新列表和向量列表,其中ln表示换行。
-
步骤6 - 需要注意的是,在Go中,切片是一种类似于动态数组的数据结构,复制现有切片通常涉及到创建一个与原始切片长度相同的新切片。使用copy函数将元素从一个切片复制到另一个切片。
示例
在这个示例中,我们将使用copy函数将向量转换为列表。让我们通过代码来看看如何实现。
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]
方法2:使用链表
这种方法通过反向迭代切片并为切片中的每个元素构造一个新节点,然后跟随其前面的节点来生成链表。
语法
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
结论
我们执行了将向量转换为列表的程序,使用了两种方法。在第一个示例中,我们使用了内置的复制函数,而在第二个示例中,我们使用了链表来执行。