線性表的順序存儲實現及相關操作 C語言版

  1. /* 
  2.     線性表的順序存儲實現  C語言版本 
  3.     作者:Shmily 
  4.     日期:2011年8月30日 
  5.     編譯環境 VC++6.0 
  6. */  
  7. /**************************************************/  
  8. #include <stdio.h>  
  9. /**************************************************/  
  10. #define MaxSize 20                      //線性表最大長度  
  11. #define OK      1  
  12. #define ERROR   0  
  13. #define TRUE    1  
  14. #define FALSE   0  
  15. typedef int     Status;               
  16. typedef int     ElemType;  
  17. /**************************************************/  
  18. typedef struct {  
  19.     ElemType    data[MaxSize+1];        //爲了操作方便,規定下標從1開始  
  20.     int         length;                 //順序表當前長度  
  21. }SqList;  
  22. /**************************************************/  
  23. //置空表  
  24. Status  SetNull(SqList *L)  
  25. {  
  26.     L->length = 0;  
  27.     return OK;  
  28. }  
  29. /**************************************************/  
  30. //在末尾追加  
  31. Status append_arr(SqList *L, ElemType val)  
  32. {  
  33.     if (L->length > MaxSize)  
  34.         return FALSE;  
  35.     L->data[++L->length] = val;  
  36.     return TRUE;  
  37. }  
  38. /**************************************************/  
  39. //求順序表的長度  
  40. int GetLength(SqList *L)  
  41. {  
  42.     return L->length;  
  43. }  
  44. /**************************************************/  
  45. //輸出順序表  
  46. void DisLisy(SqList *L)  
  47. {  
  48.     int i;  
  49.     for (i=1; i<=L->length; ++i)  
  50.         printf("%d ", L->data[i]);  
  51. }  
  52. /**************************************************/  
  53. //順序表判空  
  54. Status ListEmpty(SqList *L)  
  55. {  
  56.     if (0 == L->length)  
  57.         return TRUE;  
  58.     else  
  59.         return FALSE;  
  60. }  
  61. /**************************************************/  
  62. //取得順序表中第i個元素的值,放入e中  
  63. Status GetElem(SqList *L, int i, ElemType *e)  
  64. {  
  65.     if (i<=0 || i>L->length)  
  66.         return ERROR;  
  67.   
  68.     *e = L->data[i];  
  69.     return OK;  
  70. }  
  71. /**************************************************/  
  72. //查找順序表中是否有與e相同的元素  
  73. //若有則返回該元素的下標  
  74. //否則返回0  
  75. Status LocateElem(SqList *L, ElemType e)  
  76. {  
  77.     int i;  
  78.     for (i=1; i<=L->length; ++i)  
  79.     {  
  80.         if (e == L->data[i])  
  81.             return i;  
  82.     }  
  83.     return FALSE;  
  84. }  
  85. /**************************************************/  
  86. //在順序表中的第i個位置插入元素e  
  87. //若插入成功返回TRUE  
  88. //否則返回FALSE  
  89. Status ListInset(SqList *L, int i, ElemType e)  
  90. {  
  91.     int k;  
  92.   
  93.     if ( (i<1 || i>L->length+1)   
  94.          && (L->length < MaxSize) )  
  95.         return FALSE;  
  96.       
  97.     if (i<=L->length)  
  98.     {  
  99.         for (k=L->length; k>=i; --k)  
  100.             L->data[k+1] = L->data[k];  
  101.     }  
  102.     L->data[i] = e;  
  103.     ++L->length;  
  104.     return TRUE;  
  105.   
  106. }  
  107. /**************************************************/  
  108. //刪除順序表中第i個元素的值  
  109. //刪除成功返回被刪除的元素的值  
  110. //刪除失敗返回FALSE  
  111. Status ListDelete(SqList *L, int i, ElemType *e)  
  112. {  
  113.     int k;  
  114.     if (ListEmpty(L))  
  115.         return FALSE;  
  116.     if (i<1 || i>L->length)  
  117.         return FALSE;  
  118.       
  119.     *e = L->data[i];  
  120.     if (i<L->length)  
  121.     {  
  122.         for (k=i; k<L->length; ++k)     
  123.             L->data[k] = L->data[k+1];  
  124.     }  
  125.     --L->length;  
  126.     return TRUE;  
  127. }  
  128. /**************************************************/  
  129. int main(void)  
  130. {  
  131.     SqList L;  
  132.     ElemType e;  
  133.     SetNull(&L);  
  134.     append_arr(&L, 3);  
  135.     append_arr(&L, 2);  
  136.     append_arr(&L, 6);  
  137.     append_arr(&L, 2);  
  138.     ListDelete(&L, 2, &e);  
  139.     DisLisy(&L);  
  140.     printf("\n\n%d", e);  
  141.     return 0;  
  142. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章