1. 程式人生 > >Go資料結構與演算法-實現鏈式佇列

Go資料結構與演算法-實現鏈式佇列


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()) } }