| 123456789101112131415161718192021222324252627282930313233343536373839 |
- // 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
- }
|