1.コンセプト
リニアテーブルは抽象概念として見ることができ、それは抽象データ型として使用することができ、リニアテーブルはまた、要素間の関係シーケンシャルに記録される特定の要素の集合です。それが唯一の定義、抽象クラスに対応しています。
2.実現
1.オーダーテーブル
テーブルの順序基本的に非常に簡単である:表内の要素の順序は、十分に大きな連続した記憶部に記憶され、記憶領域の開始位置への最初の要素、順番に格納されている残りの要素、構成要素によって記憶素子との間の論理関係(要素間の暗黙的な関係で表される)で表される物理的位置ゾーン
メモリ内のシーケンステーブルレイアウト:
1.基本的な操作順序テーブルの実現
-
作成し、アクセス操作
空のテーブルを作成する場合、記憶素子、テーブルの記録容量を割り当てる必要があり、要素数が0に設定され、複雑さはO(1)
-
シンプルな決意操作
テーブルを分析して(1)Oの両方の複雑さ、満杯または空のテーブルが容易に達成されます
-
私の標準的な要素をセットにアクセス
これは、テーブル内の要素の数、したがって、O(1)操作に依存しません
-
トラバーサル操作
トラバーサルトラバーサル中にテーブル内のエレメントへのシーケンシャルアクセスは、記録位置に到達し、その要素の位置を算出し、素子を得ることができます。複雑さの各要素を得ることがO(1)、複雑さはO(N)であるので、テーブル全体をトラバースすることです。
-
与えられた要素dの位置を探します
この操作は、トラバース動作シーケンスの比較、O(N)の時間計算を使用して、検索または検索と呼ばれています。
-
位置kが最初に表示された後、指定された要素dの位置を探します
位置kから通過後ことを除いて同じで5、。
-
要素を追加します
テーブルの最後に追加および削除する簡単で、時間計算量はO(1)です。追加バックトラブルいくつかの必要なデータ操作を移動位置、前方または後方に移動し、時間計算量はO(LEN-I)である他の位置を削除し、私は、作動位置です。
-
要素を削除します
要素の後端が簡単である削除、時間計算量はO(1)、削除O(n)の条件に基づいて削除O(N)の一般的な位置、。
要約:
利点:表要素に加えて、位置O(1)時間、テーブルにコンパクトに収納要素、によってアクセスは、(1)空間のみOは、補助情報の少量を格納します。
短所:テーブルが大きい場合は、ストレージブロックのサイズが変動データの挿入や削除など、自由がたくさんあるでしょうしません一度テーブルの要素を格納し、連続記憶領域、大きな連続したメモリ空間を必要としユニットは、廃棄物が得られ、存在します。
配列表の2構造
二つの基本的な実装
-
- 単一構造
- セパレート構造
-
一体式分析
一緒に、よりコンパクトに、関連する情報、強い整合性、管理が容易に実現します。
あなたは、固定サイズの記憶領域を作成した後
-
個別の分析
テーブルは、テーブル全体に関連する情報、関連も基本的なテーブルへのリンクを介して、オブジェクトの別の記憶領域別個の要素に配置され、実際の要素、そのようなテーブルのオブジェクトのサイズを均一に記憶するが、テーブルは、2つの別々のオブジェクトを必要とします実装、作成および管理の複雑さ。最大の利点は、テーブルの容量を変化させることができると言っているのと同じ識別子、オブジェクト格納領域を変更するための要素、の場合に、新しい可能をもたらし別個に達成されます。
-
-
- より大きなストレージ領域に適用されます
- 新しい記憶領域に、既存の要素の表をコピーします。
- 記憶領域の新しい要素と記憶領域のオリジナル要素を置き換え
- 実際に追加する新しい要素
膨張は、10個の要素が収納位置を維持する必要性を置き換える、記憶場所、挿入されたデータのその後大量に展開する時に、要素はしばしば移行をコピー。すべての時間は、現在のストレージの拡張が大規模なデータの時間を倍増した場合は、無駄な収納スペースの多くの原因となります。拡大戦略を使用したときにも、比較検討する必要があります。
リスト3.python
基本的に
- ベースの添字効率的なアクセスと更新
- 任意の添加元素を可能にするが、同じテーブルでプロセスIDに参加します
ソリューション
- 要素がアクセスO(1)時間を必要とし、要素の順序を維持するため、このテーブル技術だけ連続シート
- 任意の数の要素に対応するために必要な、個別の技術のようにのみ使用することを要素記憶領域を置換することができなければなりません。
実際の戦略
- 小さな空のテーブルまたはテーブルを確立するとき、システムは、それらが記憶領域として大きなとして4倍以上を変更した場合、8つの要素を収容可能な記憶領域を割り当てます
- テーブル50,000の容量は、二重の容量の記憶領域を変更した場合
4.シーケンステーブルの概要
- 最も重要な特徴は、位置決め要素Oアクセスに(1)時間、アップデートです。多くの簡単な操作効率が比較的高いです。
- 効率の最も厄介な問題は、追加、削除などの操作することです
- 連続ストレージ・スペースを必要とします
- 構造は十分に柔軟ではありません
2.リンクテーブル
-
単一のリスト
このような構成では、テーブルを把握するために、単に第1のノードテーブルへの参照を保持する変数を使用します
-
- 単一リンクリストテーブルの特定のノードで構成されてい
- 各ノードは、ノードのリンクとしても知られている、独自のアイデンティティを持っているオブジェクトであります
- 片道リンクの順序によって確立されたノード間の接触
- いずれも、フィールドのリストの最後に一つだけが最後のノードをリンクするために設定されていません。
2.1.1。基本操作
-
- 空のリストを作成します。ちょうど適切なヘッダ変数が空のリンクに設定されている置きます。
- リストを削除する:リスト内のすべてのノードを破棄し、テーブル内のpythonだけでなしに割り当てを修正するために、Pythonインタプリタは、自動的に未使用のストレージを再利用します。
- 空かどうかを決定する:変数値とエアリンクのヘッダ値を比較します
- プログラムは、すべてのストレージ・スペースがなくなるまでの一般的なリスト満たされることはありません:フルかどうかを判断するには
- 第一の端部が挿入されます。
-
- 新しいノードおよび格納されたデータを作成します。
- 新分野へのオリジナルのリンクリストのヘッドノードへのリンク次のノード
- 新しいノードを指すように変更されたヘッダー変数
- 一般的なケースが挿入され
-
- 挿入位置を探します
- 三段階の動作の第一の端部の実装
- 表の最初の要素を削除する:ちょうどヘッダポインタを変更する、それは第2のノードを指すように
- 通常の状況下で削除します要素の前に配置されているノードの位置を見つけ、次のフィールドは、後にノードリンクの要素を改名しました
- 、スキャントラバース見つけて:すべてが唯一のヘッドテーブルから開始することができ、目次にチェックされているので、リストには、リンクの一方向のみであるので、リンクは、徐々に表に沿ったリンク、プロセス、唯一の彼の拳で、ヘッダの先頭にありますスキャンと呼ばれます。
-
- 運用上の複雑
- 空のテーブルを作成します:O(1)
- テーブルを削除:PythonはOである(1)
- 空の分析:O(1)
- 要素を追加または削除します。
- 第一の端部が追加:O(1)
- 尾部を添加した:O(N)
- 参加または:O(n)は、平均と最悪の場合は、
- 要求テーブル長:全体をスキャンする必要性、延伸の長さ、長さ、データ・コンポーネントテーブルとして記録されていてもよい、O(1)