1.  
  2. /*  
  3.  
  4. 线性表的顺序存储结构,在存、读数据时,时间复杂度为O(1),在插入或删除时,时间复杂度为O(n)  
  5.  
  6. */ 
  7.  
  8. /* 线性表的顺序存储结构代码*/ 
  9. #define  MAXSIZE 20  //存储空间初始分配量  
  10. typedef  int  ElemType; //ElemType类型根据实际情况而定,这里假定为int类型  
  11.  
  12. typedef struct    
  13. {  
  14.     ElemType data[MAXSIZE]; //数组存储数据元素  
  15.     int length;             //线性表的当前长度                  
  16. }SqList;  
  17.  
  18.  
  19. #define OK    1  
  20. #define ERROR 0  
  21. #define TRUE  1  
  22. #define FALSE 0  
  23. typedef int Status;  
  24.  
  25. //获取线性表元素的操作  
  26. Status GetElem(SqList L, int i, ElemType *e )  
  27. {  
  28.     if (L.length<=0 || i<1 || i>L.length)  
  29.     {  
  30.         return ERROR;  
  31.     }  
  32.     *e = L.data[i-1];  
  33.     return OK;  
  34. }  
  35.  
  36. //线性表的插入操作  
  37. Status ListInsert(SqList* L, int i, ElemType e)  
  38. {  
  39.     if ( L->length == MAXSIZE)                //顺序线性表已满  
  40.     {  
  41.         return ERROR;    
  42.     }  
  43.     else if (i>L->length+1 || i<1)       //i不在正确范围内  
  44.     {  
  45.             return ERROR;   
  46.     }  
  47.     else if (i<=L->length)                   //插入的数据不在表尾  
  48.     {  
  49.         for ( int k=L->length-1; k>=i-1; k--)//将要插入位置后的数据元素向后移动一位  
  50.         {  
  51.             L->data[k+1] = L->data[k];  
  52.         }  
  53.           
  54.         L->data[i-1] = e;  
  55.     }  
  56.     else if (i == L->length+1)               //插入的位置为表尾  
  57.     {  
  58.         L->data[i-1] = e;  
  59.  
  60.     }  
  61.     L->length++; //线性表的长度+1  
  62.     return OK;    
  63. }  
  64.  
  65. //顺序存储的线性表删除操作  
  66. Status  ListDelete(SqList* L, int i, ElemType* e)  
  67. {  
  68.     //删除的位置不合理,抛出异常  
  69.     if (L->length==0 || i<1 || i>L->length)  
  70.     {  
  71.         return ERROR;  
  72.     }   
  73.     //返回删除的数据元素的值  
  74.     *e = L->data[i-1];   
  75.  
  76.     //若删除的不是线性表尾部元素,则需要移动线性表  
  77.     if (L->length != i)  
  78.     {  
  79.         for (int k=i; k<=L->length-1; k++)  
  80.         {  
  81.             L->data[k-1] = L->data[k];  
  82.         }  
  83.     }  
  84.       
  85.     //线性表的长度减1  
  86.     L->length--;  
  87.     return OK;