棧就像一個(gè)水杯后進(jìn)先出,棧的鏈?zhǔn)酱鎯?chǔ)中后進(jìn)去元素的next總是指向先進(jìn)去的元素, 棧頂元素總是和最后一個(gè)進(jìn)去的元素相同
type Elem int
// Node 元素節(jié)點(diǎn)結(jié)構(gòu)
type Node struct {
data Elem
next *Node
}
// StackLink 棧
type StackLink struct {
top? ? *Node // 棧頂元素
length int
}
// InitStack 初始化一個(gè)棧,棧先進(jìn)后出
func (s *StackLink) InitStack() {
s.top = nil
}
// Push 添加一個(gè)棧元素
func (s *StackLink) Push(data Elem) {
// 創(chuàng)造一個(gè)節(jié)點(diǎn)
node := new(Node)
node.data = data
node.next = s.top
s.top = node
s.length++
}
// Pop 彈出一個(gè)元素
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 棧的元素個(gè)數(shù)
func (s *StackLink) Length() int {
return s.length
}