我需要使用 LIFO 堆栈容器进行推送和弹出操作,但container
包没有。它应该由每个程序员临时编写,还是有一种方法可以使用其他数据结构作为堆栈(如 python 中的列表)?
问问题
1755 次
3 回答
9
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
}
很简单
于 2013-07-02T20:18:38.373 回答
2
stack是list的一个子集,golang有container/list库,实现stack很简单,这里举个例子。</p>
//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())
}
于 2019-06-04T07:14:58.193 回答
1
标准库中没有container
包。然而,LIFO 只是一个堆栈,它很容易通过例如切片来建模。因此没有 stdlib LIFO 容器。
于 2013-07-02T20:17:47.860 回答