package main
import "fmt"
type Stack struct {
data []int
}
func NewStack() *Stack {
return &Stack{}
}
func (s *Stack) Show() {
fmt.Printf("showing stack\n---\n")
for i := len(s.data) - 1; i >= 0; i-- {
fmt.Printf("|%d|\n", s.data[i])
fmt.Println("|-|")
}
}
func (s *Stack) push(x int) {
s.data = append(s.data, x)
}
func (s *Stack) pop() {
if len(s.data) != 0 {
s.data = s.data[:len(s.data)-1]
}
}
func (s Stack) top() int {
fmt.Println(s.data[len(s.data)-1])
return s.data[len(s.data)-1]
}
func (s Stack) isEmpty() bool {
return len(s.data) == 0
}
func main() {
s := NewStack()
fmt.Println("Stack Empty:", s.isEmpty())
s.push(5)
s.push(3)
s.push(8)
s.Show()
s.pop()
s.Show()
s.top()
fmt.Println("Stack Empty:", s.isEmpty())
}