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 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告