[]データ構造及びアルゴリズム動作リニアテーブル(C ++)

  1の#include <stdio.hの>
   2  
  。3  の#define maxSizeの100   // 100のmaxSizeの整数定数値を定義する
  4。 / * シーケンステーブルの構造の定義* / 
  5のtypedef 構造体SqList {
   6。     INTデータ[maxSizeの]; // ストア配列配列表要素
  。7      INTの長さ;         // シーケンステーブルの長さは保存
  8。 } SqListを;   // シーケンステーブル型定義を
  9。 
10  / * 単一のリンク・リスト・ノードの定義* / 
11のtypedef 構造体lノードが{
 12は     int型のデータ;             // データにデータドメインのストレージノード
13は、     構造体 *次lノード;    // 子孫ノードへのポインタ
14 } lノード;   // 単一リンクリストのノードタイプを定義する
15  / * 二重連結リストのノードの定義* / 
16のtypedef 構造体DLNode {
 17。     int型のデータ;   // ノードデータに格納されたデータドメイン
18は、     構造体の前* DLNode;     // 先行ノードポインタのポイント
19。     構造体 DLNode *次の;     // 子孫ノードへのポインタ
20である } DLNode;   // 二重リンクリストのノード・タイプ定義
21は 
22である * / 2.1スタート例* / 
23  / * オーダーテーブルの検索は、最初の要素はのアドレスを見つけることよりも大きい返します* / 
24  INT findElem(SqList L、INT X){
 25      INT I、
 26である     ため(I = 0 ; IはL.lengthを<; ++ I){
 27          IF(X <L.data [I]){ // テーブル内の要素の順序は、xは素子に電流をスキャン未満である参照、小から大まで一つずつ決定される
28              リターン I; // 返された現在の位置未満である場合に
29          }
 30      }
 31で     返す Iを; // シーケンステーブルがない場合大元素比xがxは、表要素の終了後に挿入されなければならない、がある、私は、このリターンマーク
32  }
 33  / * パラメータの関数である基準として重要な役割。伝送パラメータは、プログラムポインタがしばしば採用されているデータの大きなブロックがある場合、それは、すべてのプッシュブロックデータを排除するためにC言語の関数に引数を渡す前に、値によって渡されます。
34 
35  しかし、今は、(C ++)も同様に効率的な選択追加され(特定の特別な事情におよび選択でなければならない)、参照です。* / 
36  空隙 insertElem(SqList L&、INT X){ // L自体が発生するので、使用することが変化するため、参照タイプが
37 [      int型のP、I、
 38は      P = findElem(L、X); // (機能findElemを呼び出します)挿入位置P見つけるために
39      のための(I = L.lengthを- 1。 ; I> = P; - I){ // 右から右の要素に1つの位置だけ左へ
40          L.data [Iは、+ 1。 ] = L.data [I];
 41である     }
 42は      L.data [P] = xと; // X P上の挿入位置
43である      (L.length)++;   //従って内部要素長いテーブルの複数を1インクリメントし
44である }
 45  / * 例2.1エンド* / 
46である 
47  * / 例2.2スタート* / 
48  / * 添字p要素の順序リストL、成功したリターンを削除そうでなければ0 * / 
49  のint deleteElem(SqList L&、INT P、INT&E){ // 変数を入力する参照して変更する必要が
50      INTをI;
 51である     IF(P < 0 || P> L.length- 。1 ){
 52であります         戻り 0 ; // 位置0が失敗削除返される間違った
53である     }
 54である      E = L.data [P]; //E削除する要素に割り当てられた値
55      のために(P = I; IはL.lengthを< - 1。 ; ++ I){
 56は          L.data [I] = L.data [I +は1 ];
 57である     }
 58      - - (L.length); // テーブル長-1 
59      リターン 1 ; // 削除成功リターン1 
60  }
 61が 
62である * / 例2.2終わり* / 
63は、 
64  / * 初期化シーケンステーブル* / 
65  
66  空隙 initList(L&SqList ){ // L自身がそうタイプを参照して変更
67      = L.length 0 ;
 68 }
 69  
70  / * ポインティング要素の位置を見つけるアルゴリズム* / 
71である INTでgetElem(SqListのL、INT P、INT&E){ // 参照型でそれを変更するには
72      IF(P < 0 || P> L.length- 。1){ // Pレンジエラー復帰0から値
73である         戻り 0 ;
 74      }
 75      E = L.data [P];
 76      リターン 1 ;
 77  
78  }
 79  
80  
81  空隙showElem(SqListのL){
 82      INT I。
83      のために(i = 0 ; iは<L.length; ++ I){
 84          のprintf(" %のD:%Dを\ n " 、I、L.data [I])。
85  
86      }
 87  }
 88  ボイドメイン(){
 89      SqListのL。
90      initList(L)。
91      のためにint型 I = 0 ; iが< 5 ; iが++ ){
 92          insertElem(L、iは* 10 )。
93      }
 94      のprintf(" \ nを超える挿入" )。
95      showElem(L)。
96      INT A = findElem(L、10 )。
97      のprintf(" 寻找10返回:%Dを\ n " 、A)。
98      のprintf(" \ nの上で見つけます" );
99      showElem(L)。
100      insertElem(L、35 )。
101      のprintf(" \ nの上に35を挿入します" )。
102      showElem(L)。
103      のint jを;
104      deleteElem(L、2 、J)。
105      のprintf("\ nの上に第2の削除);
 106      showElem(L);
 107 }

 

おすすめ

転載: www.cnblogs.com/dream-to-pku/p/11422946.html