golang リストの実装

王林
リリース: 2023-05-16 10:22:08
オリジナル
635 人が閲覧しました

Golang は効率的で簡潔なプログラミング言語であり、パフォーマンスと同時実行性に大きな利点があります。 Golang には、リストを含むコレクション データ構造の実装が多数あります。リストは、一連のデータを保存するために使用できる非常に重要なデータ構造であり、任意の場所での要素の挿入と削除をサポートします。この記事ではGolangを使ってListを実装する方法を紹介します。

  1. リストの定義

リストはデータ構造であり、要素の順序付けされたコレクションです。リストでは、最初と最後の要素を除き、すべての要素に先行要素と後続要素があります。最初の要素には先行要素がなく、最後の要素には後続要素がありません。 List は、要素の追加、要素の削除、要素へのアクセスなど、いくつかの基本的な操作を提供します。

  1. List の実装

Golang では、List を実装するために二重リンク リストを使用できます。二重リンク リストには、最初のノードを指すポインタ ヘッドと最後のノードを指すポインタ テールが含まれます。各ノードには、前のノードを指すポインタ prev と次のノードを指すポインタ next に加えて、ノードの値を格納する値 val が含まれています。以下に示すように:

type ListNode struct {

prev *ListNode // 指向前一个节点
next *ListNode // 指向后一个节点
val  interface{// 当前节点的值
} 
ログイン後にコピー

}
type List struct {

head *ListNode // 指向第一个节点
tail *ListNode // 指向最后一个节点
len  int       // List的长度
ログイン後にコピー

}

List を実装する場合、Pay が必要です。次の点に注意してください。

(1) 要素の追加

リストに要素を追加するには、主にヘッダーに要素を追加する方法と、末尾に要素を追加する方法の 2 つがあります。これらは、AddFront メソッドと AddBack メソッドを使用して実装できます。

func (リスト *List) AddFront(val インターフェース{}) {

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) AddBack(val インターフェース{}) {

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) 要素の削除

要素の削除は、主にヘッダ要素の削除と末尾要素の削除の 2 つに分けられます。 RemoveFront メソッドと RemoveBack メソッドを使用して要素を削除することもできます。

func (リスト *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) 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 内の要素にアクセスするには、必要な要素が見つかるまで、テーブルの先頭または末尾から 1 つずつたどっていくだけです。 Front メソッドと Back メソッドを使用して、リストの最初と最後の要素にアクセスできます。

func (list *List) Front() インターフェース{} {

if list.head == nil {
    return nil
}
return list.head.val
ログイン後にコピー

}

func (list *List) Back() インターフェース{} {

if list.tail == nil {
    return nil
}
return list.tail.val
ログイン後にコピー

}

上記は Golang で List を実装する基本的な方法であり、実際のニーズに応じて調整および最適化できます。

  1. 概要

Golang で List を実装するのは非常に簡単です。二重リンク リストを使用するだけです。 List は Golang の標準ライブラリに実装されているため、実際に使用する場合は標準ライブラリの List を使用することを推奨します。リストをカスタマイズする必要がある場合は、実際のニーズに応じて上記のコードを調整および最適化できます。

以上がgolang リストの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!