将列表转换为集合的 Golang 程序
在本教程中,我们将编写一个将列表转换为集合的 golang 程序。链接列表是一种动态创建的结构,它有两个元素,一个用于存储值,另一个用于存储下一个结构的地址。集合是一种抽象数据类型,可以存储特定值而不重复任何值,也没有任何特定顺序。
将链接列表转换为集合
现在让我们看一个将链接列表转换为集合的示例。
语法
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("得到的集合为:", newset) }
输出
得到的集合为:map[Banana:{} mango:{} Apple:{}]
结论
我们成功编译并执行了一个 go 语言程序,将一个链表转换为集合,并给出了一个例子。