Go中的LIFO容器

时间:2013-07-02 20:13:44

标签: go

我需要使用带有推送和弹出操作的LIFO堆栈容器,但container包没有。是应该由每个程序员临时写入,还是有办法将其他数据结构用作堆栈(如python中的list)?

3 个答案:

答案 0 :(得分:6)

Go或标准库中没有内置堆栈类型。但是,您可以非常简单地将Push和Pop方法添加到切片中(与python中列表中的现有方法不同)。

type Stack []YourType

func (s *Stack) Push(v YourType) {
    *s = append(*s, v)
}

func (s *Stack) Pop() YourType {
    ret := (*s)[len(*s)-1]
    *s = (*s)[0:len(*s)-1]
    return ret
}

非常简单

答案 1 :(得分:1)

stdlib中没有container个包。然而,LIFO只是一个堆栈,它很容易通过例如切片来建模。因此没有stdlib LIFO容器。

答案 2 :(得分:0)

stack是列表的一个子集,golang具有容器/列表库,很容易实现堆栈,这里有一个例子。

//last in first out
    stack := list.New()
    //stack push use PushBack
    for i:=0;i<100;i++ {
        stack.PushBack(i)
    }
    //stack get top use stack.Back()
    //stack pop use stack.Remove(stack.Back())
    //stack isEmpty use stack.Back() == nil 
    for stack.Back()!=nil {
        fmt.Println(stack.Back().Value)
        stack.Remove(stack.Back())
    }