与教材略有出入

    1. /*
    2. ADT Linear_list{
    3. InitList(); //初始化
    4. ListLength(L); //获取长度
    5. GetData(L,i); //获取对应数字
    6. InsList(L,i,b); //插入
    7. DelList(L,i); //删除
    8. UpdateList(L,i,e); //更改
    9. }ADT Linear_list
    10. */
    11. #define MAXSIZE 10010 //单个线性表最大长度
    12. #define OPT_SUCCESS 1 //操作成功
    13. #define OPT_ERROR 0 //操作失败
    14. typedef int ElemType; //整型作为数据类型
    15. typedef struct
    16. {
    17. ElemType elem[MAXSIZE]; //一个储存数据的数组
    18. int last; //一个储存最后元素位置的指针
    19. }SeqList;
    20. SeqList L; //全局变量
    21. SeqList *pL = &L;
    22. void InitList(){
    23. L.last = -1; //-1为空
    24. }
    25. int ListLength(){
    26. return L.last; //直接返回长度
    27. }
    28. ElemType GetData(SeqList *L, int i){
    29. // O(1)
    30. return L->elem[i]; //直接获取角标
    31. }
    32. int Locate(SeqList *L, ElemType e){
    33. int i = 0;
    34. for(i = 0;i < L->last;i++){
    35. if(e == L->elem[i]) //搜索算法
    36. return i;
    37. }
    38. // O(n)
    39. return -1;
    40. }
    41. int InsList(SeqList *L, int i, ElemType e){
    42. if(i < 0 || i> L->last+1){
    43. return OPT_ERROR; //不在范围内
    44. }
    45. if(L->last>=MAXSIZE-1){
    46. return OPT_ERROR; //表满
    47. }
    48. int k = 0;
    49. for(k = L->last; k >= i; k--){
    50. L->elem[k+1] = L->elem[k]; //所有元素后移
    51. }
    52. L->elem[i] = e; //插入
    53. L->last++; //指针加一
    54. return OPT_SUCCESS;
    55. }
    56. int DelList(SeqList *L, int i){
    57. if(i < 0 || i> L->last+1){
    58. return OPT_ERROR; //不在范围内
    59. }
    60. int k;
    61. for(k = i; k < L->last; k++){
    62. L->elem[k] = L->elem[k+1]; //直接前移
    63. }
    64. L->last--; //指针减一
    65. return OPT_SUCCESS;
    66. }
    67. int UpdateList(SeqList *L,int i,ElemType e){
    68. if(i < 0 || i> L->last+1){
    69. return OPT_ERROR; //不在范围内
    70. }
    71. L->elem[i] = e;
    72. return OPT_SUCCESS;
    73. }