Go語言程式:將列表轉換為集合
在本教程中,我們將編寫一個Go語言程式,將列表轉換為集合。連結串列是一種動態建立的資料結構,它有兩個元素:一個用於儲存值,另一個用於儲存下一個結構的地址。集合是一種抽象資料型別,可以儲存特定的值,而不會重複任何值,也沒有任何特定的順序。
將連結串列轉換為集合
現在讓我們來看一個將連結串列轉換為集合的例子。
語法
func make([]type, length, capacity) []type
make函式用於建立切片或對映。它接受三個引數:一個是我們要建立的切片名稱和型別,然後是切片的長度和容量。該函式然後返回最終的切片。
演算法
步驟1 - 首先,我們需要匯入fmt包。
步驟2 - 下一步是建立一個節點。為此,我們定義了一個名為node的新結構。
步驟3 - 然後我們需要建立一個linkedlist結構體。它也有兩個欄位,一個是名為head的指標變數。此變數指向頭節點。
步驟4 - 然後我們初始化了兩個函式,一個是initlist()函式。此函式在linkedlist結構體上定義,並返回linkedlist{}的地址。
步驟5 - 第二個函式名為prepend,用於向連結串列新增一個新的節點元素,並接受一個節點作為引數。
步驟6 - 將資料新增到連結串列的當前節點後,我們需要使連結串列的下一個指標指向下一個節點,並增加連結串列的長度。
步驟7 - 啟動主函式並透過呼叫initlist()函式建立一個名為mylist的新連結串列。
步驟8 - 之後我們建立了幾個節點並將字串值儲存到它們中。
步驟9 - 下一步是將這些節點排列在一起以形成一個連結串列,為此我們透過將每個節點作為引數傳遞給函式來呼叫prepend()函式。
步驟10 - 然後我們需要建立一個集合。我們將其命名為newset,它以字串格式儲存資料。
步驟11 - 下一步是遍歷連結串列,在每次迭代中,我們從連結串列中提取值並將其儲存在集合中。
步驟12 - 然後我們需要使連結串列的指標變數指向下一個節點,並重復此過程,直到我們得到nil或null值。
步驟13 - 下一步是列印集合,為此我們使用fmt.Println()函式。
示例
package main import ( "fmt" ) type node struct { data string next *node } type linkedlist struct { len int head *node } func initList() *linkedlist { return &linkedlist{} } func (l *linkedlist) prepend(n *node) { node := &node{ data: n.data, } if l.head == nil { l.head = node } else { node.next = l.head l.head = node } l.len++ return } func main() { mylist := initList() node1 := &node{data: "Apple"} node2 := &node{data: "mango"} node3 := &node{data: "Banana"} mylist.prepend(node1) mylist.prepend(node2) mylist.prepend(node3) newset := make(map[string]struct{}) for mylist.head != nil { newset[mylist.head.data] = struct{}{} mylist.head = mylist.head.next } fmt.Println("The obtained set is:", newset) }
輸出
The obtained set is: map[Banana:{} mango:{} Apple:{}]
結論
我們已經成功編譯並執行了一個Go語言程式,用於將連結串列轉換為集合,並附帶一個示例。