使用Golang实现栈的链式存储

版权声明:转载请标明出处,原文来源:https://www.xiaodingchen.cn https://blog.csdn.net/github_39430096/article/details/78312585

栈就像一个水杯后进先出,栈的链式存储中后进去元素的next总是指向先进去的元素, 栈顶元素总是和最后一个进去的元素相同

type Elem int

// Node 元素节点结构
type Node struct {
    data Elem
    next *Node
}

// StackLink 栈
type StackLink struct {
    top    *Node // 栈顶元素
    length int
}

// InitStack 初始化一个栈,栈先进后出
func (s *StackLink) InitStack() {
    s.top = nil
}

// Push 添加一个栈元素
func (s *StackLink) Push(data Elem) {
    // 创造一个节点
    node := new(Node)
    node.data = data
    node.next = s.top
    s.top = node
    s.length++
}

// Pop 弹出一个元素
func (s *StackLink) Pop(e *Elem) error {
    if s.Empty() {
        return errors.New("empty stack")
    }

    *e = s.top.data
    node := s.top
    s.top = node.next
    s.length--

    return nil
}

// Empty 是否为空栈
func (s *StackLink) Empty() bool {
    return s.top == nil
}

// Length 栈的元素个数
func (s *StackLink) Length() int {
    return s.length
}

猜你喜欢

转载自blog.csdn.net/github_39430096/article/details/78312585