golang 写个栈(Stack)数据结构

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • This chapter describes some things you’ve learned about a...
    linyk3阅读 673评论 1 1
  • 3. 1 抽象数据类型 抽象数据类型(abstractdata type, ADT)是带有一组操作的一些对象的集合...
    好好学习Sun阅读 849评论 0 1
  • 在一个方法内部定义的变量都存储在栈中,当这个函数运行结束后,其对应的栈就会被回收,此时,在其方法体中定义的变量将不...
    Y了个J阅读 4,462评论 1 14
  • 推荐一些视频或综艺: 大多数大家都知道的我就不提了 推荐的一般都是我觉得挺好的up主或综艺 根据兴趣自行关注 #关...
    Axeya阅读 629评论 0 0
  • 雾霾加重,寒冬来临,让我不由想起今年的夏天。 大概是今年六一儿童节期间的一个周末,回家正赶上小侄女的六一演...
    中华树根阅读 126评论 0 0