You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
622 B
Go
46 lines
622 B
Go
package utils
|
|
|
|
type Queue[T any] struct {
|
|
data []T
|
|
len int
|
|
}
|
|
|
|
// New creates an empty stack
|
|
func NewQueue[T any]() Queue[T] {
|
|
q := Queue[T]{
|
|
[]T{},
|
|
0,
|
|
}
|
|
|
|
return q
|
|
}
|
|
|
|
// Push pushes the value v on top of stack s.
|
|
func (q *Queue[T]) Enqueue(v T) {
|
|
q.data = append(q.data, v)
|
|
q.len++
|
|
}
|
|
|
|
func (q *Queue[T]) Dequeue() T {
|
|
if !q.HasElement() {
|
|
panic("called Dequeue() on an empty queue")
|
|
}
|
|
|
|
value := q.data[0]
|
|
var zeroValue T
|
|
q.data[0] = zeroValue
|
|
q.data = q.data[1:]
|
|
|
|
q.len--
|
|
|
|
return value
|
|
}
|
|
|
|
func (q *Queue[T]) HasElement() bool {
|
|
return q.len > 0
|
|
}
|
|
|
|
func (q *Queue[T]) GetData() []T {
|
|
return q.data
|
|
}
|