Go实现数据结构--栈

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

使用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

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