1.链表顺序存储

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. typedef int ElementType;
    4. const int MAXSIZE = 100;
    5. struct LNode
    6. {
    7. ElementType Data[MAXSIZE];
    8. int Last;
    9. };
    10. typedef struct LNode *List;
    11. List MakeEmpty();
    12. ElementType FindKth(int K, List Ptrl);
    13. int Find(ElementType X, List Ptrl);
    14. void Insert(ElementType X, int i, List Ptrl);
    15. void Delete(int i, List Ptrl);
    16. int Length(List Ptrl);
    17. int main(void)
    18. {
    19. List P;
    20. P = MakeEmpty();
    21. for(int i = 0; i < 10; i++)
    22. {
    23. Insert(i,i+1,P);
    24. }
    25. for( int k = 0; k <= P->Last; k++ )
    26. printf( "%d ", P->Data[k] );
    27. printf("\n");
    28. printf( "找下标为五也就是第六个元素的值\n" );
    29. printf( "%d\n", FindKth(5, P));
    30. printf( "查找值为三并返回下标\n" );
    31. printf( "%d\n", Find(3,P));
    32. printf( "删除第六个\n" );
    33. Delete(6, P);
    34. for( int k = 0; k <= P->Last; k++ )
    35. printf( "%d ", P->Data[k] );
    36. printf("\n");
    37. printf( "长度为:%d", Length(P));
    38. free(P);
    39. return 0;
    40. }
    41. List MakeEmpty()
    42. {
    43. List Ptrl;
    44. Ptrl = (List)malloc(sizeof(struct LNode));
    45. Ptrl->Last = -1;
    46. return Ptrl;
    47. }
    48. ElementType FindKth(int K, List Ptrl)
    49. {
    50. return Ptrl->Data[K];
    51. }
    52. int Find(ElementType X, List Ptrl)
    53. {
    54. int i = 0;
    55. while (i <= Ptrl->Last && Ptrl->Data[i] != X)
    56. {
    57. i++;
    58. }
    59. if (i > Ptrl->Last)
    60. return -1;
    61. else
    62. return i;
    63. }
    64. void Insert(ElementType X, int i, List Ptrl)
    65. {
    66. if (Ptrl->Last == MAXSIZE - 1)
    67. {
    68. printf("表满");
    69. return;
    70. }
    71. if (i < 1 || i > Ptrl->Last + 2)
    72. {
    73. printf("位置不合法");
    74. return;
    75. }
    76. int j;
    77. for (j = Ptrl->Last; j >= i - 1; j--)
    78. Ptrl->Data[j + 1] = Ptrl->Data[j];
    79. Ptrl->Data[i - 1] = X;
    80. Ptrl->Last++;
    81. return;
    82. }
    83. void Delete(int i, List Ptrl)
    84. {
    85. int j;
    86. if (i < 1 || i > Ptrl->Last + 1)
    87. {
    88. printf("不存在第%d个元素", i);
    89. return;
    90. }
    91. for (j = i; j <= Ptrl->Last; j++)
    92. Ptrl->Data[j - 1] = Ptrl->Data[j];
    93. Ptrl->Last--;
    94. return;
    95. }
    96. int Length(List Ptrl)
    97. {
    98. return Ptrl->Last + 1;
    99. }

    2.链表链式存储

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. typedef int ElementType;
    4. const int MAXSIZE = 100;
    5. typedef struct LNode *List;
    6. struct LNode
    7. {
    8. ElementType Data;
    9. List Next;
    10. };
    11. List Insert(ElementType X,int i,List PtrL);
    12. List FindKth(int K, List PtrL);
    13. List Find(ElementType X, List PtrL);
    14. List Delete(int i, List PtrL);
    15. int Length(List PtrL);
    16. int main(void)
    17. {
    18. List P = NULL;
    19. for (int i = 0; i < 10; i++)
    20. {
    21. P = Insert(i, 1, P);
    22. }
    23. List s;
    24. printf( "长度为:%d\n", Length(P));
    25. printf( "遍历整个数组 :" );
    26. for ( s = P; s->Next != NULL; s = s->Next )
    27. {
    28. printf( "%d ", s->Data );
    29. }
    30. printf("\n");
    31. printf( "第3个元素为:" );
    32. s = FindKth(3, P);
    33. if(s)
    34. printf( "%d\n", s->Data);
    35. printf( "删除第四个元素\n" );
    36. Delete(4, P);
    37. printf( "删除后第四个元素为:" );
    38. s = FindKth(4, P);
    39. if (s)
    40. printf( "%d\n", s->Data);
    41. printf("表中是否有元素6:");
    42. s = Find(6, P);
    43. if (s)
    44. printf( "%d\n", s->Data);
    45. printf("表中是否有元素5:");
    46. s = Find(5, P);
    47. if (s)
    48. printf( "yes" );
    49. free(P);
    50. return 0;
    51. }
    52. List Insert(ElementType X, int i, List PtrL)
    53. {
    54. List p, s;
    55. if (i == 1)
    56. {
    57. s = (List)malloc( sizeof(struct LNode) );
    58. s->Data = X;
    59. s->Next = PtrL;
    60. return s;
    61. }
    62. p = Find(i - 1, PtrL);
    63. if (p == NULL)
    64. {
    65. printf("参数i错");
    66. return NULL;
    67. } else {
    68. s = (List)malloc( sizeof(struct LNode) );
    69. s->Data = X;
    70. s->Next = p->Next;
    71. p->Next = s;
    72. return PtrL;
    73. }
    74. }
    75. List Find(ElementType X, List PtrL)
    76. {
    77. List p = PtrL;
    78. while(p != NULL && p->Data != X)
    79. p = p->Next;
    80. if(p == NULL)
    81. {
    82. printf( "查无此元素\n" );
    83. return NULL;
    84. }
    85. else return p;
    86. }
    87. List FindKth(int K, List PtrL)
    88. {
    89. List p = PtrL;
    90. int i = 1;
    91. while (p != NULL && i < K)
    92. {
    93. p = p->Next;
    94. i++;
    95. }
    96. if(i == K)
    97. return p;
    98. else
    99. {
    100. printf( "查无此元素\n" );
    101. return NULL;
    102. }
    103. }
    104. List Delete(int i, List PtrL)
    105. {
    106. List p, s;
    107. if( i == 1)
    108. {
    109. s = PtrL;
    110. if (PtrL != NULL)
    111. PtrL = PtrL->Next;
    112. else
    113. return NULL;
    114. free(s);
    115. return PtrL;
    116. }
    117. p = FindKth(i-1, PtrL);
    118. if (p == NULL)
    119. {
    120. printf("第%d个结点不存在", i-1);
    121. return NULL;
    122. }
    123. else if (p->Next == NULL)
    124. {
    125. printf("第%d个结点不存在",i);
    126. return NULL;
    127. }
    128. else
    129. {
    130. s = p->Next;
    131. p->Next = s->Next;
    132. free(s);
    133. return PtrL;
    134. }
    135. }
    136. int Length(List PtrL)
    137. {
    138. List p = PtrL;
    139. int j = 0;
    140. while(p)
    141. {
    142. p = p->Next;
    143. j++;
    144. }
    145. return j;
    146. }