super-graph/util/stack.go

50 lines
793 B
Go

package util
type (
Stack struct {
top *StackNode
length int
}
StackNode struct {
value interface{}
prev *StackNode
}
)
// Create a new Stack
func NewStack() *Stack {
return &Stack{nil, 0}
}
// Return the number of items in the Stack
func (this *Stack) Len() int {
return this.length
}
// View the top item on the Stack
func (this *Stack) Peek() interface{} {
if this.length == 0 {
return nil
}
return this.top.value
}
// Pop the top item of the Stack and return it
func (this *Stack) Pop() interface{} {
if this.length == 0 {
return nil
}
n := this.top
this.top = n.prev
this.length--
return n.value
}
// Push a value onto the top of the Stack
func (this *Stack) Push(value interface{}) {
n := &StackNode{value, this.top}
this.top = n
this.length++
}