(2)Go實現順序佇列

2021-09-26 20:33:26 字數 3553 閱讀 6073

佇列是一種線性結構

只能從一端(隊尾)新增元素,只能從另一端(隊首)取出元素,屬於先進先出的結構

// 順序佇列的實現

type queue inte***ce

type slicequeue struct

func

newqueue()

*slicequeue

}func

(i *slicequeue)

len(

)int

func

(i *slicequeue)

cap(

)int

func

(i *slicequeue)

enqueue

(item inte***ce

)func

(i *slicequeue)

dequeue()

(queue,

error

) queue := i.queues[0]

i.queues = i.queues[1:

]return queue,

nil}

func

(i *slicequeue)

getfront()

(queue,

error

)return i.queues[0]

,nil

}func

(i *slicequeue)

isempty()

bool

// 佇列測試

func

main()

fmt.

printf

("isempty: %v, len=%v, cap=%v, getfront=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.getfront()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, dequeue=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.dequeue()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, dequeue=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.dequeue()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, dequeue=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.dequeue()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, dequeue=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.dequeue()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, dequeue=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.dequeue()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, dequeue=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.dequeue()

))fmt.

printf

("isempty: %v, len=%v, cap=%v, getfront=%v\n"

, a.

isempty()

, a.

len(

), a.

cap(

), fmt.

sprintln

(a.getfront()

))}

// 測試結果

isempty:

false

,len=5

,cap=8

, getfront=

0-hello toilet <

nil>

isempty:

false

,len=5

,cap=8

, dequeue=

0-hello toilet <

nil>

isempty:

false

,len=4

,cap=7

, dequeue=

1-hello toilet <

nil>

isempty:

false

,len=3

,cap=6

, dequeue=

2-hello toilet <

nil>

isempty:

false

,len=2

,cap=5

, dequeue=

3-hello toilet <

nil>

isempty:

false

,len=1

,cap=4

, dequeue=

4-hello toilet <

nil>

isempty:

true

,len=0

,cap=3

, dequeue=

<

nil> failed to dequeue,queue is empty

isempty:

true

,len=0

,cap=3

, getfront=

<

nil> failed to getfront,queue is empty

順序佇列的缺陷是每次取出元素,都要重新遍歷一次佇列,時間複雜度為o(n),冗餘操作太多

下面鏈結有更好的實現方法,迴圈佇列

Go實現設計模式系列(2) Go實現New模式

這幾乎是我們最常用的模式,因為太常用了,以致於我們並沒有它當成一種模式。new 模式屬於建立型模式的一種,作為最基礎的建立型模式而被我們廣泛使用 來看看new模式的五大要素 我們想要獲取乙個伺服器物件,該伺服器物件實現了start,stop兩個介面 new.go package newimport ...

2 Go跨平台編譯

預設go build的可執行檔案都是當前作業系統可執行的檔案,如果想在windows下編譯乙個linux下可執行檔案,只需要指定目標作業系統的平台和處理器架構即可。set cgo enabled 0 禁用cgo set goos linux 目標平台是linux set goarch amd64 目...

2 go開源cache2go專案筆記 專案介紹

2.go開源cache2go專案筆記 專案介紹 該專案是go物件的快取庫,包含cache過期自動刪除caceh功能等。專案中包含examples資料夾,裡面包含一些使用例子。主目錄就沒有其他資料夾了,剩下的都是go檔案為主了。ps 還有license.txt,readme之類的可以開啟瞅瞅 go檔案...