リニア・テーブル・タイプの実装------シーケンス・イメージ


シーケンスマッピング:xの記憶位置とyの記憶位置との間の何らかの関係で論理関係を表す.
最も簡単なシーケンスマッピング方法は、yの記憶位置とxの記憶位置を隣接させることである. 
シーケンスイメージのC言語の説明:
シーケンステーブルのストレージ構造定義

  
  
  
  
  1. #define  MAXSIZE     100    
  2.            //  ,  
  3. typedef  struct   
  4. {  
  5.      ElemType   elem[MAXSIZE];    
  6.      int      length;   //   
  7.  
  8. } SqList;  //     

 
空のテーブルとして作成および初期化

  
  
  
  
  1. Status InitList(SqList &L)  
  2. {  
  3.     // TODO (#1#):     
  4.     L.length=0;  
  5.     return OK;  
  6.     //-------------------------------------  

テーブルLを空にする

  
  
  
  
  1. Status ClearList(SqList &L)  
  2. {  
  3.     // TODO (#1#):   
  4.     L.length=0;  
  5.     return OK;  
  6.     //-------------------------------------  

表Lの長さを求める

  
  
  
  
  1. int ListLength(SqList L)  
  2. {  
  3.     // TODO (#1#):   
  4.     return L.length;  
  5.     //-------------------------------------  
  6. }  

表Lにおいて、要素eが初めて現れる位置を特定する.操作は正常にビットシーケンスを返し、失敗した場合は0を返します.
compare(a,b)は比較関数であり、マッチング時にtrueを返し、そうでなければfalseを返す
 

  
  
  
  
  1. int LocateElem(SqList L, ElemType e, bool (*compare)(ElemType,ElemType))  
  2. {  
  3.     // TODO (#1#):  e, compare(a,b)  
  4.     for (int j=0; j<L.length; j++)  
  5.         if ( compare(L.elem[j],e) )  return j;  
  6.     return 0;  
  7.     //-------------------------------------  

表Lにi番目の要素eを挿入する操作はOKに成功し、失敗した場合はERRORに戻る
 

  
  
  
  
  1. Status ListInsert(SqList &L, int i, ElemType e)  
  2. {  
  3.     // TODO (#1#):   
  4.     int j;  
  5.     if(i<1||i>L.length+1) return ERROR;  
  6.     for(j=L.length;j>=i;j--)  
  7.     {  
  8.         L.elem[j]=L.elem[j-1];  
  9.     }  
  10.     L.elem[i-1]=e;  
  11.     ++L.length;  
  12.     return OK;  
  13.     //-------------------------------------  

表Lのi番目の要素を削除し、結果をeで返す.操作が成功してOKに戻り、失敗した場合はERRORに戻る
 

  
  
  
  
  1. Status ListDelete(SqList &L, int i, ElemType &e)  
  2. {  
  3.     // TODO (#1#):   
  4.     int j;  
  5.     if(i<1||i>L.length) return ERROR;  
  6.     e=L.elem[i-1];  
  7.     for(j=i-1;j<L.length;j++)  
  8.     {  
  9.         L.elem[j]=L.elem[j+1];  
  10.     }  
  11.     --L.length;  
  12.     return OK;  
  13.     //-------------------------------------  
  14. }  

添付ファイル付きでダウンロード可能