go语言实现链式栈

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
}

  

猜你喜欢

转载自www.cnblogs.com/skzxc/p/11385547.html