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
结论
我们使用两种方法执行了将向量转换为列表的程序。在第一个示例中,我们使用了内置的复制函数,在第二个示例中,我们使用了链表来执行。