package main
import "fmt"
type Stack struct {
element []int
}
//创建一个新栈
func NewStack()*Stack{
return &Stack{}
}
//判断栈是否为空
func (s *Stack)IsEmpty()bool{
if len(s.element) == 0 {
return true
}else {
return false
}
}
//求栈的长度
func (s *Stack)GetStackLength()int{
return len(s.element)
}
//进栈操作
func (s *Stack)Push(value int) {
s.element = append(s.element, value)
}
//获取栈顶元素
func (s *Stack)Top()(int, bool) {
if s.IsEmpty() {
return -1, false
}else{
return s.element[s.GetStackLength()-1], true
}
}
//出栈操作
func (s *Stack)Pop()bool{
if s.IsEmpty(){
return false
}else{
s.element = s.element[:s.GetStackLength()-1]
}
return true
}
//打印堆栈
func (s *Stack)Print(){
for i := s.GetStackLength()-1;i >= 0;i--{
fmt.Printf("%d ", s.element[i])
}
fmt.Printf("\n")
}
func main(){
stack := NewStack()
stack.Push(1)
stack.Push(3)
stack.Push(5)
stack.Push(7)
fmt.Printf("stack size = %d\n", stack.GetStackLength())
stack.Print()
stack.Pop()
stack.Print()
top,_ := stack.Top()
fmt.Printf("%d\n", top)
}