Go語言 list列表


在Go語言中,列表使用 container/list 包來實現,內部的實現原理是雙鏈表,列表能夠高效地進行任意位置的元素插入和刪除操作。

初始化列表

list 的初始化有兩種方法:分別是使用 New() 函數和 var 關鍵字聲明,兩種方法的初始化效果都是一致的。

1) 通過 container/list 包的 New() 函數初始化 list

變量名 := list.New()

2) 通過 var 關鍵字聲明初始化 list

var 變量名 list.List

列表與切片和 map 不同的是,列表並沒有具體元素類型的限制,因此,列表的元素可以是任意類型,這既帶來了便利,也引來一些問題,例如給列表中放入了一個 interface{} 類型的值,取出值后,如果要將 interface{} 轉換為其他類型將會發生宕機。

在列表中插入元素

雙鏈表支持從隊列前方或后方插入元素,分別對應的方法是 PushFront 和 PushBack。

提示

這兩個方法都會返回一個 *list.Element 結構,如果在以后的使用中需要刪除插入的元素,則只能通過 *list.Element 配合 Remove() 方法進行刪除,這種方法可以讓刪除更加效率化,同時也是雙鏈表特性之一。

從列表中刪除元素

列表插入函數的返回值會提供一個 *list.Element 結構,這個結構記錄着列表元素的值以及與其他節點之間的關系等信息,從列表中刪除元素時,需要用到這個結構進行快速刪除。

package main

import (
    "container/list"
    "fmt"
)

func main() {
    //創建一個實例
    lst := list.New()
    //尾部添加
    lst.PushBack(".")
    //前部添加
    lst.PushFront("day")
    //前部添加后,保存元素句柄
    element := lst.PushFront("is ")
    //在is 之后添加 mon
    lst.InsertAfter("mon", element)
    //在is 之前添加 Today
    lst.InsertBefore("Today ", element)
    //打印 輸出 Today is monday.
    // i:=lst.Front() 表示初始賦值,只會在一開始執行一次,每次循環會進行一次 i != nil 語句判斷,如果返回 false,表示退出循環,反之則會執行 i = i.Next()。
    for i := lst.Front(); i != nil; i = i.Next() {

        fmt.Print(i.Value)
    }
    //刪除 元素
    lst.Remove(element)
    fmt.Println()
    //打印 輸出 Today   monday.
    for i := lst.Front(); i != nil; i = i.Next() {

        fmt.Print(i.Value)
    }
    fmt.Println("\nlst2輸出")
    var lst2 list.List
    lst2.PushBack("one")
    lst2.PushFront("zero ")
    //打印
    for i := lst2.Front(); i != nil; i = i.Next() {

        fmt.Println(i.Value)
    }
}

打印輸出

Today is monday.
Today monday.
lst2輸出
zero
one

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM