作者简介:

       姜海强:闷骚码农,互联网行业摸爬滚打数余载,先后担任中国体育直播TV主程、网信集团先锋支付架构师、奇虎360服务器端资深开发。热爱技术,喜欢分享,热衷领域:PHP/Golang语言、面向对象设计模式、Redis、Yaf、Yii2、微服务等。

视频课程

yaf+yar微服务-腾讯课堂
yaf+yar微服务-51CTO学院
CSDN学院

Github

个人主页
swoole-boot
roach
roach-orm

QQ群:

姜海强的QQ群

公众号:

360tryst公众号

栈的数据结构特点是先进后出,如下图

栈

代码实现

  1. package line
  2. type Stack struct {
  3. items []interface{}
  4. length int
  5. }
  6. func NewStack(cap int) *Stack {
  7. return &Stack{
  8. items: make([]interface{}, 0, cap),
  9. }
  10. }
  11. func (this *Stack) Push(value interface{}) {
  12. this.items = append(this.items, value)
  13. this.length++
  14. }
  15. func (this *Stack) IsEmpty() bool {
  16. return this.length < 1
  17. }
  18. func (this *Stack) Len() int {
  19. return this.length
  20. }
  21. func (this *Stack) Cap() int {
  22. return cap(this.items)
  23. }
  24. func (this *Stack) Top() (value interface{}, exists bool) {
  25. if this.length < 1 {
  26. return
  27. }
  28. exists = true
  29. value = this.items[ this.length -1]
  30. return
  31. }
  32. func (this *Stack) Pop() (value interface{}, exists bool) {
  33. if this.length < 1 {
  34. return
  35. }
  36. exists = true
  37. value = this.items[this.length-1]
  38. this.items = this.items[:this.length -1]
  39. this.length--
  40. return
  41. }

测试代码

  1. package line
  2. import "testing"
  3. func TestStack(t *testing.T) {
  4. stack := NewStack(10)
  5. empty := stack.IsEmpty()
  6. if !empty {
  7. t.Fatalf("want true, got %#v", empty)
  8. }
  9. cap := stack.Cap()
  10. if cap != 10 {
  11. t.Fatalf("want 10, got %#v", cap)
  12. }
  13. stack.Push(45)
  14. length := stack.Len()
  15. if length != 1 {
  16. t.Fatalf("want 1, got %#v", length)
  17. }
  18. cap = stack.Cap()
  19. if cap != 10 {
  20. t.Fatalf("want 10, got %#v", cap)
  21. }
  22. stack.Push(54)
  23. value, _ := stack.Top()
  24. if value != 54 {
  25. t.Fatalf("want 54, got %#v", value)
  26. }
  27. value, _ = stack.Pop()
  28. if value != 54 {
  29. t.Fatalf("want 54, got %#v", value)
  30. }
  31. value, _ = stack.Pop()
  32. if value != 45 {
  33. t.Fatalf("want 45, got %#v", value)
  34. }
  35. if !stack.IsEmpty() {
  36. t.Fatalf("want true, got false")
  37. }
  38. }

QQ群:

姜海强的QQ群

公众号:

360tryst公众号