stl-go/queue/queue.go
2022-04-01 21:53:04 +08:00

51 lines
895 B
Go

/*
* @Author: NorthCity1984
* @LastEditTime: 2022-04-01 21:46:15
* @Description:
* @Website: https://grimoire.cn
* Copyright (c) NorthCity1984 All rights reserved.
*/
package queue
type Number interface {
int | int64 | float32 | float64
}
type Queue[T Number] struct {
size int
front *QueueNode[T]
end *QueueNode[T]
}
type QueueNode[T Number] struct {
Val T
Next *QueueNode[T]
}
func Init[T Number]() Queue[T] {
return Queue[T]{size: 0, front: nil, end: nil}
}
func (q *Queue[T]) IsEmpty() bool {
return q.size == 0
}
func (q *Queue[T]) Push(val T) bool {
newNode := QueueNode[T]{Val: val, Next: nil}
q.size++
q.end.Next = &newNode
q.end = &newNode
return true
}
func (q *Queue[T]) GetFront() T { return q.front.Val }
func (q *Queue[T]) Pop() (T, bool) {
if q.IsEmpty() {
return 0, false
}
retVal := q.front.Val
q.front = q.front.Next
return retVal, true
}