使用golang语言的interface接口类型创建栈,栈可以操作各种数据类型,非常简洁方便
package main
import "fmt"
// 栈:先进后出,从栈顶取数据,栈低固定
type Stack struct {
Top int // 栈顶
Capacity int // 栈容量
Prt *[]interface{} // 指向栈指针
}
// 初始化栈
func (s *Stack) StackInitial(capacity int){
s.Capacity =capacity
s.Top =0
// 使用interface类型,所有数据类型都能兼容
m:= make([]interface{},capacity)
s.Prt =&m
}
// 元素入栈,栈顶上升
func (s *Stack) StackPush(em interface{})bool{
// 判满
if s.StackIsFull(){
fmt.Println("The stack is full")
return false
}else {
// 放入栈顶
(*s.Prt)[s.Top] = em
s.Top++
return true
}
}
// 元素出栈,栈顶下降
func (s *Stack) StackPop()(interface{},bool){
// 判空
if s.StackIsEmpty(){
fmt.Println("The stack is empty")
return nil,false
}else {
// 取栈顶
s.Top--
em:= (*s.Prt)[s.Top]
return em, true
}
}
// 判空
func (s *Stack) StackIsEmpty()bool{
if s.Top==0 {
return true
}else {
return false
}
}
// 判满
func (s *Stack) StackIsFull()bool{
if s.Top== s.Capacity{
return true
}else {
return false
}
}
func (s *Stack) StackClear(){
// 直接将栈顶置0
s.Top=0
}
// 栈遍历,从栈顶先出
func (s *Stack) StackTraverse(){
for i:=s.Top-1;i>=0;i--{
fmt.Println((*s.Prt)[i])
}
}
func main(){
var mystack Stack
mystack.StackInitial(4)
// true
fmt.Println(mystack.StackIsEmpty())
// false
fmt.Println(mystack.StackIsFull())
type s struct {
name string
age int
}
student1 := s{name: "abc", age: 10}
student2 := s{name: "efg", age: 10}
// 插入结构体类型
mystack.StackPush(student1)
// false
fmt.Println(mystack.StackIsEmpty())
mystack.StackPush(student2)
// 插入整数类型
mystack.StackPush(100)
// 插入字符串类型
mystack.StackPush("abcdef")
// true
fmt.Println(mystack.StackIsFull())
// The stack is full
mystack.StackPush("abcdefdd")
// 遍历
mystack.StackTraverse()
em,_ := mystack.StackPop()
//
fmt.Println("出栈的元素:",em)
// 遍历
mystack.StackTraverse()
}
有疑问加站长微信联系(非本文作者)