Advertisement
AmidamaruZXC

Untitled

Oct 29th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.65 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3.  
  4. struct node {
  5.     int koeff;
  6.     int power;
  7.     struct node* next;
  8. };
  9.  
  10. typedef struct node* list;
  11.  
  12. void createList(list* phead, char* name);
  13. void enterListElems(list* phead);
  14. int addToHead(list* phead, int koeff, int power);
  15. int checkIfExist(list* phead, int power);
  16. void printList(list* phead, char* name);
  17. void del_node(list p, int delpower);
  18. int Delete(list* phead, int delpower);
  19. void Pop(list phead);
  20.  
  21. /**********************************************************
  22. * void createList(list *phead)
  23. *  создаёт список
  24. *
  25. * Вход:
  26. *  phead - указатель на начало списка
  27. *  name - имя списка
  28. *
  29. * Выход:
  30. *  нет
  31. *
  32. * Возвращаемое значение:
  33. *  нет
  34. **********************************************************/
  35.  
  36. void createList(list* phead)
  37. {
  38.     *phead = NULL;
  39. }
  40.  
  41. /**********************************************************
  42. * int checkIfExist(list *phead, int power)
  43. *  проверяет наличие в списке степени power
  44. *
  45. * Вход:
  46. *  phead - указатель на начало списка
  47. *  power - искомая степень
  48. *
  49. * Выход:
  50. *  нет
  51. *
  52. * Возвращаемое значение:
  53. *  1 - найдена
  54. *  0 - не найдена
  55. **********************************************************/
  56.  
  57. int checkIfExist(list* phead, int power, int koeff)
  58. {
  59.     list p = *phead;
  60.     while (p != NULL)
  61.     {
  62.         if (p->power == power)
  63.         {
  64.             p->koeff += koeff;
  65.             return 1;
  66.         }
  67.         p = p->next;
  68.     }
  69.     return 0;
  70. }
  71.  
  72. /**********************************************************
  73. * void addToHead(list *phead, int koeff, int power)
  74. *  добавляет элемент в начало списка
  75. *
  76. * Вход:
  77. *  phead - указатель на начало списка
  78. *  koeff - коэффициент
  79. *  power - степень X
  80. *
  81. * Выход:
  82. *  элемент добавлен в начало списка
  83. *
  84. * Возвращаемое значение:
  85. *  1 - добавлено
  86. *  0 - не добавлено
  87. **********************************************************/
  88.  
  89. int addToHead(list* phead, int koeff, int power)
  90. {
  91.     list p;
  92.     if (checkIfExist(phead, power, koeff))
  93.     {
  94.         printf("Такая степень уже есть %d\n", power);
  95.         return 0;
  96.     }
  97.     p = (list)malloc(sizeof(*p));
  98.     p->koeff = koeff;
  99.     p->power = power;
  100.     p->next = *phead;
  101.     *phead = p;
  102.     printf("Добавлено: %dx^%d\n", p->koeff, p->power);
  103.     return 1;
  104. }
  105. /**********************************************************
  106. * void enterListElems(list *phead)
  107. *  осуществляет ввод элементов списка
  108. *
  109. * Вход:
  110. *  phead - указатель на начало списка
  111. *
  112. * Выход:
  113. *  список, заполненный элементами
  114. *
  115. * Возвращаемое значение:
  116. *  нет
  117. **********************************************************/
  118. void enterListElems(list* phead)
  119. {
  120.     int i_koeff = 1, i_power = 1;
  121.     while (i_koeff != 0)
  122.     {
  123.         printf("\nВвод\n");
  124.         printf("Kоэффициент: ");
  125.         scanf("%d", &i_koeff);
  126.         if (i_koeff == 0)
  127.             return;
  128.         printf("Cтепень: ");
  129.         scanf("%d", &i_power);
  130.         addToHead(phead, i_koeff, i_power);
  131.     }
  132. }
  133. /**********************************************************
  134. * void del_node(list p, int delpower)
  135. *  осуществляет удаление "узла" между элементами
  136. *
  137. * Вход:
  138. *  p - где удаляем связку
  139. *  delpower - нужная степень (критерий удаления)
  140. *
  141. * Выход:
  142. *  список без некоторых связок
  143. *
  144. * Возвращаемое значение:
  145. *  нет
  146. **********************************************************/
  147. void del_node(list p, int delpower)
  148. {
  149.     list a;
  150.     a = p->next;
  151.     while (p->next != NULL)
  152.     {
  153.         if (a->power < delpower)
  154.         {
  155.             a = p->next;
  156.             p->next = a->next;
  157.             free(a);
  158.         }
  159.         else
  160.         {
  161.             p = p->next;
  162.             a = p->next;
  163.         }
  164.     }
  165. }
  166. /**********************************************************
  167. * int Delete(list *phead, int delpower)
  168. *  осуществляет удаление нужных членов
  169. *
  170. * Вход:
  171. *  *phead - указатель на начало списка
  172. *  delpower - нужная степень (критерий удаления)
  173. *
  174. * Выход:
  175. *  новый список
  176. *
  177. * Возвращаемое значение:
  178. *  0 - произведено удаление
  179. *  1 - пустой список
  180. **********************************************************/
  181. int Delete(list* phead, int delpower)
  182. {
  183.     if (*phead == NULL)
  184.         return 1;
  185.     list p;
  186.     p = *phead;
  187.     while ((p != NULL) && (p->power < delpower))
  188.         p = p->next;
  189.     if (p != NULL)
  190.     {
  191.         del_node(p, p->power);
  192.         *phead = p;
  193.     }
  194.     else
  195.     {
  196.         list a;
  197.         p = *phead;
  198.         while (p->next != NULL)
  199.         {
  200.             a = p;
  201.             p = p->next;
  202.             free(a);
  203.         }
  204.         *phead = NULL;
  205.     }
  206.     return 0;
  207. }
  208.  
  209.  
  210. /**********************************************************
  211. * void printList(list *phead)
  212. *  печатает список на экран
  213. *
  214. * Вход:
  215. *  phead - указатель на начало списка
  216. *
  217. * Выход:
  218. *  нет
  219. *
  220. * Возвращаемое значение:
  221. *  нет
  222. **********************************************************/
  223.  
  224. void printList(list* phead)
  225. {
  226.     list p;
  227.     for (p = *phead; p != NULL; p = p->next)
  228.         printf("%dx^%d\n", p->koeff, p->power);
  229.     printf("\n");
  230. }
  231.  
  232. int main(void)
  233. {
  234.     list L1;
  235.     int k;
  236.  
  237.     setlocale(LC_ALL, "RUSSIAN");
  238.  
  239.     createList(&L1);
  240.     enterListElems(&L1);
  241.     printf("\n------\n");
  242.     printList(&L1);
  243.     printf("------\n\n");
  244.  
  245.  
  246.  
  247.     return 0;
  248. }
  249.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement