node通过prev字段进行关联,stack维护栈顶节点
stack.go
package stack type Stack struct { top *node length int } type node struct { value interface{} prev *node } // 创建一个栈 func New() *Stack { return &Stack{nil,0} } // 取栈长度 func (s *Stack) Len() int { return s.length } // 查看栈顶元素 func (s *Stack) Peek() interface{} { if s.length == 0 { return nil } return s.top.value } // 出栈 func (s *Stack) Pop() interface{} { if s.length == 0 { return nil } n := s.top s.top = n.prev s.length-- return n.value } // 入栈 func (s *Stack) Push(value interface{}) { n := &node{value,s.top} s.top = n s.length++ }
main.go
package main import ( "./stack" "fmt" ) func main() { st := stack.New() st.Push(111) st.Push(222) fmt.Println(st.Peek(),st.Len()) item := st.Pop() fmt.Println(item) fmt.Println(st.Peek(),st.Len()) }
输出:
222 2 222 111 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。