go 实现栈 + leetcode 20

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

# go 实现栈 数据结构栈,主要就是 pop&push, 其他的属性和功能都是服务于pop&push的 ## code 以一个存储字符byte的栈为例 ```go type Stack struct { data []byte top int size int } func NewStack() *Stack { return &Stack{ data: make([]byte, 0), top: 0, } } // 如果有必要可以再维护一个size来限制栈的最大长度 func (s *Stack) IsFull() bool { if s.top == s.size { return true } return false } func (s *Stack) IsEmpty() bool { if s.top == 0 { return true } return false } func (s *Stack) Push(e byte) bool { s.data = append(s.data, e) s.top++ return true } func (s *Stack) Pop() (flag bool, ret byte) { if s.IsEmpty() { return false, ret } ret = s.data[s.top-1] s.data = s.data[:s.top-1] s.top-- return true, ret } ``` ## leetCode20 接下来使用上面实现的栈来解一道简单的题目 ```go type Stack struct { data []byte top int size int } func NewStack() *Stack { return &Stack{ data: make([]byte, 0), top: 0, } } func (s *Stack) IsFull() bool { if s.top == s.size { return true } return false } func (s *Stack) IsEmpty() bool { if s.top == 0 { return true } return false } func (s *Stack) Push(e byte) bool { s.data = append(s.data, e) s.top++ return true } func (s *Stack) Pop() (flag bool, ret byte) { if s.IsEmpty() { return false, ret } ret = s.data[s.top-1] s.data = s.data[:s.top-1] s.top-- return true, ret } func isValid(s string) bool { stack := NewStack() for i := 0; i < len(s); i++ { if s[i] == '(' { stack.Push(s[i]) } if s[i] == ')' { if flag, top := stack.Pop(); flag == true && top == '(' { continue } else { return false } } if s[i] == '{' { stack.Push(s[i]) } if s[i] == '}' { if flag, top := stack.Pop(); flag == true && top == '{' { continue } else { return false } } if s[i] == '[' { stack.Push(s[i]) } if s[i] == ']' { if flag, top := stack.Pop(); flag == true && top == '[' { continue } else { return false } } } if stack.IsEmpty() { return true } return false } ```

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

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

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