由于
golang
未封装stack相关的类,所以自行封装,不过go里面的list
可以实现stack的功能
list详解
下面两份代码实现功能相同
list实现
func main() {
list := list.New()
list.PushBack("bai")
list.PushBack("21")
list.PushBack("cn")
list.PushBack("com")
fmt.Println(list.Len())
fmt.Println(list.Back().Value)
fmt.Println(list.Remove(list.Back()))
fmt.Println(list.Len())
fmt.Println(list.Back().Value)
}
list实现stack后实现
type Stack struct {
list *list.List
}
func NewStack() *Stack {
//初始化list
list := list.New()
return &Stack{list}
}
func (stack *Stack) Push(value interface{}) {
stack.list.PushBack(value)
}
func (stack *Stack) Pop() interface{} {
v := stack.list.Back()
if v != nil {
stack.list.Remove(v)
return v.Value
}
return nil
}
func (stack *Stack) Peak() interface{} {
v := stack.list.Back()
if v != nil {
return v.Value
}
return nil
}
func (stack *Stack) Len() int {
return stack.list.Len()
}
func (stack *Stack) Empty() bool {
return stack.list.Len() == 0
}
func main() {
stack := NewStack()
stack.Push("bai")
stack.Push("21")
stack.Push("cn")
stack.Push("com")
fmt.Println(stack.Len())
fmt.Println(stack.Peak())
fmt.Println(stack.Pop())
fmt.Println(stack.Len())
fmt.Println(stack.Peak())
}
运行结果
4
com
com
3
cn