c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

Go语言中的数据结构的实现方式

刘姿婷 2023-07-10编程经验
Go语言中的数据结构实现方式Go语言非常适合实现数据结构,因为它具有内置的垃圾收集机制和丰富的内置类型,如切片和映射。下面我们将讨论Go语言中实现四种常见的数据结构的方法:链表、堆栈、队列和二叉树。链表链

Go语言中的数据结构实现方式

Go语言非常适合实现数据结构,因为它具有内置的垃圾收集机制和丰富的内置类型,如切片和映射。下面我们将讨论Go语言中实现四种常见的数据结构的方法:链表、堆栈、队列和二叉树。

链表

链表是由节点组成的列表,每个节点包含数据和指向下一个节点的指针。Go语言中可以使用结构体来表示节点,并使用指针来连接节点。下面是一个包含节点插入和打印节点数据的单向链表示例:

package main

import "fmt"

type Node struct {
    data int
    next *Node
}

type LinkedList struct {
    head *Node
}

func (l *LinkedList) Insert(data int) {
    newNode :=&Node{data: data}

    if l.head==nil {
        l.head=newNode
    } else {
        last :=l.head
        for last.next !=nil {
            last=last.next
        }
        last.next=newNode
    }
}

func (l *LinkedList) Print() {
    currentNode :=l.head
    for currentNode !=nil {
        fmt.Println(currentNode.data)
        currentNode=currentNode.next
    }
}

func main() {
    list :=LinkedList{}
    list.Insert(1)
    list.Insert(2)
    list.Insert(3)
    list.Print()
}

堆栈

堆栈是一种LIFO(Last In First Out)数据结构,可以使用数组或链表来实现。Go语言中可以使用切片来表示堆栈,因为切片有可变长度并可以动态分配内存。下面是一个使用切片的堆栈示例:

package main

import "fmt"

type Stack struct {
    items []int
}

func (s *Stack) Push(i int) {
    s.items=append(s.items, i)
}

func (s *Stack) Pop() int {
    l :=len(s.items)
    if l==0 {
        return -1
    } else {
        value :=s.items[l-1]
        s.items=s.items[:l-1]
        return value
    }
}

func main() {
    stack :=Stack{}
    stack.Push(1)
    stack.Push(2)
    stack.Push(3)
    fmt.Println(stack.Pop())
    fmt.Println(stack.Pop())
    fmt.Println(stack.Pop())
}

队列

队列是一种FIFO(First In First Out)数据结构,也可以使用数组或链表来实现。下面是一个使用切片的队列示例:

package main

import "fmt"

type Queue struct {
    items []int
}

func (q *Queue) Enqueue(i int) {
    q.items=append(q.items, i)
}

func (q *Queue) Dequeue() int {
    if len(q.items)==0 {
        return -1
    } else {
        value :=q.items[0]
        q.items=q.items[1:]
        return value
    }
}

func main() {
    queue :=Queue{}
    queue.Enqueue(1)
    queue.Enqueue(2)
    queue.Enqueue(3)
    fmt.Println(queue.Dequeue())
    fmt.Println(queue.Dequeue())
    fmt.Println(queue.Dequeue())
}

二叉树

二叉树是由节点组成的树型数据结构,每个节点有两个子节点。Go语言中可以使用结构体来表示节点,并使用指针来连接节点。下面是一个包含插入和打印节点数据的二叉树示例:

package main

import "fmt"

type Node struct {
    value       int
    left, right *Node
}

type BinaryTree struct {
    root *Node
}

func (t *BinaryTree) Insert(value int) *Node {
    if t.root==nil {
        t.root=&Node{value: value}
        return t.root
    }

    return t.root.insert(value)
}

func (n *Node) insert(value int) *Node {
    if n==nil {
        return &Node{value: value}
    }

    if value < n.value {
        n.left=n.left.insert(value)
        return n.left
    } else {
        n.right=n.right.insert(value)
        return n.right
    }
}

func (t *BinaryTree) Print() {
    if t.root==nil {
        return
    }

    t.root.print()
    fmt.Println()
}

func (n *Node) print() {
    if n==nil {
        return
    }

    n.left.print()
    fmt.Print(n.value, " ")
    n.right.print()
}

func main() {
    tree :=BinaryTree{}
    tree.Insert(10)
    tree.Insert(20)
    tree.Insert(5)
    tree.Insert(7)
    tree.Insert(1)
    tree.Print()
}

总结

Go语言非常适合实现各种数据结构,包括链表、堆栈、队列和二叉树。链表和二叉树可以使用结构体和指针来实现,堆栈和队列可以使用切片来实现。这些数据结构的实现方式对于不同的问题有不同的适用性,需要根据实际需求进行选择。

文章评论