package main
import "fmt"
//逻辑结构: 只允许在栈顶进行插入和删除的线性表
type Stack struct {
top int //栈顶指针
data []interface{} //数据元素
}
//初始化
func (s *Stack) InitList(maxSize int) {
s.data = make([]interface{}, maxSize)
s.top = -1
}
// 判空
func (s Stack) isNull() bool {
if s.top != -1 {
return false
}
return true
}
// 判满
func (s Stack) isFull() bool {
if s.top < cap(s.data)-1 {
return false
}
return true
}
// 压入
func (s *Stack) Push(Element interface{}) bool {
if s.isFull() {
return false
}
s.top++
s.data[s.top] = Element
return true
}
// 压出
func (s *Stack) Pop() (interface{}, bool) {
if s.isNull() {
return nil, false
}
e := s.data[s.top]
s.top--
return e, true
}
//获取栈顶元素
func (s Stack) GetTop() (interface{}, bool) {
if s.isNull() {
return nil, false
}
e := s.data[s.top]
return e, true
}
func main() {
s := Stack{}
s.InitList(10)
fmt.Println(s.isNull())
fmt.Println(s.isFull())
s.Push(1)
s.Push(2)
s.Push(3)
fmt.Println(s.isNull())
fmt.Println(s.isFull())
s.Pop()
s.Pop()
s.Pop()
fmt.Println(s.isNull())
fmt.Println(s.isFull())
s.GetTop()
}
golang 实现数据结构-顺序栈
最新推荐文章于 2024-07-18 11:18:19 发布