31 lines
1007 B
Markdown
31 lines
1007 B
Markdown
# queue
|
||
|
||
基于链表实现的先进先出队列(哨兵头结点风格)。
|
||
|
||
> 迁移自 go-hua/queue,代码保持原样。
|
||
|
||
## 用法
|
||
|
||
```go
|
||
import "git.zeroonesoft.cn/golib/zogo/queue"
|
||
|
||
// 头结点作为哨兵,Create 批量建队
|
||
q := &queue.QueueNode{}
|
||
q.Create(1, 2, 3)
|
||
q.Length() // 3
|
||
|
||
// Push 入列(追加队尾)/ Pop 出队
|
||
q.Push(4)
|
||
v := q.Pop() // 在头结点上调用:返回头结点自身 Data(哨兵为 nil),队列前进一个节点
|
||
q.Print() // 打印剩余元素
|
||
```
|
||
|
||
完整可运行例程:[examples/queue/main.go](../examples/queue/main.go)
|
||
|
||
## 注意
|
||
|
||
- `Pop` 语义特殊:在**哨兵头结点**上调用,返回的是哨兵自身的 `Data`(通常为 nil)
|
||
并让队列前进一格;取真正的队头元素请在 `q.Next` 上调用或先取 `q.Next.Data`。
|
||
- `Pop` 在队列仅剩哨兵(`Next == nil`)时调用会 panic,出队前先判断 `Length()`。
|
||
- 元素为 `interface{}`,非泛型非并发安全,多 goroutine 场景需外加拉锁。
|