前言
需求佇列的特性較為單一,基本操作即初始化、獲取大小、新增元素、移除元素等。最重要的特性就是滿足先進先出。
實現接下來還是按照以前的套路,一步一步來分析如何利用go的語法特性實現queue這種資料結構。
定義首先定義每個節點node結構體,照例value的值型別可以是任意型別,節點的前後指標域指標型別為node
type node struct
prev *node
next *node
}繼續定義鍊錶結構,定義出頭結點和尾節點的指標,同時定義佇列大小size:
typ linkedqueue struct
大小獲取佇列大小,只需要獲取linkedqueue中的size大小即可:
func (queue *linkedqueue) size() int
peek
peek操作只需要獲取佇列隊頭的元素即可,不用刪除。返回型別是任意型別,用介面實現即可。另外如果head指標域為nil,則需要用panic丟擲異常,一切ok的話,返回隊頭節點的數值即可:
func (queue *linkedqueue) peek() inte***ce{}
return queue.head.value}新增
新增操作在佇列中是比較重要的操作,也要區分隊尾節點是否為nil,根據是否為nil,執行不同的連線操作,最後佇列的程式設計客棧size要加1,為了不浪費記憶體新增節點的指標變數要置nil:
func (queue *linkedqueue) add(value inte***ce{})
if queue.tail == nil else
queue.size++
new_node = nil}移除
佇列的刪除操作也是很簡單,無非是節點的斷開操作。在此之前,需要判斷鍊錶的狀態即是否為nil?而後移除的佇列最前端的節點,先用乙個新的變數節點儲存佇列前面的節點,進行一系列操作之後,至nil,並將長度減少即可。
func (queue *linkedqueue) remove()
first_node := queue.head
queue.head = first_node.next
first_node.next = nil
pidbvnlcs first_node.value = nil
queue.size--
first_node = nil
}
golang資料結構
常見的資料結構有陣列 切片 map 結構體。陣列是乙個由固定長度的特定型別元素組成的序列,乙個陣列可以由零個或多個元素組成。陣列的宣告語法如下 var variable name size variable type陣列變數名 陣列宣告及使用時的變數名。元素數量 陣列的元素數量,可以是乙個表示式,但...
Golang 資料結構
每種語言在實現資料結構有些許不同。go 是如何實現的呢?1.陣列 arraypackage main import fmt func main x 3 4 1 2 0 4 0 0 0 x 8 8 越界無法通過編譯 a 3 int b int 型別推導 x 和 a,b 是兩種不同的資料型別 編譯器會把...
golang基礎資料結構
這裡主要討論四種型別 陣列 slice map和結構體 陣列和結構體是聚合型別 它們的值都是由很多個元素或者成員欄位的值組成。陣列是有同構元素組成 每個陣列的元素的型別相同 結構體為異構元素組成 每個結構體不一定是同型別元素構成 陣列和結構體都是有固定記憶體大小的資料結構 slice和map則是動態...