54 lines
649 B
Go
54 lines
649 B
Go
|
|
package utils
|
||
|
|
|
||
|
|
// Queue implementation
|
||
|
|
|
||
|
|
type Node struct {
|
||
|
|
Value interface{}
|
||
|
|
Next *Node
|
||
|
|
}
|
||
|
|
|
||
|
|
type Queue struct {
|
||
|
|
Head *Node
|
||
|
|
Tail *Node
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queue) Enqueue(value interface{}) {
|
||
|
|
node := &Node{Value: value}
|
||
|
|
|
||
|
|
if q.Head == nil {
|
||
|
|
q.Head = node
|
||
|
|
q.Tail = node
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
q.Tail.Next = node
|
||
|
|
q.Tail = node
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queue) Dequeue() interface{} {
|
||
|
|
if q.Head == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
node := q.Head
|
||
|
|
q.Head = node.Next
|
||
|
|
|
||
|
|
if q.Head == nil {
|
||
|
|
q.Tail = nil
|
||
|
|
}
|
||
|
|
|
||
|
|
return node.Value
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queue) Peek() interface{} {
|
||
|
|
if q.Head == nil {
|
||
|
|
return nil
|
||
|
|
}
|
||
|
|
|
||
|
|
return q.Head.Value
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queue) IsEmpty() bool {
|
||
|
|
return q.Head == nil
|
||
|
|
}
|