Go資料結構與演算法-實現鏈式佇列
阿新 • • 發佈:2018-12-18
title: Go資料結構與演算法-實現鏈式佇列
tags: go,演算法
介紹
前面我們看了佇列的陣列實現,本文來看看用連結串列實現佇列的方法。
演示
package main
import "fmt"
//連結串列單節點
type QNode struct{
data interface{} //資料
next * QNode //地址
}
type QueueLink struct{ //佇列的頭部,尾部
rear *QNode
front *QNode
}
type SQueue interface {
length() int
Enqueue (value interface{})
Dequeue()( interface{},error)
}
func NewLinkQueue() * QueueLink{
return &QueueLink{}
}
func (qlk *QueueLink)length() int{
length:=0
pnode:=qlk.front //備份
for pnode!=qlk.rear{ //一直到迴圈到重合為zhi
pnode=pnode.next //迴圈連結串列尾部
length++
}
return length
}
func ( qlk *QueueLink) Enqueue(value interface{}){
newnode :=&QNode{data:value} //構造一個節點,返回地址
if qlk.front ==nil{ //只有一個節點
qlk.front=newnode
qlk.rear=newnode
}else{
qlk.rear.next=newnode
qlk.rear=qlk.rear.next
}
}
func (qlk *QueueLink ) Dequeue()( value interface{},err error){
if qlk.front==nil{
return nil,nil
}
newnode :=qlk.front
if qlk.front==qlk.rear{
qlk.front=nil
qlk.rear=nil
}else{
qlk.front=qlk.front.next //刪除一個元素
}
return newnode.data,nil
}
func main() {
myq:= NewLinkQueue()
for i:=0;i<10;i++{
myq.Enqueue(i)
}
fmt.Println("length",myq.length())
for i:=0;i<10;i++{
fmt.Println(myq.Dequeue())
}
}