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
}
 

 

posted @ 2019-12-24 00:06  路人Q  阅读(3238)  评论(0编辑  收藏  举报