Files
4566704 80eb62cb08 feat(queue): 自 go-hua/queue 原样迁入链式队列
- 代码与测试不变,附 examples/queue 例程与包 README(含哨兵头结点 Pop 语义说明)
2026-09-20 12:20:51 +08:00

96 lines
1.5 KiB
Go

// Package queue 基于链表实现的先进先出队列。
package queue
import "fmt"
// QueueNode 队列节点,Data 存任意数据,Next 指向下一节点
type QueueNode struct {
Data interface{}
Next *QueueNode
}
// 创建链列(数据)
func (queue *QueueNode) Create(Data ...interface{}) {
if queue == nil {
return
}
if len(Data) == 0 {
return
}
//创建链列
for _, v := range Data {
newNode := new(QueueNode)
newNode.Data = v
queue.Next = newNode
queue = queue.Next
}
}
// 打印链列
func (queue *QueueNode) Print() {
if queue == nil {
return
}
for queue != nil {
if queue.Data != nil {
fmt.Print(queue.Data, " ")
}
queue = queue.Next
}
fmt.Println()
}
// 链列个数
func (queue *QueueNode) Length() int {
if queue == nil {
return -1
}
i := 0
for queue.Next != nil {
i++
queue = queue.Next
}
return i
}
// 入列(insert)
func (queue *QueueNode) Push(Data interface{}) {
//放在队列的末尾
if queue == nil {
return
}
if Data == nil {
return
}
//找到队列末尾
for queue.Next != nil {
queue = queue.Next
}
//创建新节点 将新节点加入队列末尾
newNode := new(QueueNode)
newNode.Data = Data
queue.Next = newNode
}
// 出队(delete)
func (queue *QueueNode) Pop() interface{} {
//队头出列
if queue == nil {
return nil
}
//记录列队第一个的节点
//node:=queue.Next
//queue.Next=node.Next
data := queue.Data
queue.Next = queue.Next.Next
return data
}