首頁  >  文章  >  後端開發  >  golang list實現

golang list實現

王林
王林原創
2023-05-16 10:22:08647瀏覽

Golang是一門高效能、簡潔的程式語言,它在效能和並發方面極具優勢。在Golang中,集合類別資料結構的實作非常豐富,其中包括列表(List)。 List是一種非常重要的資料結構,它可以用來儲存一組數據,支援在任何位置插入和刪除元素。本文將介紹如何使用Golang實作一個List。

  1. List的定義

List是一種資料結構,是一組元素的有序集合。在List中,每個元素都有一個前驅元素和一個後繼元素,除了第一個和最後一個元素。第一個元素沒有前驅元素,最後一個元素沒有後繼元素。 List提供了一些基本操作,例如新增元素、刪除元素、存取元素等。

  1. List的實作

在Golang中,要實作List可以使用雙向鍊錶(doubly linked list)來實作。雙向鍊錶包含一個指向第一個節點的指標head和一個指向最後一個節點的指標tail。每個節點包含一個指向前一個節點的指標prev和一個指向後一個節點的指標next,以及一個值val儲存節點的值。如下所示:

type ListNode struct {

prev *ListNode // 指向前一个节点
next *ListNode // 指向后一个节点
val  interface{// 当前节点的值
} 

}
type List struct {

head *ListNode // 指向第一个节点
tail *ListNode // 指向最后一个节点
len  int       // List的长度

}

在實作List時,我們需要注意以下幾點:

(1) 新增元素

在List中新增元素主要有兩種方式,分別是在表頭新增元素和在表尾新增元素。我們可以使用AddFront和AddBack方法來實作它們。

func (list *List) AddFront(val interface{}) {

node := &ListNode{
    prev: nil,
    next: list.head,
    val:  val,
}
if list.head == nil { // 如果链表为空
    list.head = node
    list.tail = node
} else {
    list.head.prev = node
    list.head = node
}
list.len++

}

func (list *List) AddBack(val interface{}) {

node := &ListNode{
    prev: list.tail,
    next: nil,
    val:  val,
}
if list.tail == nil { // 如果链表为空
    list.head = node
    list.tail = node
} else {
    list.tail.next = node
    list.tail = node
}
list.len++

}

(2) 刪除元素

刪除元素主要分為兩種情況,刪除表頭元素和刪除表尾元素。我們同樣可以使用RemoveFront和RemoveBack方法來刪除元素。

func (list *List) RemoveFront() {

if list.head == nil { // 如果链表为空
    return
}
if list.head == list.tail { // 如果链表只有一个元素
    list.head = nil
    list.tail = nil
    list.len = 0
    return
}
list.head = list.head.next
list.head.prev = nil
list.len--

}

func (list *List) RemoveBack() {

if list.tail == nil { // 如果链表为空
    return
}
if list.head == list.tail { // 如果链表只有一个元素
    list.head = nil
    list.tail = nil
    list.len = 0
    return
}
list.tail = list.tail.prev
list.tail.next = nil
list.len--

}

(3) 存取元素

List中存取元素只需要從表頭或表尾開始逐一遍歷,直到找到需要的元素。我們可以使用Front和Back方法來存取List中的第一個和最後一個元素。

func (list *List) Front() interface{} {

if list.head == nil {
    return nil
}
return list.head.val

}

func (list *List) Back() interface{} {

#
if list.tail == nil {
    return nil
}
return list.tail.val

}

以上就是Golang實作List的基本方法,可以依照實際需求進行調整和最佳化。

  1. 總結

在Golang中實作List是非常簡單的,我們只需要使用雙向鍊錶。 Golang中標準函式庫中已經實作了List,因此建議在實際使用中使用標準函式庫中的List。如果需要自訂List,可以根據實際需求調整和最佳化上文中給出的程式碼。

以上是golang list實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn