mirror of
https://gitee.com/NorthCityChen/stl-go.git
synced 2025-05-25 12:01:08 +00:00
51 lines
895 B
Go
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
|
|
}
|