all repos

scratch @ 17b595b13a6b7913b0e606ccb699e368f104968c

⭐ me doing recreational ~~drugs~~ programming

scratch/algos/queue.go (view raw)

1
package algos
2
3
type QNode[T any] struct {
4
	v    T
5
	next *QNode[T]
6
}
7
8
type Queue[T any] struct {
9
	Len  int
10
	head *QNode[T]
11
	tail *QNode[T]
12
}
13
14
func (q *Queue[T]) Push(item T) {
15
	node := &QNode[T]{v: item}
16
	if q.Len == 0 {
17
		q.head = node
18
		q.tail = node
19
	} else {
20
		q.tail.next = node
21
		q.tail = node
22
	}
23
	q.Len++
24
}
25
26
func (q *Queue[T]) Peek() T {
27
	return q.head.v
28
}
29
30
func (q *Queue[T]) Pop() (T, bool) {
31
	if q.Len == 0 {
32
		var t T
33
		return t, false
34
	}
35
36
	res := q.head.v
37
	q.head = q.head.next
38
	if q.head == nil {
39
		q.tail = nil
40
	}
41
	q.Len--
42
	return res, true
43
}