美文网首页
004 go语言实现栈

004 go语言实现栈

作者: 愚蠢的二师弟 | 来源:发表于2020-03-15 19:08 被阅读0次
1 数据结构

数据结构:

type Stack struct {
    size int64 //容量
    top  int64 //栈顶
    data []interface{}
}

要实现的功能:
0 栈的初始化
1 获取栈长度
2 入栈
3 出栈
4 清空栈内容
5 判断栈是否为空
6 判断栈是否已满
7 展示所有的内容

2 功能的具体实现
2.0 思路

我们假定栈的容量 size 为5,
第一个元素, 放到下标 index 为 0 的位置, 然后top 移动到 1
第二个元素, 放到下标 index 为 1 的位置, 然后top 移动到 2
...
第5个元素, 放到下标 index 为 4 的位置, 然后top 移动到 5 , 此时 , size = top
所以 , 判断栈是否满 可以通过 size =top 来判断

top = index +1
出栈的时候, top 先 -1, 在从 data 数组中取值
当 top = 0的时候, 栈就空了

2.1栈的初始化

size 为栈的容量
top 表示栈最后一个元素所处的位置, 0表示栈底

func MakeStack(size int64) Stack {
    s := Stack{}
    s.size = size
    s.data = make([]interface{}, size)
    s.top = 0
    return s
}
2.1入栈

1 刚开始时, 栈的top 为0 , 所以 , 入栈的时候, 先把 元素加入到data中, 在把 top++

func (t *Stack) Push(data interface{}) bool {
    if t.isFull() {
        fmt.Println("栈已满, 无法加入新元素")
        return false
    }
    t.data[t.top] = data
    t.top++
    return true
}

判断栈是否已满

func (t *Stack) isFull() bool {
    return t.top == t.size
}
2.2出栈
func (t *Stack) Pop() (r interface{}, err error) {
    if t.isEmpty() {
        err = fmt.Errorf("栈已空,无法继续弹出")
        log.Println("栈已空,无法继续弹出")
        return
    }
    t.top--
    r = t.data[t.top]
    return
}

判断栈是否为空

func (t *Stack) isEmpty() bool {
    return t.top == 0
}
2.3 清空和展示栈的所有内容

//Clear  清空栈
func (t *Stack) Clear() {
    t.top = 0
}

// Show 展示所有内容
func (t *Stack) Show() {
    var i int64 = 0
    for ; i < t.top; i++ {
        fmt.Println(t.data[i])
    }
}

相关文章

  • 004 go语言实现栈

    1 数据结构 数据结构: 要实现的功能:0 栈的初始化1 获取栈长度2 入栈3 出栈4 清空栈内容5 判断栈是否为...

  • Go语言数据结构和算法-使用Slice实现栈

    Go语言数据结构和算法-使用Slice实现栈 栈是Last-In-First-Out (LIFO)(后进先出)的数...

  • go语言实现栈

    ``` package main import "fmt" /* 栈结构*/ type Stackstruct {...

  • 优秀网站

    一.语言栈 GO go 博客 Go中国 zupzup : web Ewan : 微服务 go开源项目 Beego:...

  • golang内存逃逸

    一篇很好的博客: Go 语言机制之栈与指针 Go 语言机制之逃逸分析 Go 语言机制之内存剖析 Go 语言机制之数...

  • Go语言实现TCP通信

    章节 go 优势 go 实现 TCP 通信 1 go 语言优势 1.1 go 语言优势 2 go 实现TCP通信 ...

  • Go 学习

    go语言局部变量分配在栈还是堆Golang 垃圾回收剖析go语言坑之for range

  • 使用 ScopeGuard 让代码更加安全可靠

    ScopeGuard用于实现Go语言中defer的功能。其主要思想和ScopeLock类似,即利用C++栈展开机制...

  • 3. 栈的操作

    1. 栈的操作-c语言实现2. 栈操作的实现-顺序栈和链栈 3. 栈的实现与遍历4. c语言的函数调用栈5. 两个...

  • GO语言实现堆、栈、队列、优先级队列

    前言 C++、java等语言都实现了栈、堆、队列、优先级队列等。但是Go语言却没有。我们在实际使用中却是需要这些基...

网友评论

      本文标题:004 go语言实现栈

      本文链接:https://www.haomeiwen.com/subject/kbqmehtx.html