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