Go语言程序:将列表转换为集合


在本教程中,我们将编写一个Go语言程序,将列表转换为集合。链表是一种动态创建的数据结构,它有两个元素:一个用于存储值,另一个用于存储下一个结构的地址。集合是一种抽象数据类型,可以存储特定的值,而不会重复任何值,也没有任何特定的顺序。

将链表转换为集合

现在让我们来看一个将链表转换为集合的例子。

语法

func make([]type, length, capacity) []type

make函数用于创建切片或映射。它接受三个参数:一个是我们要创建的切片名称和类型,然后是切片的长度和容量。该函数然后返回最终的切片。

算法

步骤1 - 首先,我们需要导入fmt包。

步骤2 - 下一步是创建一个节点。为此,我们定义了一个名为node的新结构。

步骤3 - 然后我们需要创建一个linkedlist结构体。它也有两个字段,一个是名为head的指针变量。此变量指向头节点。

步骤4 - 然后我们初始化了两个函数,一个是initlist()函数。此函数在linkedlist结构体上定义,并返回linkedlist{}的地址。

步骤5 - 第二个函数名为prepend,用于向链表添加一个新的节点元素,并接受一个节点作为参数。

步骤6 - 将数据添加到链表的当前节点后,我们需要使链表的下一个指针指向下一个节点,并增加链表的长度。

步骤7 - 启动主函数并通过调用initlist()函数创建一个名为mylist的新链表。

步骤8 - 之后我们创建了几个节点并将字符串值存储到它们中。

步骤9 - 下一步是将这些节点排列在一起以形成一个链表,为此我们通过将每个节点作为参数传递给函数来调用prepend()函数。

步骤10 - 然后我们需要创建一个集合。我们将其命名为newset,它以字符串格式存储数据。

步骤11 - 下一步是遍历链表,在每次迭代中,我们从链表中提取值并将其存储在集合中。

步骤12 - 然后我们需要使链表的指针变量指向下一个节点,并重复此过程,直到我们得到nil或null值。

步骤13 - 下一步是打印集合,为此我们使用fmt.Println()函数。

示例

package main
import (
   "fmt"
)
type node struct {
   data string
   next *node
}
type linkedlist struct {
   len int
   head *node
}
func initList() *linkedlist {
   return &linkedlist{}
}
func (l *linkedlist) prepend(n *node) {
   node := &node{
      data: n.data,
   }
   if l.head == nil {
      l.head = node
   } else {
      node.next = l.head
      l.head = node
   }
   l.len++
   return
}
func main() {
   mylist := initList()
   node1 := &node{data: "Apple"}
   node2 := &node{data: "mango"}
   node3 := &node{data: "Banana"}
   mylist.prepend(node1)
   mylist.prepend(node2)
   mylist.prepend(node3)
   newset := make(map[string]struct{})
   for mylist.head != nil {
      newset[mylist.head.data] = struct{}{}
      mylist.head = mylist.head.next
   }
   fmt.Println("The obtained set is:", newset)
}

输出

The obtained set is: map[Banana:{} mango:{} Apple:{}]

结论

我们已经成功编译并执行了一个Go语言程序,用于将链表转换为集合,并附带一个示例。

更新于:2022年12月28日

浏览量:684

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.