zoukankan      html  css  js  c++  java
  • 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
    }
     
    
  • 相关阅读:
    洛谷
    洛谷
    洛谷
    51nod
    洛谷
    洛谷
    51nod
    洛谷
    2019五一训练记录
    2019.5.4备战省赛组队训练赛第十九场
  • 原文地址:https://www.cnblogs.com/lurenq/p/12081861.html
Copyright © 2011-2022 走看看