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