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
结论
我们使用两种方法执行了将向量转换为列表的程序。在第一个示例中,我们使用了内置的复制函数,在第二个示例中,我们使用了链表来执行。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP