ArrayLib.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /***********************************************
  2. * 文件名:arrayLib.h
  3. * 文件描述:动态数组库函数头文件,包含了动态数组
  4. * 所有功能的函数的声明以及类型定义等
  5. * 编辑人:王廷云
  6. * 编辑日期:2017-10-1
  7. * 修改日期:2018-1-10
  8. ************************************************/
  9. #ifndef _ARRAY_LIB_H_
  10. #define _ARRAY_LIB_H_
  11. /* 动态数组结构体封装 */
  12. typedef struct {
  13. int n; // 动态数组的元素个数
  14. int size; // 动态数组的元素空间大小
  15. void *addr; // 动态数组的数据起始地址
  16. } Array_t;
  17. /* 比较函数类型定义 */
  18. typedef int compare_t(const void *data1, const void *data2);
  19. /******************************
  20. * 以下为所有动态数组库函数声明
  21. *******************************/
  22. /*
  23. * 函数名: initArray
  24. * 函数功能: 初始化动态数组
  25. * 参数: 数组元素的空间大小
  26. * 返回值: 成功则返回初始化后的动态数组指针
  27. * 失败返回NULL
  28. */
  29. Array_t *initArray(int size);
  30. /*
  31. * 函数名: appendArrayTail
  32. * 函数功能: 尾部追加数组元素
  33. * 参数: 1.需要追加的数组指针 2.需要追加的元素指针
  34. * 返回值: 成功追加返回0 失败返回-1
  35. */
  36. int appendArrayTail(Array_t *ar, const void *data);
  37. /*
  38. * 函数名: appendArrayTop
  39. * 函数功能: 头部追加数组元素
  40. * 参数: 1.需要追加的数组指针 2.需要追加的元素指针
  41. * 返回值: 成功追加返回0 失败返回-1
  42. */
  43. int appendArrayTop(Array_t *ar, const void *data);
  44. /*
  45. * 函数名: insertArrayByIndex
  46. * 函数功能: 指定数组下标插入数组元素
  47. * <函数会检查下标的合法性>
  48. * 参数: 1.需要插入数据的数组指针 2.需要插入的数据指针
  49. * 2.数组下标值
  50. * 返回值: 成功插入返回0 失败返回-1
  51. */
  52. int insertArrayByIndex(Array_t *ar, const void *data, int idx);
  53. /*
  54. * 函数名: travelArray
  55. * 函数功能: 遍历动态数组元素
  56. * 参数: 1.需要遍历的数组指针 2.回调函数
  57. * 返回值: 无
  58. */
  59. void travelArray(Array_t *ar, void (*func)(void *data));
  60. /*
  61. * 函数名: searchArrayByIndex
  62. * 函数功能: 根据下标查找数组元素<会检查下标的合法性>
  63. * 参数: 1.需要查找的数组指针 2.查找的下标
  64. * 返回值: 数据存在返回数据地址 不存在则返回NULL
  65. */
  66. void *searchArrayByIndex(Array_t *ar, const int idx);
  67. /*
  68. * 函数名: searchArrayOneByCond
  69. * 函数功能: 根据条件查找元素,如果有多个则找第一个
  70. * 参数: 1.需要查找的数组指针 2.比较回调函数指针 3.条件指针
  71. * 返回值: 数据存在返回数据地址 不存在则返回NULL
  72. */
  73. void *searchArrayOneByCond(Array_t *ar, compare_t *func, \
  74. const void *key);
  75. /*
  76. * 函数名: searchArrayByCond
  77. * 函数功能: 根据条件查找元素
  78. * 参数: 1.需要查找的数组指针 2.比较回调函数指针 3.条件指针
  79. * 返回值: 数据存在返回数据数组 不存在则返回NULL
  80. */
  81. Array_t *searchArrayByCond(Array_t *ar, compare_t *func, \
  82. const void *key);
  83. /*
  84. * 函数名: deleteArrayByIndex
  85. * 函数功能: 根据下标删除数组元素
  86. * 参数: 1.数组指针 2.下标
  87. * 返回值: 成功删除返回0 失败返回-1
  88. */
  89. int deleteArrayByIndex(Array_t *ar, const int idx);
  90. /*
  91. * 函数名: deleteArrayOneByCond
  92. * 函数功能: 根据条件删除数组元素,如果多个匹配则只删除第一个
  93. * 参数: 1.数组指针 2.比较回调函数指针 3.条件
  94. * 返回值: 成功删除返回0 失败返回-1
  95. */
  96. int deleteArrayOneByCond(Array_t *ar, compare_t *func, \
  97. const void *key);
  98. /*
  99. * 函数名: deleteArrayByCond
  100. * 函数功能: 根据条件删除所有匹配的数组元素
  101. * 参数: 1.数组指针 2.比较回调函数指针 3.条件
  102. * 返回值: 返回成功删除的元素个数
  103. */
  104. int deleteArrayByCond(Array_t *ar, compare_t *func, \
  105. const void *key);
  106. /*
  107. * 函数名: sortArray
  108. * 函数功能: 对数组元素进行排序
  109. * <至于按什么顺序排列则由用户的回调函数具体来实现>
  110. * 参数: 1.数组指针 2.比较回调函数指针
  111. * 返回值: 排序成功返回0 失败返回-1
  112. */
  113. int sortArray(Array_t *ar, compare_t *func);
  114. /*
  115. * 函数名: saveArrayToFile
  116. * 函数功能: 把数组元素数据保存到文件中
  117. * 参数: 1.数组指针 2.需要保存的文件
  118. * 返回值: 保存成功返回0 失败返回-1
  119. */
  120. int saveArrayToFile(Array_t *ar, const char *file);
  121. /*
  122. * 函数名: loadArrayFromFile
  123. * 函数功能: 从文件中加载数组数据
  124. * 参数: 需要加载的文件
  125. * 返回值: 成功加载返回数组指针 失败返回NULL
  126. */
  127. Array_t *loadArrayFromFile(const char *file);
  128. /*
  129. * 函数名: destoryArray
  130. * 函数功能: 销毁动态数组线性表
  131. * 参数: 数组指针
  132. * 返回值: 无
  133. */
  134. void destoryArray(Array_t *ar);
  135. /*
  136. * 函数名: isEmptyArray
  137. * 函数功能: 判断是否是空数组
  138. * 参数: 数组指针
  139. * 返回值: 为空返回1 不为空返回0
  140. */
  141. int isEmptyArray(Array_t *ar);
  142. /*
  143. * 函数名: arrayLenth
  144. * 函数功能: 求数组的长度(元素个数)
  145. * 参数: 数组指针
  146. * 返回值: 返回数组的元素个数
  147. */
  148. int arrayLenth(Array_t *ar);
  149. #endif /* _ARRAY_LIB_H_ */