4 Star 5 Fork 4

Plato / Service-Box-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
queue.go 1.20 KB
一键复制 编辑 原始数据 按行查看 历史
package tools
import "errors"
var (
NoElement = errors.New("no element in queue")
QueueFull = errors.New("queue full")
)
type (
// Queue 工具库,循环队列
// TODO 使用模板重构
Queue struct {
maxsize int
head int
tail int
container []uint32
}
)
func (q *Queue) Init(capacity int) {
q.head = 0
q.tail = 0
q.maxsize = capacity + 1
q.container = make([]uint32, q.maxsize)
}
func (q *Queue) Capacity() int {
return q.maxsize - 1
}
func (q *Queue) Size() int {
return (q.tail - q.head + q.maxsize) % q.maxsize
}
func (q *Queue) Full() bool {
return (q.tail+1)%q.maxsize == q.head
}
func (q *Queue) Empty() bool {
return q.head == q.tail
}
func (q *Queue) Top() (uint32, error) {
if q.Empty() {
return 0, NoElement
}
return q.container[q.head], nil
}
func (q *Queue) Pop() (uint32, error) {
if q.Empty() {
return 0, NoElement
}
elem := q.container[q.head]
q.head = (q.head + 1) % q.maxsize
return elem, nil
}
func (q *Queue) Push(element uint32) error {
if q.Full() {
return QueueFull
}
q.container[q.tail] = element
q.tail = (q.tail + 1) % q.maxsize
return nil
}
func (q *Queue) UnInit() {
q.container = nil
q.tail = 0
q.tail = 0
q.maxsize = 0
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/dennis-kk/service-box-go.git
git@gitee.com:dennis-kk/service-box-go.git
dennis-kk
service-box-go
Service-Box-go
v0.5.17

搜索帮助

344bd9b3 5694891 D2dac590 5694891