golang 实现栈数据结构

package main

import "fmt"

const initSize int=20 //定义常量栈的初始大小initSize为20

//栈结构体Stack
type Stack struct{
    size int //容量
    top int //栈顶
    data []interface{} //用切片data作容器,定义为interface{}类型的切片以接收任意类型
}

//创建并初始化栈方法createStack,返回Stack
func createStack() Stack{
    s:=Stack{} //声明Stack变量s,注意:声明结构体变量得加{}
    s.size=initSize
    s.top=-1
    s.data=make([]interface{},initSize)
    return s
}

//操作Stack的方法isEmpty判断栈是否为空
func(s *Stack) isEmpty() bool{
    return s.top==-1
}
func(s *Stack) isFull() bool{
    return s.top==s.size-1
}

//入栈
func(s *Stack) push(e interface{}) bool{
    if(s.isFull()){
        fmt.Println("Stack is full,push failed")
        return false
    }
    s.top++
    s.data[s.top]=e
    return true
}
//出栈
func(s *Stack) pop() interface{}{
    if(s.isEmpty()){
        fmt.Println("Stack is empty,pop failed")
        return nil
    }
    e:=s.data[s.top]
    s.top--
    return e
}

//栈已有元素的长度
func(s *Stack) getLength() int{
    length:=s.top+1
    return length
}

//清空栈
func(s *Stack) clear(){
    s.top=-1
}

//遍历栈
func(s *Stack) traverse(){
    if(s.isEmpty()){
        fmt.Println("Stack is empty")
    }else{  //注意这里的else不能换到下一行
        for i:=0;i<=s.top;i++{
            fmt.Print(s.data[i]," ")
        }
        fmt.Println()
    }
}

//打印栈的当前信息
func(s *Stack) printInfo(){
    fmt.Println("###############################################")
    fmt.Println("栈容量为:",s.size)
    fmt.Println("栈顶指数为:",s.top)
    fmt.Println("长度为:",s.getLength())
    fmt.Println("栈是否为空:",s.isEmpty())
    fmt.Println("栈是否为满:",s.isFull())
    fmt.Print("遍历栈:")
    s.traverse()
    fmt.Println("###############################################")
}


func main(){
    //初始情况测试
    s:=createStack()
    fmt.Println("栈创建成功:")
    s.printInfo()   
    fmt.Println()
    fmt.Println("---------------------------现在开始测试入栈-------------------------")
    fmt.Println("用10个int测试入栈:")
    for i:=0;i<10;i++{
        s.push(i)
    }
    s.printInfo()
    fmt.Println()

    fmt.Println("再加10个string入栈:")
    var str string="a"
    for i:=10;i<20;i++{
        s.push(str)
        str+="a"
    }
    s.printInfo()

    fmt.Println()
    fmt.Println("此时栈已满,再加一个int入栈试试:")
    s.push(21)
    s.printInfo()

    fmt.Println("-----------------------现在开始测试出栈----------------------------")
    fmt.Println("先pop一个出栈顶试试")
    fmt.Println("pop出的元素是:",s.pop())
    s.printInfo()

    fmt.Println()
    fmt.Println("清空栈")
    s.clear()
    s.printInfo()

    fmt.Println()
    fmt.Println("再pop一个试试")
    s.pop()
    s.printInfo()
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值