Hermes/pkg/containers/queue.go

44 lines
637 B
Go

package containers
func NewQueue[T interface{}]() Queue[T] {
return Queue[T]{
front: NewStack[T](),
back: NewStack[T](),
}
}
type Queue[T interface{}] struct {
front, back *Stack[T]
}
func (m *Queue[T]) Push(val T) {
m.front.Push(val)
}
func (m *Queue[T]) swapStacks() {
if m.back.Empty() {
for !m.front.Empty() {
val, _ := m.front.Pop()
m.back.Push(val)
}
}
}
func (m *Queue[T]) Pop() T {
m.swapStacks()
val, _ := m.back.Pop()
return val
}
func (m *Queue[T]) Peek() T {
m.swapStacks()
val, _ := m.back.Peek()
return val
}
func (m *Queue[T]) Empty() bool {
return m.front.Empty() && m.back.Empty()
}