Golang实战:数据结构与算法入门指南

Golang实战:数据结构与算法入门指南 我的Packt出版社书籍现已开放抢先体验。《Go语言实战:数据结构与算法》。查看:

直接链接:

packtpub.com

Mapt链接(需要Mapt账户登录):

packtpub.com

本书代码位于:

GitHub

近期书籍反馈:

"请问您的书籍PDF版本何时发布?从GitHub上的代码来看,这本书似乎包含了大量优秀的Go语言数据结构和算法学习示例。我真心认为这正是能让我提升到新水平所需的书籍类型。

此致"

"我一直在用Python准备面试,但非常希望用Go完成所有内容。

我很期待这本书"

"这看起来令人兴奋。我一直在寻找Go语言的算法书籍,而您的书看起来特别符合需求,尤其是包含了其他书籍通常忽略的算法(比如内存管理算法)。

不过过去我曾购买过一些最终让我后悔的书籍。

因此,我现在采取的政策是只购买那些提供免费试读章节的书籍,以便提前评估是否适合我。

您的书籍是否有提供免费章节?"


更多关于Golang实战:数据结构与算法入门指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang实战:数据结构与算法入门指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


以下是Go语言中常见数据结构与算法的实现示例,涵盖数组、链表、栈、队列和快速排序算法。这些代码可以直接运行,帮助理解基础概念。

1. 动态数组(Slice)

Go的切片是动态数组,支持自动扩容:

package main

import "fmt"

func main() {
    // 创建切片
    arr := make([]int, 0, 5)
    
    // 添加元素
    arr = append(arr, 1, 2, 3)
    fmt.Println("Array:", arr) // [1 2 3]
    
    // 访问元素
    fmt.Println("First element:", arr[0]) // 1
    
    // 切片操作
    subArr := arr[1:3]
    fmt.Println("Subarray:", subArr) // [2 3]
}

2. 链表实现

单链表的基本操作:

package main

import "fmt"

type Node struct {
    data int
    next *Node
}

type LinkedList struct {
    head *Node
}

// 添加节点到链表末尾
func (ll *LinkedList) Append(data int) {
    newNode := &Node{data: data}
    
    if ll.head == nil {
        ll.head = newNode
        return
    }
    
    current := ll.head
    for current.next != nil {
        current = current.next
    }
    current.next = newNode
}

// 打印链表
func (ll *LinkedList) Print() {
    current := ll.head
    for current != nil {
        fmt.Printf("%d -> ", current.data)
        current = current.next
    }
    fmt.Println("nil")
}

func main() {
    ll := &LinkedList{}
    ll.Append(1)
    ll.Append(2)
    ll.Append(3)
    ll.Print() // 1 -> 2 -> 3 -> nil
}

3. 栈实现

使用切片实现栈:

package main

import "fmt"

type Stack struct {
    items []int
}

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

func (s *Stack) Pop() int {
    if len(s.items) == 0 {
        return -1 // 栈空
    }
    
    lastIndex := len(s.items) - 1
    item := s.items[lastIndex]
    s.items = s.items[:lastIndex]
    return item
}

func (s *Stack) IsEmpty() bool {
    return len(s.items) == 0
}

func main() {
    stack := &Stack{}
    stack.Push(1)
    stack.Push(2)
    stack.Push(3)
    
    fmt.Println("Popped:", stack.Pop()) // 3
    fmt.Println("Popped:", stack.Pop()) // 2
}

4. 队列实现

使用切片实现队列:

package main

import "fmt"

type Queue struct {
    items []int
}

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

func (q *Queue) Dequeue() int {
    if len(q.items) == 0 {
        return -1 // 队列空
    }
    
    item := q.items[0]
    q.items = q.items[1:]
    return item
}

func (q *Queue) IsEmpty() bool {
    return len(q.items) == 0
}

func main() {
    queue := &Queue{}
    queue.Enqueue(1)
    queue.Enqueue(2)
    queue.Enqueue(3)
    
    fmt.Println("Dequeued:", queue.Dequeue()) // 1
    fmt.Println("Dequeued:", queue.Dequeue()) // 2
}

5. 快速排序算法

递归实现快速排序:

package main

import "fmt"

func quickSort(arr []int) []int {
    if len(arr) < 2 {
        return arr
    }
    
    pivot := arr[0]
    var less, greater []int
    
    for _, num := range arr[1:] {
        if num <= pivot {
            less = append(less, num)
        } else {
            greater = append(greater, num)
        }
    }
    
    sorted := append(quickSort(less), pivot)
    sorted = append(sorted, quickSort(greater)...)
    return sorted
}

func main() {
    arr := []int{9, 3, 7, 5, 6, 4, 8, 2}
    sorted := quickSort(arr)
    fmt.Println("Sorted array:", sorted) // [2 3 4 5 6 7 8 9]
}

这些示例展示了Go语言在数据结构和算法实现中的简洁语法特性,如切片操作、结构体方法和递归调用。实际开发中可以根据需要优化这些基础实现。

回到顶部