pairstack.go 801 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package main
  2. // Pair ...
  3. type Pair struct {
  4. _1 int
  5. _2 int
  6. }
  7. // Equals ...
  8. func (p1 Pair) Equals(p2 Pair) bool {
  9. return p1._1 == p2._1 && p1._2 == p2._2
  10. }
  11. // PairStack ...
  12. type PairStack []Pair
  13. // Len ...
  14. func (ps PairStack) Len() int { return len(ps) }
  15. func (ps PairStack) Less(i, j int) bool {
  16. if ps[i]._1 == ps[j]._1 {
  17. return ps[i]._2 < ps[j]._2
  18. }
  19. return ps[i]._1 < ps[j]._1
  20. }
  21. func (ps PairStack) Swap(i, j int) { ps[i], ps[j] = ps[j], ps[i] }
  22. // Top ...
  23. func (ps PairStack) Top() Pair {
  24. return ps[len(ps)-1]
  25. }
  26. // Empty ...
  27. func (ps PairStack) Empty() bool {
  28. return len(ps) == 0
  29. }
  30. // Push ...
  31. func (ps *PairStack) Push(p interface{}) {
  32. *ps = append(*ps, p.(Pair))
  33. }
  34. // Pop ...
  35. func (ps *PairStack) Pop() interface{} {
  36. x := (*ps)[len(*ps)-1]
  37. *ps = (*ps)[:len(*ps)-1]
  38. return x
  39. }