线性表的顺序存储实现及相关操作 C语言版

来源:互联网 发布:六十知天命七十古来希 编辑:程序博客网 时间:2024/04/30 19:43
[cpp] view plaincopy
  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. }  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子因为没耐心哭闹怎么办 宝宝哭闹真是没耐心怎么办 对自己孩子没耐心怎么办 跳了把腰伤了怎么办 爸爸对妈妈家暴怎么办 逆反心强23岁怎么办 觉得自己心理有问题怎么办 小孩心理脆弱过于敏感怎么办? 父母老是骂打我怎么办 爸妈打架闹离婚怎么办 夫妻离婚后孩子户口怎么办 离婚后孩子户口怎么办落户 50岁父母要离婚怎么办 父母离婚小孩没有出生证该怎么办 离婚。父母一直在劝说该怎么办 老婆跟人跑了怎么办啊 父母50了要离婚怎么办 父母吵架了我该怎么办 父母看孩子总是吵架怎么办 20岁父母离婚我怎么办 碰到没素质的人怎么办 父母抛弃了我该怎么办 父母说家里没钱困难怎么办 遇到素质低的老婆怎么办 孩子考试心里素质差怎么办 5岁儿童脾气不好怎么办 有一个素质差的父母怎么办 孩子对什么都无所谓怎么办 孩子在学习上无所谓怎么办 孩子对学习无所谓的态度怎么办 孩子不上进什么都无所谓怎么办 倔强的学生不理老师怎么办 一岁宝宝特别犟怎么办 孩子遇到问题喜欢发脾气怎么办 企业培养新人跑了怎么办 二年级学生读不懂题目怎么办 6岁宝宝有鼻炎怎么办 外地儿童怎么办北京医保卡 江苏联宝投资的钱怎么办 银行叫开了证券怎么办 中班心理健康我不开心了怎么办