GO 语言队列实现
队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
队列是一种先进先出的t(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也比较符合我们通常生活中的习惯,排在第一个的优先出列,最后来的当然排在队伍最后。如下图:
package main
import (
"fmt"
)
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() {
//队头出列
if queue == nil {
return
}
//记录列队第一个的节点
//node:=queue.Next
//queue.Next=node.Next
queue.Next = queue.Next.Next
}

浙公网安备 33010602011771号