分享
  1. 首页
  2. 文章

Go实现数据结构--栈

阿鸠先生 · · 1088 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

使用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()
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:阿鸠先生

查看原文:Go实现数据结构--栈

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1088 次点击
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏