stack.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package main
  2. // Stack ...
  3. type Stack []int
  4. func (s Stack) Len() int { return len(s) }
  5. func (s Stack) Less(i, j int) bool { return s[i] < s[j] }
  6. func (s Stack) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  7. // Top ...
  8. func (s Stack) Top() int {
  9. return s[len(s)-1]
  10. }
  11. // Empty ...
  12. func (s Stack) Empty() bool {
  13. return len(s) == 0
  14. }
  15. // Push ...
  16. func (s *Stack) Push(val interface{}) {
  17. *s = append(*s, val.(int))
  18. }
  19. // Pop ...
  20. func (s *Stack) Pop() interface{} {
  21. top := s.Top()
  22. *s = (*s)[:len(*s)-1]
  23. return top
  24. }
  25. // Stack64 ...
  26. type Stack64 []int64
  27. func (s Stack64) Len() int { return len(s) }
  28. func (s Stack64) Less(i, j int) bool { return s[i] < s[j] }
  29. func (s Stack64) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  30. // Top ...
  31. func (s Stack64) Top() int64 {
  32. return s[len(s)-1]
  33. }
  34. // Empty ...
  35. func (s Stack64) Empty() bool {
  36. return len(s) == 0
  37. }
  38. // Push ...
  39. func (s *Stack64) Push(val interface{}) {
  40. *s = append(*s, val.(int64))
  41. }
  42. // Pop ...
  43. func (s *Stack64) Pop() interface{} {
  44. top := s.Top()
  45. *s = (*s)[:len(*s)-1]
  46. return top
  47. }