線性表類型的實現-------順序映像

順序映象:以 x 的存儲位置和 y 的存儲位置之間某種關係表示邏輯關係<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. }  

 帶有附件,需要可以下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章