Is there a queue implementation?

后端 未结 14 1183
时光取名叫无心
时光取名叫无心 2020-12-23 02:14

Can anyone suggest Go container for simple and fast FIF/queue, Go has 3 different containers: heap, list and vector. Which one is more

14条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-23 02:49

    Double stack implementation:

    O(1) Enqueue and Dequeue and uses slices (which tends to be better for cache misses).

    type Queue struct{
        enqueue, dequeue Stack
    }
    
    func (q *Queue) Enqueue(n *Thing){
        q.enqueue.Push(n)
    }
    
    func (q *Queue) Dequeue()(*Thing, bool){
        v, ok := q.dequeue.Pop()
        if ok{
            return v, true
        }
    
        for {
            v, ok := d.enqueue.Pop()
            if !ok{
                break
            }
    
            d.dequeue.Push(v)
        }
    
        return d.dequeue.Pop()
    }
    
    type Stack struct{
        v []*Thing
    }
    
    func (s *Stack)Push(n *Thing){
        s.v=append(s.v, n)
    }
    
    func (s *Stack) Pop()(*Thing, bool){
        if len(s.v) == 0 {
            return nil, false
        }
    
        lastIdx := len(s.v)-1
        v := s.v[lastIdx]
        s.v=s.v[:lastIdx]
        return v, true
    }
    

提交回复
热议问题