找回密码
 立即注册
首页 业界区 安全 线性结构之数组[基于郝斌课程]

线性结构之数组[基于郝斌课程]

匣卒 2025-10-1 18:56:59
线性结构:把所有的结点用一根线穿起来
连续存储[数组]
  什么叫做数组:元素类型相同,大小相等
  1. /*
  2. @file      main.c
  3. @brief     线性结构之数组
  4. @author    EricsT (EricsT@163.com)
  5. @version   v1.0.0
  6. @date      2025-09-21
  7. @history   2025-09-21 EricsT - 新建文件
  8. */
  9. #include <stdio.h>
  10. #include <malloc.h>
  11. #include <stdlib.h>
  12. struct Arr//定义了一个复合数据类型
  13. {
  14.         int* ptrBase;//存储数组的第一个元素的地址
  15.         int len;//数组所能容纳的最大元素的个数
  16.         int cnt;//当前数组有效元素的个数
  17.         //int increment;//自动增长因子
  18. };
  19. void init_arr(Arr* ptrArr, const int len);//初始化
  20. bool append_arr(Arr* ptrArr, int appendValue);//追加
  21. bool insert_arr(Arr* ptrAee, int insertPos, int insertValue);//插入
  22. bool delete_arr(Arr* ptrArr, int deletePos);//删除
  23. int get_arr(Arr* ptrArr, int getPos);//获取某一元素
  24. bool is_empty_arr(const Arr* ptrArr);//是否为空
  25. bool is_full_arr(const Arr* ptrArr);//是否满
  26. void sort_arr(Arr* ptrArr);//排序
  27. void show_arr(const Arr* ptrArr);//显示
  28. void inversion_arr(Arr* ptrArr);//倒置
  29. int main(void)
  30. {
  31.         Arr arr;//此时已经分配了一块内存,该内存大小为 sizeof(Arr)//此时只定义未初始化
  32.         init_arr(&arr, 6);
  33.         append_arr(&arr, 2);
  34.         append_arr(&arr, 3);
  35.         append_arr(&arr, 4);
  36.         append_arr(&arr, 5);
  37.         insert_arr(&arr, 2, 9);
  38.         show_arr(&arr);
  39.         printf("\n");
  40.         delete_arr(&arr, 3);
  41.         show_arr(&arr);
  42.         printf("\n");
  43.         printf("%d\n", get_arr(&arr, 3));
  44.         inversion_arr(&arr);
  45.         show_arr(&arr);
  46.         sort_arr(&arr);
  47.         printf("\n");
  48.         show_arr(&arr);
  49.         return 0;
  50. }
  51. void init_arr(Arr* ptrArr, const int len)
  52. {
  53.         ptrArr->ptrBase = (int*)malloc(sizeof(int) * len);
  54.         if (NULL == ptrArr->ptrBase)
  55.         {
  56.                 printf("动态内存分配失败\n");
  57.                 exit(-1);//终止整个程序
  58.         }
  59.         else
  60.         {
  61.                 ptrArr->len = len;
  62.                 ptrArr->cnt = 0;
  63.         }
  64.         return;
  65. }
  66. void show_arr(const Arr* ptrArr)
  67. {
  68.         if (is_empty_arr(ptrArr))
  69.         {
  70.                 printf("该数组为空\n");
  71.                 return;
  72.         }
  73.         for (int i = 0; i < ptrArr->cnt; ++i)
  74.                 printf("%d ", *(ptrArr->ptrBase + i));
  75.         return;
  76. }
  77. bool is_empty_arr(const Arr* ptrArr)
  78. {
  79.         if (0 == ptrArr->cnt)
  80.                 return true;
  81.         return false;
  82. }
  83. bool append_arr(Arr* ptrArr, int appendValue)
  84. {
  85.         if (is_full_arr(ptrArr))//满了
  86.                 return false;
  87.         *(ptrArr->ptrBase + ptrArr->cnt) = appendValue;
  88.         ptrArr->cnt += 1;
  89.         return true;
  90. }
  91. bool is_full_arr(const Arr* ptrArr)
  92. {
  93.         if (ptrArr->cnt == ptrArr->len)
  94.                 return true;
  95.         return false;
  96. }
  97. bool insert_arr(Arr* ptrArr, int insertPos, int insertValue)
  98. {
  99.         if (is_full_arr(ptrArr))
  100.                 return false;
  101.         if (insertPos < 1)
  102.                 return 0;
  103.         if (insertPos > ptrArr->len)
  104.                 return false;
  105.        
  106.         if (insertPos > ptrArr->cnt + 1)
  107.                 return false;
  108.         for (int i = ptrArr->cnt - 1; i >= insertPos - 1; --i)
  109.                 *(ptrArr->ptrBase + i + 1) = *(ptrArr->ptrBase + i);
  110.         *(ptrArr->ptrBase + insertPos - 1) = insertValue;
  111.         ptrArr->cnt += 1;
  112.         return true;
  113. }
  114. bool delete_arr(Arr* ptrArr, int deletePos)
  115. {
  116.         if (is_empty_arr(ptrArr))
  117.                 return false;
  118.         if (deletePos < 1)
  119.                 return false;
  120.         if (deletePos > ptrArr->cnt)
  121.                 return false;
  122.         for (int i = deletePos - 1; i < ptrArr->cnt - 1; ++i)
  123.                 *(ptrArr->ptrBase + i) = *(ptrArr->ptrBase + i + 1);
  124.         ptrArr->cnt -= 1;
  125.         return true;
  126. }
  127. int get_arr(Arr* ptrArr, int getPos)
  128. {
  129.         if (is_empty_arr(ptrArr))
  130.                 return -1;
  131.         if (getPos < 1)
  132.                 return -1;
  133.         if (getPos > ptrArr->cnt)
  134.                 return -1;
  135.         return ptrArr->ptrBase[getPos - 1];
  136. }
  137. //void inversion_arr(Arr* ptrArr)
  138. //{
  139. //        int* ptr = (int*)malloc(sizeof(int) * ptrArr->cnt);
  140. //       
  141. //        for (int i = 0; i < ptrArr->cnt; ++i)
  142. //                ptr[i] = ptrArr->ptrBase[i];
  143. //
  144. //        for (int i = 0; i < ptrArr->cnt; ++i)
  145. //                ptrArr->ptrBase[ptrArr->cnt - 1 - i] = ptr[i];
  146. //
  147. //        free(ptr);
  148. //}
  149. void inversion_arr(Arr* ptrArr)
  150. {
  151.         int i = 0;
  152.         int j = ptrArr->cnt - 1;
  153.         int temp = 0;
  154.         while (i < j)
  155.         {
  156.                 temp = ptrArr->ptrBase[i];
  157.                 ptrArr->ptrBase[i] = *(ptrArr->ptrBase + j);
  158.                 ptrArr->ptrBase[j] = temp;
  159.                 i++;
  160.                 j--;
  161.         }
  162. }
  163. void sort_arr(Arr* ptrArr)
  164. {
  165.         for (int j = 0; j < ptrArr->cnt; ++j)
  166.         {
  167.                 for (int i = j + 1; i < ptrArr->cnt; ++i)
  168.                 {
  169.                         if (ptrArr->ptrBase[j] > ptrArr->ptrBase[i])
  170.                         {
  171.                                 int temp = ptrArr->ptrBase[j];
  172.                                 ptrArr->ptrBase[j] = ptrArr->ptrBase[i];
  173.                                 ptrArr->ptrBase[i] = temp;
  174.                         }
  175.                 }
  176.         }       
  177. }
复制代码
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册