package main
import "fmt"
type ListStack struct {
top int
stack []interface{}
length int
maxSize int
}
func NewListStack(maxSize int) ListStack {
return ListStack{
top: -1,
stack: make([]interface{}, maxSize),
length: 0,
maxSize: maxSize,
}
}
func (s *ListStack) Clear() {
s.length = 0
s.stack = make([]interface{}, s.maxSize)
s.top = -1
}
func (s *ListStack) Empty() bool {
return s.top == -1
}
func (s *ListStack) Get() interface{} {
if s.Empty() {
panic("栈为空")
}
return s.stack[s.top]
}
func (s *ListStack) Push(data interface{}) {
if s.top == s.maxSize - 1 {
panic("栈已满")
}
s.top++
s.stack[s.top] = data
s.length++
}
func (s *ListStack) Pop() interface{} {
if s.Empty() {
panic("栈为空")
}
data := s.stack[s.top]
s.top--
s.length--
return data
}
func (s *ListStack) Length() int {
return s.length
}
func main(){
stack := NewListStack(3)
stack.Push(19)
stack.Push(18)
stack.Push(17)
fmt.Println("是否为空", stack.Empty())
fmt.Println("长度", stack.Length())
stack.Clear()
fmt.Println(stack.Pop())
}