go语言实现链式栈

£可爱£侵袭症+ 提交于 2019-11-29 00:53:29

haa哈哈==

import "errors"

var (
    // ErrEmpty 栈为空
    ErrEmpty = errors.New("stack is empty")
)

// StackNode 栈节点
type StackNode struct {
    el      interface{}           // 可以存储任何类型数据
    next    *StackNode
}

// LinkStack 栈空间
type LinkStack struct {
    top     *StackNode
    count   int
}

// New 栈初始化
func New() *LinkStack {
    return new(LinkStack)          // new() 方法刚好返回指针
}

// Push 入栈
func (l *LinkStack) Push(el interface{}) (err error) {
    s := StackNode{el: el, next: l.top}
    l.top = &s
    l.count++
    return
}

// Pop 出栈
func (l *LinkStack) Pop() (el interface{}, err error) {
    if l.count == 0 {
        return el, ErrEmpty
    }

    l.count--
    el = l.top.el
    l.top = l.top.next 
 
    return
}

// Length 获取栈长度
func (l *LinkStack) Length() int {
    return l.count
}

// Empty 判断栈是否为空
func (l *LinkStack) Empty() bool {
    if l.count == 0 {
        return true
    }
    return false
}

// Clear 清空栈
func (l *LinkStack) Clear() {
    l.count = 0
    l.top = nil
}

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!