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

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

**这个程序有问题,将元素入栈时,会覆盖第一个元素,最后栈中只留下一个2,求大神解答** ```go 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

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