當前位置:
首頁 > 知識 > 代碼實現順序表的操作函數

代碼實現順序表的操作函數

[html] view plain copy

  1. #pragma once
  2. #include

    <assert.h>

  3. #include

    <stdio.h>

  4. typedef int DataType;
  5. #define MAX_SIZE (100)
  6. typedef struct SeqList{
  7. DataType array[MAX_SIZE];
  8. int size;
  9. }SeqList;
  10. //初始化
  11. void SeqListInit(SeqList *pSL);
  12. //銷毀
  13. void SeqListDestroy(SeqList *pSL);
  14. //增、刪、改、查
  15. //增
  16. //尾插
  17. void SeqListPushBack(SeqList *pSL, DataType data);
  18. //頭插
  19. void SeqListPushBack(SeqList *pSL, DataType data);
  20. //根據下標插入
  21. void SeqListInsert(SeqList *pSL, int pos, DataType data);
  22. //刪
  23. //尾刪
  24. void SeqListPopBack(SeqList *pSL);
  25. //頭刪
  26. void SeqListPopFront(SeqList *pSL);
  27. //根據下標刪除
  28. void SeqListErase(SeqList *pSL);
  29. //根據數據刪除,只刪除遇到的第一個
  30. void SeqListRemove(SeqList *pSL, DataType data);
  31. //查詢
  32. //返回遇到的第一個下標,如果沒有遇到,則返回-1
  33. int SeqListFind(SeqList *pSL, DataType data);
  34. //根據下標更新
  35. void SeqListUpdate(SeqList *pSL, int pos, DataType data);
  36. //初始化
  37. void SeqListInit(SeqList *pSL)
  38. {
  39. assert(pSL != NULL);
  40. pSL-

    >

    size = 0;
  41. }
  42. //銷毀
  43. void SeqListDestroy(SeqList *pSL)
  44. {
  45. assert(pSL != NULL);
  46. pSL-

    >

    size = 0;

  47. }
  48. //尾插
  49. void SeqListPushBack(SeqList *pSL, DataType data)
  50. {
  51. assert(pSL != NULL);
  52. assert(pSL-

    >

    size

    <

    MAX_SIZE

    );
  53. pSL-

    >

    array[pSL-

    >

    size] = data;
  54. pSL-

    >

    size++;
  55. }
  56. //頭插
  57. void SeqListPushFront(SeqList *pSL, DataType data)
  58. {
  59. assert(pSL != NULL);
  60. assert(pSL-

    >

    size

    <

    MAX_SIZE

    );
  61. //1.以要搬移的數作為循環的指示
  62. int pos;
  63. for (pos = pSL-

    >

    size - 1; pos

    >

    =0; pos--)
  64. {
  65. pSL-

    >

    array[pos + 1] = pSL-

    >

    array[pos];
  66. }
  67. pSL-

    >

    array[0] = data;
  68. pSL-

    >

    size++;
  69. }
  70. //根據下標插入
  71. void SeqListInsert(SeqList *pSL, int pos, DataType data)
  72. {
  73. assert(pSL != NULL);
  74. assert(pSL-

    >

    size

    <

    MAX_SIZE

    );
  75. assert(pos

    >

    = 0 && pos

    <

    = pSL-

    >

    size);
  76. int space;
  77. for (space = pSL-

    >

    size; space

    >

    pos; space--)
  78. {
  79. pSL-

    >

    array[space] = pSL-

    >

    array[space - 1];
  80. }
  81. pSL-

    >

    array[pos] = data;
  82. pSL-

    >

    size++;
  83. }
  84. //刪
  85. //尾刪
  86. void SeqListPopBack(SeqList *pSL)
  87. {
  88. pSL-

    >

    size--;
  89. }
  90. //頭刪
  91. void SeqListPopFront(SeqList *pSL)
  92. {
  93. assert(pSL != NULL);
  94. int pos;
  95. for (pos = 0; pos

    <

    pSL->

    size-1; pos++)

  96. {
  97. pSL-

    >

    array[pos] = pSL-

    >

    array[pos + 1];
  98. }
  99. pSL-

    >

    size--;
  100. }
  101. //根據下標刪除
  102. void SeqListErase(SeqList *pSL, int pos)
  103. {
  104. assert(pSL != NULL);
  105. assert(pos

    >

    = 0 && pos

    <

    pSL->

    size);
  106. int node;
  107. for (node = pos; node

    <

    pSL->

    size - 1; node++)
  108. {
  109. pSL-

    >

    array[node] = pSL-

    >

    array[node + 1];

  110. }
  111. pSL-

    >

    size--;
  112. }
  113. //查詢
  114. int SeqListFind(SeqList *pSL, DataType data)
  115. {
  116. assert(pSL != NULL);
  117. int i;
  118. for (i = 0; i

    <

    pSL->

    size - 1; i++)
  119. {
  120. if (pSL-

    >

    array[i] == data)
  121. {
  122. return i;
  123. }
  124. }
  125. return -1;
  126. }
  127. //根據數據刪除
  128. void SeqListRemove(SeqList *pSL, DataType data)
  129. {
  130. int pos = SeqListFind(pSL, data);
  131. if (pos != -1) {
  132. // 如果找到了
  133. SeqListErase(pSL, pos);
  134. }
  135. }
  136. //根據下標更新
  137. void SeqListUpdate(SeqList *pSL, int pos, DataType data)
  138. {
  139. assert(pSL != NULL);
  140. assert(pos

    >

    = 0 && pos

    <

    pSL->

    size - 1);
  141. pSL-

    >

    array[pos] = data;
  142. }
  143. //列印函數
  144. void SeqListPrint(SeqList *pSL)
  145. {
  146. int i;
  147. for (i = 0; i

    <

    pSL->

    size; i++) {
  148. printf("%d ", pSL-

    >

    array[i]);
  149. }
  150. printf("
    ");
  151. }
  152. void TestSeqList()
  153. {
  154. SeqList sl;
  155. SeqListInit(&sl);
  156. SeqListPushBack(&sl, 1);
  157. SeqListPushBack(&sl, 2);
  158. SeqListPushBack(&sl, 3);
  159. SeqListPushBack(&sl, 4);
  160. //SeqListPushFront(&sl, 0);
  161. //SeqListPushFront(&sl, -1);
  162. //SeqListInsert(&sl,2,2);
  163. //SeqListPopBack(&sl);
  164. //SeqListPopFront(&sl);
  165. //SeqListPopFront(&sl);
  166. //SeqListErase(&sl, 4);
  167. //SeqListRemove(&sl, 2);
  168. SeqListUpdate(&sl,1,6);
  169. SeqListPrint(&sl);
  170. }

用typedef int DataType; 對int 進行重命名。

定義一個結構體,結構體中參數為,一個DataType型的數組,一個DataType型的size,

數組中存放數據,size表示數組的長度。

代碼實現順序表的操作函數

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Intel擬推動概率計算研究
python腳本實現定時發送郵件

TAG:程序員小新人學習 |