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
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM