Advertisement
Uncleeee

Untitled

Sep 20th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <locale.h> //setlocale
  4.  
  5. typedef struct
  6. {
  7. int field; // поле данных
  8. struct list *ptr; //указатель на следующий элемент
  9. }List;
  10.  
  11. List * init(int a) //a - знач-е первого узла, ф-я наз-я 1го узла списка
  12. {
  13. List *lst; //выделение памяти под корень списка
  14. lst = (List*)malloc(sizeof(List));
  15.  
  16. lst->field = a;
  17. lst->ptr = NULL; //последний узел списка
  18.  
  19. return(lst);
  20. }
  21.  
  22. List * addElem(List *lst, int number)
  23. {
  24. List *temp, *p;
  25. temp = (List*)malloc(sizeof(List));
  26.  
  27. p = lst->ptr; // сохранение указателя на следующий узел
  28. lst->ptr = temp; // предыдущий узел указывает на создаваемый
  29.  
  30. temp->field = number; // сохранение поля данных добавляемого узла
  31.  
  32. temp->ptr = p; // созданный узел указывает на следующий элемент
  33. return(temp);
  34. }
  35.  
  36. void insertElem(List* beforeItem, int number)
  37. {
  38. List *temp, *nnew;
  39. temp = beforeItem->ptr;
  40. nnew = (List*)malloc(sizeof(List));
  41.  
  42. nnew->field = number;
  43. nnew->ptr = temp;
  44.  
  45. beforeItem->ptr = nnew;
  46. }
  47.  
  48. List * deleteElem(List *lst, List *root)
  49. {
  50. List *temp;
  51. temp = root;
  52. while (temp->ptr != lst)
  53. {
  54. temp = temp->ptr;
  55. }
  56. temp->ptr = lst->ptr;
  57. free(lst); //возвращает память, на которую указывает параметр ptr, назад в кучу.
  58. return(temp);
  59. }
  60.  
  61. void showList(List *lst)
  62. {
  63. List *p;
  64. p = lst;
  65. do {
  66. printf("%d ", p->field);
  67. p = p->ptr;
  68. } while (p != NULL);
  69. }
  70.  
  71. List* searchItem(List* lst, int item)
  72. {
  73. List* p = lst;
  74.  
  75. do {
  76. if(p->field == item)
  77. return p;
  78. p = p->ptr;
  79. } while (p != NULL);
  80.  
  81. return NULL;
  82. }
  83.  
  84. void searchInsertElem(List * head, int beforeNumber, int number)
  85. {
  86. List *temp, *nnew, *beforeItem;
  87.  
  88. beforeItem = searchItem(head, beforeNumber);
  89. if (beforeItem == NULL)
  90. {
  91. printf("\n\nWARNING! Элемента %d в списке нет!\n", beforeNumber);
  92. return;
  93. }
  94.  
  95. temp = beforeItem->ptr;
  96. nnew = (List*)malloc(sizeof(List));
  97.  
  98. nnew->field = number;
  99. nnew->ptr = temp;
  100.  
  101. beforeItem->ptr = nnew;
  102. }
  103.  
  104.  
  105. int main()
  106. {
  107. setlocale(LC_ALL, "Rus");
  108. system("color F0");
  109. //printf("Привет Мир\n");
  110. List newList = *(init(0));
  111. //printf("%d\n", newList.field);
  112. List * p , *head, *deleting;
  113.  
  114. p = init(8);
  115. head = p; // для instertElem
  116.  
  117. p = addElem(p, 4);
  118. p = addElem(p, 6);
  119. deleting = p;
  120.  
  121. p = addElem(p, 2);
  122. //deleting = p;
  123. printf("Дано: ");
  124. showList(head);
  125.  
  126. deleteElem(deleting, head); // удаляем 118 строка
  127. printf("\nПосле удаления: ");
  128. showList(head);
  129.  
  130. printf("\nПосле вставки: ");
  131. insertElem(head, 13);
  132. showList(head);
  133.  
  134. //printf("\n%d" ,(searchItem(head, 8))->field);
  135.  
  136. searchInsertElem(head, 4, 44);
  137. printf("\nВставка после указанного числа: ");
  138. showList(head);
  139.  
  140. return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement