linkList.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include "linkList.h"
  2. /**
  3. * @brief 创建链表 数据默认为0
  4. * @param n: 节点数量
  5. * @retval 链表头节点
  6. */
  7. linkListStruct *linkListCreate(uint16_t n)
  8. {
  9. linkListStruct *head, *end;
  10. head = (linkListStruct *)Mymalloc.Malloc(sizeof(linkListStruct));
  11. head->data = 0;
  12. end = head;
  13. for(uint16_t i = 1; i < n; i++) {
  14. end->next = (linkListStruct *)Mymalloc.Malloc(sizeof(linkListStruct));
  15. end->next->data = 0;
  16. end = end->next;
  17. }
  18. end->next = NULL;
  19. return head;
  20. }
  21. /**
  22. * @brief 链表追加创建节点
  23. * @param list: 链表尾结点
  24. * @param data: 数据
  25. * @retval 链表尾节点
  26. */
  27. linkListStruct *linkListAppend(linkListStruct *list, uint16_t data)
  28. {
  29. list->next = (linkListStruct *)Mymalloc.Malloc(sizeof(linkListStruct));
  30. list->next->data = data;
  31. list->next->next = NULL;
  32. return list->next;
  33. }
  34. /**
  35. * @brief 链表数据求和
  36. * @param list: 链表头节点
  37. * @param deleteNum: 舍弃的头尾数据量
  38. * @param count: 数据总量
  39. * @param ratio: 乘法系数
  40. * @retval 链表头节点地址
  41. */
  42. uint32_t linkListSum(linkListStruct *list, uint8_t deleteNum, uint16_t count, float ratio)
  43. {
  44. uint32_t sum = 0;
  45. uint16_t i = 0;
  46. while(i < deleteNum && list->next != NULL) {
  47. list = list->next;
  48. i++;
  49. }
  50. count -= deleteNum;
  51. sum += (uint32_t)(list->data * ratio);
  52. printf("link list data %d : %d\n", i, (uint32_t)(list->data * ratio));
  53. i += 1;
  54. while(i < count && list->next != NULL) {
  55. list = list->next;
  56. sum += list->data * ratio;
  57. printf("link list data %d : %d\n", i, (uint32_t)(list->data * ratio));
  58. i++;
  59. }
  60. printf("link list sum : %d, count : %d\n", sum, count);
  61. return sum;
  62. }