基本的な操作シーケンステーブル

はじめに:最近esp8266とUCOS-IIIを果たし++、より学習C、主にポインタの接触構造、リンクリスト;だけ(データ構造は、実際には非常に重要であり、学ばなければならないデータ構造で自分自身を見て、アルゴリズムを学んでいます、)ハッハッハ、飛び石要素テーブル操作を追加および削除するために個人的な見解、効率が比較的低い(あなたが他の要素の多くを移動したい)、と私はポインタ操作を使用して、操作の前にリストを書いて、効率がはるかに高いですA。まあ、それは今日の研究の概要を見てください!

まず、初期化シーケンステーブル:

アルゴリズムのステップ:

この点ELEM空間のベースアドレスように動的に、所定の空間的アレイに定義されたサイズに割り当てられた1、Lシーケンステーブル

図2に示すように、テーブルの現在の長さが0に設定されています

擬似コード:

ステータスInitList(SqList&L)は
{ 
    // 配列の空のリストLを作成 
   L.elem = 新しい新しい elemType [MAXSIZE]; // ある配列空間のサイズとMAXSIZEシーケンステーブルを割り当て
   IF!終了(OVERFLOWを(L.elem) ); // メモリ割り当て失敗出口 
   L.length = 0 ; // 長さ0の空リスト
  戻りOK; 
}

操作の第二に、値:

アルゴリズムのステップ:

無理、エラーが返された場合は1、指定された場所は、合理的な番号i(1 <= l <= L.length)の値か否かが判断されます。

iの値が妥当である場合は2を、次いで、i番目のデータ要素L.elemは[I-1]パラメータeに割り当てられ、それはEによる送信データ要素i番目の値を返します

それはのためのコードです:

ステータスGetElem(SqList L、int型 I、ElemType&E)
{ 
      場合(iは< 1 || I> L.length)    戻り EERORと、// 判断I是否合理 
     E = L.elem [I- 1 ]。
    返却OK。
}

第三に、検索操作:

アルゴリズムのステップ:

図1に示すように、最初の要素から出発し、及びeを順次比較し、見つかった同じ素子E L.elem [i]の場合、検索が成功しており、iは+ 1要素のインデックスを返します。

2.全体シーケンステーブルを検索するが見つからない場合は、検索が失敗し、それは0を返します。

擬似コード:

INT LocateElem(SqListのL、elemType電子)
{ 
     // シリアル番号を返し、シーケンステーブルL Eにおけるデータ要素の値を見つける
    ために(I = 0 ;私はL.lengthを<; I ++は
    { 
       IF(L.elem [I ] == E)   リターン   Iは+ 1 ; 
      
    } 
   戻り 0 ; 

}

第四に、挿入:

アルゴリズムのステップ:

図1に示すように、挿入位置は、有効I(法定値の範囲1 I <= iが<= N + 1)、有効な戻り場合にエラーか否かを判断します

2、フルならば、それはエラーを返し、テーブル記憶スペースの順序が一杯であるかを決定

図3に示すように、i番目の位置のn番目の要素は、後方に一つの位置(移動せず、I = N + 1)空のi番目の位置を順次移動させます

図4に示すように、iは位置電子最初の新しい要素に挿入されます

図5に示すように、プラステーブルの長さ

擬似コード:

ステータスListInsert(SqList L&が、int型I、elemType電子)
{ 
     // シーケンステーブルに挿入された新たな要素Eのi番目の位置、値の有効範囲は= Iである。1 <iが<= + +1 L.length 
    IF((I < 1。)||(I> + L.length 1。 ))     戻り ERROR;    // I無効値
    IF(== L.length MAXSIZE)   戻り ERROR; // 記憶空間が満杯である
    ため(J = L.length- 。1 ; J> = I + 1、J、 
    { 
       L.elem [Jの + 1 = L.elem [J]]; // 要素の挿入位置後及び後退 
       L.elem [I-を1 = E] ; // 第1の位置Iに挿入された要素e
       L.lenfth ++; // テーブルプラス長い
       戻るOKを; 
     } 
}

第五に、削除操作:

アルゴリズムのステップ:

図1は、iが、そうでない場合は法的リターンエラー方法(1 <= iが= N <正当な値)を削除されたか否かを判断します

2、I + 1番目のn番目の要素が順次前方に移動させるための一つの位置(i =は場合nは移動しません)

図3に示すように、マイナステーブルの長さ

擬似コード;

ListDeleteステータス(SqList L&は、int型のI)
{ 
     //は、配列表のi番目の要素を削除して、値の有効範囲は、Iである。1 <= iが<= L.length 
     IF((iは< 1)||(I > L.length)     戻りERROR;
     のための(I = J; J <L.length- 1。、J ++ 
    { 
        L.elem [J - 1 ] = L.elem [J]; // 前進 
        - L.長さ、
         戻りOKを; 
     } 
}

VIの概要;

        あなたがあなた自身の理解を深めることができますので、注文テーブルまたは一本鎖かどうか、学習するための最良の方法は、基本的な概念を理解して、彼らと戦うためにすぐに使用することができています。まあ、今朝の午前0時49分で、給油を継続するために、睡眠、明日を浴びせ。

 

おすすめ

転載: www.cnblogs.com/1121518wo/p/11415922.html