美文网首页
golang 写个栈(Stack)数据结构

golang 写个栈(Stack)数据结构

作者: 小风吹的我乱了 | 来源:发表于2019-04-16 22:37 被阅读0次

    golang暂未有内置的Stack数据结构,工作需要就“借鉴”他人写了个

    import "container/list"
    
    type Stack struct {
        list *list.List
    }
    
    func New() *Stack {
        list := list.New()
        return &Stack{
            list: list,
        }
    }
    
    func (p *Stack) Push(v interface{}) {
        p.list.PushBack(v)
    }
    
    func (p *Stack) Pop() (interface{}, bool) {
        e := p.list.Back()
        if e != nil {
            p.list.Remove(e)
            return e.Value, true
        }
        return nil, false
    }
    
    func (p *Stack) Top() (interface{}, bool) {
        e := p.list.Back()
        if e != nil {
            return e.Value, true
        }
        return nil, false
    }
    
    func (p *Stack) Len() int {
        return p.list.Len()
    }
    
    func (p *Stack) Empty() bool {
        return p.list.Len() == 0
    }
    

    原理就是利用内置的list数据结构的PushBack,Remove等方法组合来实现进栈、出栈等操作
    测试代码如下

    func main() {
        s := stack.New()
    
        s.Push("hello")
        s.Push("world")
    
        v, ok := s.Pop()
        fmt.Println(v, ok)
    
        v, ok = s.Pop()
        fmt.Println(v, ok)
    
        v, ok = s.Pop()
        fmt.Println(v, ok)
    }
    

    输出:

    world true
    hello true
    <nil> false
    

    相关文章

      网友评论

          本文标题:golang 写个栈(Stack)数据结构

          本文链接:https://www.haomeiwen.com/subject/dmqwwqtx.html