隊列(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
}
