| 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() |
| } |