Steel/pkg/utils/queue.go

54 lines
649 B
Go
Raw Normal View History

2023-12-16 20:52:05 +01:00
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
}