作者简介:

       姜海强:闷骚码农,互联网行业摸爬滚打数余载,先后担任中国体育直播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 Queue struct {
  3. items []interface{}
  4. length int
  5. }
  6. func NewQueue(cap int) *Queue {
  7. return &Queue{
  8. items: make([]interface{}, 0, cap),
  9. }
  10. }
  11. func (this *Queue) Push(value interface{}) {
  12. this.items = append(this.items, value)
  13. this.length++
  14. }
  15. func (this *Queue) Pop() (value interface{}, exists bool) {
  16. if this.length < 1 {
  17. return
  18. }
  19. exists = true
  20. value = this.items[0]
  21. this.items = this.items[1:]
  22. this.length--
  23. return
  24. }
  25. func (this *Queue) Len() int {
  26. return this.length
  27. }
  28. func (this *Queue) Cap() int {
  29. return cap(this.items)
  30. }

测试代码

  1. package line
  2. import "testing"
  3. func TestQueue(t *testing.T) {
  4. queue := NewQueue(16)
  5. length := queue.Len()
  6. if length != 0 {
  7. t.Fatalf("want 0; got %#v", length)
  8. }
  9. queue.Push(45)
  10. queue.Push(54)
  11. length = queue.Len()
  12. if length != 2 {
  13. t.Fatalf("want 2; got %#v", length)
  14. }
  15. val, _ := queue.Pop()
  16. if val != 45 {
  17. t.Fatalf("want 45; got %#v", val)
  18. }
  19. val, _ = queue.Pop()
  20. if val != 54 {
  21. t.Fatalf("want 54; got %#v", val)
  22. }
  23. length = queue.Len()
  24. if length != 0 {
  25. t.Fatalf("want 0; got %#v", length)
  26. }
  27. }

QQ群:

姜海强的QQ群

公众号:

360tryst公众号