004 go语言实现栈

2020-03-15  本文已影响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])
    }
}

上一篇 下一篇

猜你喜欢

热点阅读