使用Golang实现栈的链式存储

栈就像一个水杯后进先出,栈的链式存储中后进去元素的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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值