package main // Stack ... type Stack []int func (s Stack) Len() int { return len(s) } func (s Stack) Less(i, j int) bool { return s[i] < s[j] } func (s Stack) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // Top ... func (s Stack) Top() int { return s[len(s)-1] } // Empty ... func (s Stack) Empty() bool { return len(s) == 0 } // Push ... func (s *Stack) Push(val interface{}) { *s = append(*s, val.(int)) } // Pop ... func (s *Stack) Pop() interface{} { top := s.Top() *s = (*s)[:len(*s)-1] return top } // Stack64 ... type Stack64 []int64 func (s Stack64) Len() int { return len(s) } func (s Stack64) Less(i, j int) bool { return s[i] < s[j] } func (s Stack64) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // Top ... func (s Stack64) Top() int64 { return s[len(s)-1] } // Empty ... func (s Stack64) Empty() bool { return len(s) == 0 } // Push ... func (s *Stack64) Push(val interface{}) { *s = append(*s, val.(int64)) } // Pop ... func (s *Stack64) Pop() interface{} { top := s.Top() *s = (*s)[:len(*s)-1] return top }