求教数据结构,golang实现出栈入栈覆盖第一个元素

yinshidaoshi · 2018-01-24 17:05:46 · 1485 次点击 · 预计阅读时间 2 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2018-01-24 17:05:46 的文章,其中的信息可能已经有所发展或是发生改变。

这个程序有问题,将元素入栈时,会覆盖第一个元素,最后栈中只留下一个2,求大神解答

package main



import (
    "log"
    "fmt"
)

type Stack struct {
    size int64 //栈的容量
    top int64 //栈顶
    data []interface{}
}

func MakeStack( size int64)  Stack{

    s :=Stack{}
    s.size=size
    s.data =make([]interface{},size)

    return s
}

//入栈,空间不足,逐段升高

func (s *Stack) Push(e interface{})  bool{


    if  s.IsFull(){
        log.Printf("栈满,无法入栈")
     return false

    }

    s.data[s.top]=e
    fmt.Println(s.top)
    s.top++

    return true
}
//出栈,栈顶降低
func (s *Stack) Pop()  (r interface{},err error){

    if s.IsEmpty() {
        err =fmt.Errorf("栈已空,无法完成出栈")
        log.Printf("栈已空,无法完成出栈")
        return
    }
    s.top--
    r =s.data[s.top]
    return
}




//判断栈是否满
func (s *Stack) IsFull()  bool{

    return s.top==s.size
}

//判断栈是否为空
func (s *Stack) IsEmpty()  bool{

    return s.top==0
}

func (s *Stack) Traverse(fn func(r interface{}),goorto bool)  {


    //go true遍历进栈   false 遍历出栈
    if goorto {
  var i  int64= 0
        for ;i<s.top;i++ {
            fn(s.data[i])

        }


    }else{

        for i:=s.top-1;i>=0;i-- {
            fn(s.data[i])
        }
    }

}


//进栈出栈试验
//求将十进制1348转化为八进制

func TestStack()  {


    var fn_c = func(n int) {

        s :=MakeStack(10)

        for   {
            if n==0 {
                break
            }
            s.Push(n%8)
            n =n/8

        }
        s.Traverse(func(r interface{}) {
            fmt.Print(r)
        },false)


    }

    fn_c(1348)

}


func main() {

    TestStack()

}

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

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

1485 次点击  
加入收藏 微博
1 回复  |  直到 2018-01-24 17:31:42
yinshidaoshi
yinshidaoshi · #1 · 7年之前

问题找到了,方法传入的是Stack,应该传入*Stack,还是想问一下什么情况下传入指针

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