第3章:データ構造:
データ構造は、プログラムの設計のための重要な基盤であります
データ構造の目的を学ぼう:
、データの性質から学ぶ分析し、コンピュータ処理を研究し、
適切な構成を選択するためのロジック、ストレージ構造および関連アプリケーションに対応する操作データの方法。
[データ構造については、三つの要因を考慮してくださいストレージ構造の論理構造、操作方法(操作方法)]
サービスの問題を解決するために、コンピュータの利用効率を向上させるためには、
収集と構造要素とデータ要素のメソッド間の関係:データ構造を指します。
要素間の関係:データの論理構造
記憶構造(又は呼ぶ物理的構造):要素間の関係を記憶します
データ構造カテゴリ:
リニア構造
非線形構造
これは、ツリー構造、図の構造に分割されています。
データ構造は、アルゴリズム設計のための基礎です。
線形構造:主に使用される線形構造客観世界のためには、説明した単一先行および後続のデータの関係を持っています。
リニアテーブル
ストレージカテゴリによると:
順次記憶は:記憶部に順次格納されている連続したアドレスを持つデータ要素のグループは、線形テーブルを記憶します
現象:また、隣接する二つの論理素子、隣接する物理的な場所。
利点:表中のランダムアクセス要素、データ、すなわち、ランダムアクセス。
短所:挿入および欠失は、他の要素を移動する必要があり、(時には大きい移動量)
特徴:
各ノードのスペースがフォローアップのデータがあるかどうか、事前に割り当てられた要求すべきである、このスペースは、データ構造全体まで指導を削除、変更されません。
チェーン店を使用して:データ要素を格納するノードとポインタによって連結されました。
基本的な構造:データ・ソースとターゲット・ドメイン、および各ノードは、二つを有しています。
データフィールドはデータ要素の値を格納します。
直接前駆ポインタフィールド電流要素位置情報が格納されるか、または直後れます。ドメイン情報へのポインタを参照する(またはチェーン)
特徴:各素子のストレージノードは物理アドレスが連続的である必要はありません。
一方、記憶素子は、論理素子を格納しなければなりません。
アプリケーションは、事前分布せず、提出されたとき、接合部のスペースのみが必要になります。
ヘッドは、ヘッド・ポインタを必要とする最初のノードを指し、順序は、テーブルの任意の要素にアクセスすることができます。
直鎖記憶テーブルは、挿入または削除必要はなく、変更のための実際のポインタ場合、必要な変更を行うためにデータフィールドは存在しません。
実際には、特に、データ記憶ノードの要素の導入をステータスリストの処理及び判断を簡単にするために、最初のノードが作成するノードのリンクリストのヘッドポインタの最初のノードとして、呼ばれ。
短所:データ要素へのランダムアクセスではありません
少し:要素を移動せずに操作を挿入し、削除します。
単独リンクリストを検索し、挿入、削除の操作を、P102を参照してください。
いくつかの他のチェーン格納構造:
二重にリンクされたリストは、各ノードは二つのポインタ、直接の前駆体が含まれている、それが直接の後継者です。
機能:表から任意のノードは、リスト全体を横断します。
循環リスト:片方向リンク・リスト(または二重リンクリスト)に基づいてテーブルの端にあるノードリスト内の最初のノードへのポインタが指すように、円形のリストを構成しています。
特徴:あなたは、リスト全体を横断する任意のノードから開始することができます。
静的リスト:アレイは、ポインタ要素ノードを表す配列要素の添字と格納されたテーブルの直鎖構造を用いて説明します。
リニアフォームの基本的な操作:削除、挿入、検索。
スタックとキュー
リニア形と同じ論理構造。
特長:運用の制限;
スタック:LIFOの先進性
キュー:最後のアウトFIFO
スタック:
これは、一方の端部にデータ構造にアクセスすることによってのみ線形データ記憶および検索を達成することができます。
スタックの最上部:一方の端を挿入し、削除します
スタックの底:もう一方の端に対応するスタック
空のスタック:データ要素を含まないスタック
スタック操作:
スタックInitStack(S)を初期化します。空のスタックを作成します。
判決空のスタックのisEmpty(S):スタックが空の場合、それは「真」を返し、そうでない場合は「偽」
スタックプッシュ(S、x)は:スタック要素の頂部に添加し、スタックポインタを更新xは。
ポップポップ(S):スタックからスタック要素の上面、及びスタック・ポインタが更新されます。
値がスタックの最上部にする必要がある場合、それはポップ(S)は、機能素子スタックの戻り値として定義されてもよいです。
トップ(S):先頭の要素の値を返しますが、スタックポインタを変更しません。
質問:
スタック・ポインタによってスタック内の要素の数は、それを定義しましたか?スタック内の要素タイプは仕様がどのように定義されていますか?
スタックを初期化し、スタックは、スペースを定義します。
ストレージ構造をスタック:
シーケンシャルストレージ
記憶部に順次格納されている連続したアドレスのグループは、スタックの底部にスタックからデータ要素を格納します。
トップ要素のトップ位置を指示するポインタを提供されます。
事前定義された記憶空間(またはアプリケーション)スタックを必要とします、
チェーンストレージ(リンクスタック)
スタックメモリの構造としてリンクリスト
スタックポインタは、ヘッドポインタのリストである、ヘッドポインタのリストを設定しないでください。
アプリケーションのスタック
典型的なアプリケーション:式の評価、マッチングブラケット。
コンピュータ言語の実装では、スタックを使用します。
処理の非再帰的プロセスへの再帰的な手順は、スタックは、重要なアプリケーションを持っています。
キュー:
リニアFIFOテーブル。
ファーストアウトでFIFOまず、
特徴:
もう一方の端の要素を削除する、唯一の要素の一方の端部に挿入されます。
要素は、テール(リア)と呼ばれ、挿入端を可能にします。
削除ヘッド(フロント)と呼ばれ、終了要素を可能にします。
頭と尾のポインタを持っています。(HOLポインタフロント、末尾ポインタREAR;)
キューの基本的な操作:
キューの初期化InitQueue(Q):空のキューQを作成します。
空のisEmpty(Q)の分析:「偽」キューが空の場合は、そうでない場合は、「真」を返すと
エンキューエンキュー(Qは、X):Xは、尾のキューQ要素に追加され、テールポインタが更新されます。
チームDelQueue(Q):ヘッダー要素は、キューQから除去され、ヘッド・ポインタを更新します。
ヘッド素子FrontQue(Q)を読む:先頭ポインタを更新せずに、ヘッド素子の値を返します。
キュー格納構造:
順次記憶構造:(他のデータ構造で順次)
計算の複雑さ、唯一の修正要素エンキューキューのテール・ポインタを減らすために、元素のみヘッドポインタを変更デキュー。
しかし、テール・ポインタは、上限を持つことになり、テール・ポインタが上限に達したときに、それが唯一の要素が増加するのテール・ポインタを変更できないように、キューの記憶容量が、予め設定されているからです。
モジュロ演算によって達成循環キュー:(割り切れます。)
単純な演算を維持することがデキューをエンキューすることができます。
オペレーション・キューの定義によれば、Q.rear == Q.front、即ちヘッドポインタとテールポインタが等しい場合、キューが空であってもよく、または月キューがいっぱいである、このような状況は明らかに問題です。
2つの結果:1、これが発生したときに、キューの代表が空またはフルであるように、フラグを設定します。
図2に示すように、犠牲記憶部大会:キューの末尾ポインタ位置の次の位置は、キューが場合待ち行列先頭ポインタ満杯であることを示しています。(キューの長さが1の場合、頭に浮かぶ疑問は、キューは、要素を挿入したことがないではないですか?)
チェーンストアキューキュー:(チェーン)
操作を容易にするために、キューチェーンは、ヘッダノードに追加され、ヘッドノードへのヘッドポインタを作ります。
頭部および尾ポインタの同じ値、およびヘッドノードへのすべてのポイント:キューが空の決意条件があります。
アプリケーションのキュー:
一般的な印刷ジョブ、離散イベントのコンピュータシミュレーションとして、並んで待つために、治療の機会に使用されます
文字列:
文字列は、特殊な線形形式です。
その要素が文字です。
操作では、文字列は、多くの場合、全体として見たときに処理されます。
文字のみの優先配列からなる文字列。
いくつかの概念の文字列:
空の文字列:0の文字列の長さ。
スペース文字列:文字列は、1つ以上のスペースで構成されています。
サブ:任意の長さの連続的な列からなる配列
主な文字列:文字列の部分文字列含みます
ときに初めてメインの文字列の位置のサブストリングは、サブストリングが、メイン文字列の部分文字列の位置の最初の文字を指します。
空の文字列は、サブストリングの任意の文字列です。
文字列は、に等しい。同じ長さの二つの文字列、および文字に対応した数は等しいです。
文字列の比較:開始から最初の操作の2つの文字列の比較は、文字列コード値が大きい場合、大きな、文字コードのASCII値を比較します。
基本操作文字列:
割り当てStrAssign(S、T):文字列の文字列S Tに割り当てられた値。
操作連結方式(S、T)接続:新しい文字列を形成するために、文字列sの終わりに直列接続T Jします。
ストリング長StrLength(単数または複数)を探している:文字列sの長さを返します。
文字列の比較StrCompare(S、T):2つの文字列を比較します。
戻り値-1、0、それぞれ、S <T、S = T、S> T。
Qiuzi文字列SUBSTRING(S、ストラト、lenは):LEN文字列のスタートから始まる文字列sを返します。
文字列の格納構造:
順次記憶構造:文字列値の文字のシーケンスを格納する記憶手段の連続したアドレスのセット。
文字列は文字で構成されているので、プログラミング言語によって提供される文字列のメモリアレイを定義することができます、
また、アプリケーションのスペース文字列の文字列の長さのニーズに応じて動的かもしれません。
格納構造:リスト格納されている文字列の文字。
各ノードは、文字に格納することができ、複数の文字を格納することができます。
問題の記憶密度を考慮して、選択されたノードのサイズは、直接プロセスストリングの効率に影響を与えます。
文字列パターンマッチング:測位演算ストリング
サブストリングはまた、パターン文字列を知ら。
単純なパターンマッチングアルゴリズム:血管雑音 - フォックスアルゴリズム。
改善されたパターンマッチングアルゴリズム:KMPアルゴリズム。
配列、行列と一般表:
アレイ、一般リストは、線形形式のプロモーションとして見ることができます。
データ要素は、まだ表です。
アレイ:テーブルの長い寸法の延長与えられました。
表中の線形要素は、リニアテーブルです。
n次元アレイは、構造と一致し、「均質」データ構造、同じタイプの各データ要素です。
アレイ構造の特徴:
要素の固定数、配列が定義され、その要素の数が固定されています。
同じタイプの要素。
関係制約指数上限および下限を有し、そして下付き文字は、順序付けられました。
基本的な操作の配列:
対応するデータ要素にアクセスするには、インデックスを指定します。
対応するデータ・エレメントのデータ項目の値を変更する、インデックスを与えられました。
シーケンシャルストレージアレイ:
アレイは、一般的に挿入しないと削除操作を、アレイの定義と、データ構造内の要素の数との関係を、エレメントは、もはや変更される可能性があり、かつ、シーケンシャルストレージアレイ構造に適していません。
マトリックス:
データ構造は、主な懸念がある:保存収納スペースを効率的に行うことができる場合には行列演算のさまざまなを作成する方法。
ストレージ圧縮:いくつかのマトリックス中に、同一の値または0の要素の多くの要素があり、記憶空間を節約するために、そのようなメモリマトリクスに圧縮することができます。
同じ要素の値の複数の1つのメモリセルのみが割り当てられ、メモリセル0が割り当てられていません。
特別なマトリックス:同一の元素の分布(または要素0)行列の値が一定の規則性を持っています
スパースマトリックス:マトリックスは比較的特異的、不規則な分布です。
一般的なリスト:線形形式の促進、
テーブル一般化線形形態との間の差:
一般化されたテーブル要素がテーブル構造が存在してもよい、単一の要素のいずれかとすることができます。
要素は、サブ構造の単一要素の非直線形です。
一般的に一般化リストと呼ばれます:
属性の一般リスト:
テーブル内の要素の一般化された数:テーブル長一般
一般化されたテーブルの深さ:一般的なリストの展開の後の括弧内に含まれる層の最大数。
一般テーブルの基本的な操作:
ヘッダを取る:ヘッド(LS):最初の要素は、空でない一般的なテーブルヘッダです。
尾部(LS):フッター取る空でない一般的なテーブルを、ヘッダに加えて、テーブルは、他の要素フッターによって参照されます。
[#####の特徴のいくつか、及びそれが従う追加、参考図書P #####で】
--------(私は行を分割しています)--------
参考:
1.「ソフトウェア設計者ガイド」(第五版、清華大学プレス、チュー華、Huoqiuヤンエディタ)
2. SEOULスクール:www.ccidedu.com(ビデオリソースを教えます)
www.eimhe.com(ビデオソースを教える):オンライン学習3.川は、米国のグループを買います
4。
備考:
初期修正:午後3時31分32秒2019年10月30日
環境:Windows 7の/ Pythonの3.7.2