佇列是一種線性結構
只能從一端(隊尾)新增元素,只能從另一端(隊首)取出元素,屬於先進先出的結構
// 順序佇列的實現
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檔案...