线性表类型的实现-------顺序映像

顺序映象:以 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. }  

 带有附件,需要可以下载

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