Go言語でリンクリスト操作を実装するにはどうすればよいですか?

王林
リリース: 2023-06-10 22:55:36
オリジナル
1416 人が閲覧しました

Linked List は一連のノードで構成される一般的なデータ構造であり、各ノードにはデータ フィールド (Data) とポインター フィールド (Next) という 2 つのキー属性が含まれています。このうち、データフィールドは実際のデータを格納するために使用され、ポインタフィールドは次のノードを指します。このように、リンク リストは、さまざまなアプリケーション シナリオに適した柔軟な方法でデータを保存します。

Go 言語では、リンク リスト構造も十分にサポートされています。 Go の組み込み標準ライブラリは、Go 言語でコードを記述するときに呼び出すことができる二重リンク リスト (Double Linked List) の実装を提供するコンテナ/リスト パッケージを提供します。この記事では、コンテナ/リスト パッケージを使用してリンク リスト操作を実装する方法を説明します。

コンテナ/リスト パッケージの基本的な使い方

まず、コンテナ/リスト パッケージの基本的な使い方を理解する必要があります。このパッケージは、要素の先頭と末尾への 2 つのポインターを含むリスト構造を提供します。同時に、この構造は、PushBack()、PushFront()、InsertBefore()、InsertAfter()、Remove() およびその他のメソッドを含む、二重リンク リストの標準インターフェイスを実装します。

次に、一般的なリンク リスト操作の例を示します。

  1. リスト オブジェクトを作成する
l := list.New()
ログイン後にコピー
  1. 要素をリストの末尾に追加します。リンクされたリスト
l.PushBack("Go")
l.PushBack("Java")
ログイン後にコピー
  1. リンクされたリストの先頭に要素を追加します
l.PushFront("Python")
ログイン後にコピー
  1. 指定された要素の前に要素を挿入します
elem := l.Back()
l.InsertBefore("C++", elem)
ログイン後にコピー
  1. 指定された要素の後に要素を挿入します
l.InsertAfter("JavaScript", elem)
ログイン後にコピー
  1. 指定された要素を削除します
l.Remove(elem)
ログイン後にコピー

これらの基本的なリンク リスト操作では、私たちのプログラムで直接使用できます。ただし、実際のアプリケーションを開発するには、さらに多くのリンク リスト操作が必要になるため、挿入、削除、検索、走査などのリンク リスト操作の実装方法を紹介します。

リンク リストの挿入操作

リンク リストの挿入操作は、次の 2 つの場合に分けられます。

  1. リンク リストの先頭に要素を挿入する

リンクされたリストの先頭に要素を挿入するには、PushFront() メソッドを使用して完了します。例は次のとおりです。

l.PushFront(1)
l.PushFront(2)
ログイン後にコピー
  1. リンクされたリストの中間または末尾に要素を挿入します

リンクされたリストの中間または末尾に要素を挿入するには、次のものが必要です。 InsertAfter() または InsertBefore() メソッドを使用し、対応する要素の位置を指定します。例は以下のとおりです。

elem := l.Back() // 获取链表尾部元素
l.InsertBefore(99, elem) // 在尾部元素前插入新元素
ログイン後にコピー

リンク リストの削除操作

リンク リストの削除操作は、次の 2 つの場合に分けられます。

  1. 先頭要素を削除するリンク リストの先頭要素を削除するには、Remove() メソッドを使用して完了します。例は次のとおりです。
  2. head := l.Front()
    l.Remove(head)
    ログイン後にコピー

リンクされたリスト内の要素を削除します

  1. リンクされたリスト内の要素を削除するには、まず、要素を削除し、Remove () メソッドを使用して削除操作を実行します。例は次のとおりです。
  2. // 找到需要删除的元素
    target := 2
    for e := l.Front(); e != nil; e = e.Next() {
        if e.Value == target {
            l.Remove(e)
            break
        }
    }
    ログイン後にコピー
リンク リストのルックアップ操作

リンク リストのルックアップ操作では、リンク リスト全体を走査する必要があることが多いため、時間の複雑さが高くなります。ただし、小規模なリンク リストの場合、検索操作は非常に高速です。

リンク リストで要素を検索

  1. リンク リストで要素を見つけるには、要素が見つかるまで、またはリンクされたリストをたどる必要があります。リストが走査されます。例は次のとおりです。
  2. // 找到需要查找的元素
    target := 2
    for e := l.Front(); e != nil; e = e.Next() {
        if e.Value == target {
            fmt.Println("Find it!")
            break
        }
    }
    ログイン後にコピー

リンクされたリスト内の最大の要素を見つける

  1. リンクされたリスト内の最大の要素を見つけるには、リンクされたリストを走査する必要もあります。走査プロセス中の最大値をリストして記録するコードの例は次のとおりです。
  2. max := 0
    for e := l.Front(); e != nil; e = e.Next() {
        if e.Value.(int) > max {
            max = e.Value.(int)
        }
    }
    fmt.Println("Max value is:", max)
    ログイン後にコピー
リンク リストの走査操作

リンク リストの走査操作は比較的一般的であり、出力に使用できます。変更、検索、その他の操作。トラバースするときに注意する必要があるのは、リンクされたリスト内の要素の順序で各要素をトラバースする必要があるということです。

リンク リストを最初から最後まで走査する

  1. リンク リストを最初から最後まで走査するには、Front() メソッドと Next() メソッドを使用します。コード例は次のとおりです。
  2. for e := l.Front(); e != nil; e = e.Next() {
        fmt.Println(e.Value)
    }
    ログイン後にコピー

リンク リストを末尾から先頭まで走査する

    #リンク リストを末尾から先頭まで走査するには、次のようにします。 Back() メソッドと Prev() メソッドのコード例は次のとおりです:
  1. for e := l.Back(); e != nil; e = e.Prev() {
        fmt.Println(e.Value)
    }
    ログイン後にコピー
    概要

    この記事では、Go 言語でのリンク リスト演算の実装方法を簡単に紹介します。コンテナ/リスト パッケージを使用して、リンク リストの挿入、削除、検索、走査などの基本的な操作を実装します。実際のアプリケーションでのリンク リスト操作については、ビジネス ニーズを満たすために、特定のニーズに応じてさらにカプセル化および拡張する必要があります。

    以上がGo言語でリンクリスト操作を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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