123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package diffmatchpatch
- import (
- "fmt"
- )
- type Stack struct {
- top *Element
- size int
- }
- type Element struct {
- value interface{}
- next *Element
- }
- // Len returns the stack's length
- func (s *Stack) Len() int {
- return s.size
- }
- // Push appends a new element onto the stack
- func (s *Stack) Push(value interface{}) {
- s.top = &Element{value, s.top}
- s.size++
- }
- // Pop removes the top element from the stack and return its value
- // If the stack is empty, return nil
- func (s *Stack) Pop() (value interface{}) {
- if s.size > 0 {
- value, s.top = s.top.value, s.top.next
- s.size--
- return
- }
- return nil
- }
- // Peek returns the value of the element on the top of the stack
- // but don't remove it. If the stack is empty, return nil
- func (s *Stack) Peek() (value interface{}) {
- if s.size > 0 {
- value = s.top.value
- return
- }
- return -1
- }
- // Clear empties the stack
- func (s *Stack) Clear() {
- s.top = nil
- s.size = 0
- }
- func main() {
- stack := new(Stack)
- stack.Push("Things")
- stack.Push("and")
- stack.Push("Stuff")
- for stack.Len() > 0 {
- fmt.Printf("%s ", stack.Pop().(string))
- }
- fmt.Println()
- }
|