Python データ構造とアルゴリズムのリンク リスト定義の使用方法の詳細な説明
この記事では、主にPythonのデータ構造とアルゴリズムにおけるリンクリストの定義と使い方を紹介し、単一リンクリスト、循環リンクリストなどの定義、使用方法、および関連する注意点を具体的な例に基づいて詳しく分析します。参照できます
この記事の例では、Python データ構造とアルゴリズムにおけるリンク リストの定義と使用法について説明します。詳細は以下の通りです:
この記事で説明します:
(1) リンクリストノードの定義から始まり、クラスとオブジェクト指向の形式でリンクリストを設計します。アイデア
(2) リンクリストクラス 挿入や削除、
prepend(先頭挿入)、pop(先頭削除)、append(末尾挿入)、pop_last(末尾削除)などのメンバ関数を実装する際に考慮すべき境界条件
2.1 挿入:
空のリンクリスト
リンクリストの長さは1
最後まで挿入
2.2 削除
空のリンクリスト
リンクリストの長さは1
最後のものを削除要素
(3) 単一リンクリストから単一リンクリストへのさまざまなバリエーション:
尾部付き ノードの単一リンクリスト
円形の単一リンクリスト
二重リンクリスト
1. リンクリストノードの定義
class LNode: def __init__(self, elem, next_=None): self.elem = elem self.next = next_
2. 単一リンクリストの実装
挿入と削除の実装と考慮する必要がある境界の理解に重点を置く 条件:
class LinkedListUnderflow(ValueError): pass class LList: def __init__(self): self._head = None def is_empty(self): return self._head is None def prepend(self, elem): self._head = LNode(elem, self._head) def pop(self): if self._head is None: raise LinkedListUnderflow('in pop') e = self._head.elem self._head = self._head.next return e def append(self, elem): if self._head is None: self._head = LNode(elem) return p = self._head while p.next is not None: p = p.next p.next = LNode(elem) def pop_last(self): if self._head is None: raise LinkedListUnderflow('in pop_last') p = self._head if p.next is None: e = p.elem self._head = None return e while p.next.next is not None: p = p.next e = p.next.elem p.next = None return e
簡単な概要:
(0) 前提条件p.next.next にアクセスできるということは、p.next が空ではないということです。
(1) 末尾の挿入。リンクされたリストが空でない場合は、末尾のノードのポインタのみを変更する必要があります。
(2) 末尾の削除。リンクされたリストの長さが空でない場合、変更する必要があるのは最後から 2 番目のノードのポインタです。
単連結リストの単純な変換: 末尾ノードを持つ単連結リスト
class LList1(LList): def __init__(self): LList.__init__(self) self._rear = None ...
書き換える必要があるのは次のとおりです: 先頭の挿入、末尾の挿入、末尾の削除
def prepend(self, elem): if self._head is None: self._head = LNode(elem) self._rear = self._head else: self._head = LNode(elem, self._head) def append(self, elem): if self._head is None: self._head = LNode(elem) self._rear = self._head else: self._rear.next = LNode(elem) self._rear = self._rear.next def pop_last(self): if self._head is None: raise LinkedListUnderflow('in pop_last') p = self._head if p.next is None: e = p.elem self._head = None return e while p.next.next is not None: p = p.next e = p.next.elem self._rear = p p.next = None return e
単連結リストのバリエーション: 巡回単連結リスト
class LCList: def __init__(self): self._rear = None def prepend(self, elem): if self._rear is None: self._rear = LNode(elem) self._rear.next = self._rear else: self._rear.next = LNode(elem, self._rear.next) def append(self, elem): self.prepend(elem) self_rear = self._rear.next def pop(self): if self._rear is None: raise LinkedListUnderflow('in pop') p = self._rear.next if p is None: self._rear = None else: self._rear.next = p.next return p.elem def printall(self): if self._rear is None: raise ... p = self._rear.next while True: print(p.elem) if p is self._rear: break p = p.next
以上がPython データ構造とアルゴリズムのリンク リスト定義の使用方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

Python:Hourglassグラフィック図面と入力検証この記事では、Python NoviceがHourglass Graphic Drawingプログラムで遭遇する可変定義の問題を解決します。コード...

なぜ私のコードはAPIによってデータを返しているのですか?プログラミングでは、APIが呼び出すときにヌル値を返すという問題に遭遇することがよくあります。

毎日のネットワークインタラクションでPythonを使用したクラッキング検証コードの調査、検証コードは、自動化されたプログラムの悪意のある操作を防ぐための一般的なセキュリティメカニズムです...
