mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 04:48:29 +08:00
40 lines
762 B
Go
Executable File
40 lines
762 B
Go
Executable File
// stack.go
|
|
package stack
|
|
|
|
import "errors"
|
|
|
|
type Stack []interface{}
|
|
|
|
func (stack Stack) Len() int {
|
|
return len(stack)
|
|
}
|
|
|
|
func (stack Stack) Cap() int {
|
|
return cap(stack)
|
|
}
|
|
|
|
func (stack Stack) IsEmpty() bool {
|
|
return len(stack) == 0
|
|
}
|
|
|
|
func (stack *Stack) Push(e interface{}) {
|
|
*stack = append(*stack, e)
|
|
}
|
|
|
|
func (stack Stack) Top() (interface{}, error) {
|
|
if len(stack) == 0 {
|
|
return nil, errors.New("stack is empty")
|
|
}
|
|
return stack[len(stack)-1], nil
|
|
}
|
|
|
|
func (stack *Stack) Pop() (interface{}, error) {
|
|
stk := *stack // dereference to a local variable stk
|
|
if len(stk) == 0 {
|
|
return nil, errors.New("stack is empty")
|
|
}
|
|
top := stk[len(stk)-1]
|
|
*stack = stk[:len(stk)-1] // shrink the stack
|
|
return top, nil
|
|
}
|