You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
package util
import "sync"
type node struct { data interface{} next *node }
type Queue struct { head *node tail *node count int sync.RWMutex }
func NewQueue() *Queue { q := &Queue{} return q }
func (q *Queue) Len() int { q.RLock() defer q.RUnlock() return q.count }
func (q *Queue) Enqueue(item interface{}) { q.Lock() defer q.Unlock()
n := &node{data: item}
if q.tail == nil { q.tail = n q.head = n } else { q.tail.next = n q.tail = n } q.count++ }
func (q *Queue) Dequeue() interface{} { q.Lock() defer q.Unlock()
if q.head == nil { return nil }
n := q.head q.head = n.next
if q.head == nil { q.tail = nil } q.count--
return n.data }
|