線形テーブル
線形テーブルは、最も単純で最も一般的に使用されるデータ構造です。それらは、個々のデータ要素(ノード)で構成される有限シーケンスです。その中で、データ要素の数nはテーブルの長さです。 nがゼロの場合、空のテーブルになります。空でない線形テーブルは通常、次のように記録されます。
(a1、a2、…、ai-1、ai、ai+1、…、an)
1。線形テーブルのシーケンシャルストレージとアルゴリズム
線形テーブルのシーケンシャルストレージとは、線形テーブルのデータ要素のストレージを、アドレスが論理的な順序である連続ストレージユニットのセットに記録することを指します。この方法で保存されている線形テーブルは、シーケンシャルテーブルと呼ばれます。
1。順序表の構造定義
public class seqlist { / *初期スペースは10 * / private static final int list_size = 10; /*配列データは、要素を保存するために使用されます*/ private int [] data; /*現在のテーブルは長く、実際の要素の数は保存されています*/ private int length。 } 2。操作を挿入します
シーケンシャルテーブルの挿入操作とは、i-1th要素と線形テーブルのi番目の要素の間に新しい要素を挿入することを指します。シーケンステーブルの隣接する要素も物理構造に隣接するため、物理的なストレージ関係は対応する変更も受ける必要があります。 i = n+1でない限り、元の注文テーブルのi番目の要素から始まるすべての要素は、それぞれ1位で後方に移動する必要があります。
/** *注文テーブルリストのi番目の位置の前に新しい要素を挿入 * @paramリスト注文テーブル * @param i position * @param node new element */public void insertlist(seqlist list、int i、int node){if(i <1 || i> list.length + 1){system.out.out.out.out.out.out.戻る; } if(list.length> = list_size){system.out.println( "overflow");戻る; } for(int j = list.length -1; j> = i -1; j - ){ / *最後の要素から起動し、1つずつ戻って移動します * / list.data [j+1] = list.data [j]; } /*新しい要素を挿入* / list.data [i-1] = node; / *テーブルの長さに1を追加 */ list.length ++; } 3.操作を削除します
シーケンシャルテーブルの削除操作は、テーブル内のi番目の要素を削除することを指します。挿入操作とは対照的に、挿入は要素を後方に移動し、削除操作は要素を前方に移動しています。
/***注文テーブルリストのi番目の要素を削除し、削除された要素を返します* @paramリストシーケンステーブル* @param i要素位置*/public node*/public int deletelist(seqlist list、int i){int node = 0; if(i <0 || i> list.length){system.out.println( "position error");ノードを返す; } node = list.data [i-1]; for(int j = i; j <list.length; j ++){ /* element forward* / list.data [j-1] = list.data [j]; } list.length-;ノードを返す;} 4。逆順序表
まず、テーブルの長さの半分をループ制御回数として使用し、テーブルの最後の要素を最初の要素の順に交換し、2番目の要素の順序で2番目の最後の要素を交換し、交換が完了するまで交換します。
/***シーケンステーブルInverse* @paramリスト元の注文テーブル* @returnシーケンステーブルInverse*/public seqlist converts(seqlist list){int node; int length = list.length/2; for(int i = 0; i <length; i ++){ /*対称交換要素* / int j = list.length -1 -i; node = list.data [i]; list.data [i] = list.data [j]; list.data [j] = node; }返品リスト。 } 2。線形テーブルのチェーンストレージとアルゴリズム
リニアテーブルを保存するチェーンストレージ構造のデータ要素のストレージスペースは、連続的または不連続である可能性があるため、リンクリストのノードにランダムにアクセスすることはできません。チェーンストレージは、最も一般的なストレージ方法の1つです。
チェーンストレージ構造を使用して各データ要素を表す場合、要素自体の情報を保存することに加えて、後続の要素のストレージ位置を示すアドレスも必要です。このストレージメソッドで表される線形テーブルは、リンクリストと呼ばれます。
5。単一のリンクリストの構造定義
Public Class LinkList { /*データフィールド* /プライベートチャーデータ。 /*連続要素*/プライベートリンクリスト次へ;} 6。テーブルビルディングアルゴリズム
ヘッダー挿入メソッドは、空のテーブルから始まり、データを繰り返し読み取り、新しいノードを生成し、新しいノードのデータフィールドに読み取りデータを保存し、最終リンクリストのヘッダーに新しいノードを挿入します。
/***ヘッダー挿入によるテーブルの作成* @param chars文字配列* @returnシングルリンクリスト*/public linklist createListf(chars){linklist node; LinkList Head = null; for(char ch:chars){ /* new node* / node = new linklist(); node.data = ch; /*後継ノードを指す*/ node.next = head; head = node; } /*ヘッドノードに戻る* / return head;} 7。テール挿入方法テーブルビルディングアルゴリズム
ヘッダー挿入テーブルのノードの順序は、入力時の順序の反対です。入力の順序が一貫している場合、テール挿入方法を使用できます。
/***テーブルを作成するテール挿入方法* @param chars文字配列* @returnシングルリンクリスト*/public linklist createListr(chars){linklist node; LinkList Head = null; linklist rece = null; for(char ch:chars){node = new linklist(); node.data = ch; if(head == null){ /*新しいノードはヘッドノード* / head = node; } else { /*前のノードは新しいノードを指します* / rece.next = node; } /*テーブルの尾は、新しいノードを指します* / reco = node; } /*ヘッドノードに戻る* / return head;}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。