Advertisement
Guest User

Untitled

a guest
Sep 21st, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.42 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. int z = 0;
  75. do { z++;
  76. if(p->field == item)
  77. {
  78. printf("Номер элемента в списке = %u", z);
  79. return p;
  80. }
  81. p = p->ptr;
  82. } while (p != NULL);
  83.  
  84. return NULL;
  85. }
  86.  
  87. void searchInsertElem(List * head, int beforeNumber, int number)
  88. {
  89. List *temp, *nnew, *beforeItem;
  90.  
  91. beforeItem = searchItem(head, beforeNumber);
  92. if (beforeItem == NULL)
  93. {
  94. printf("\n\nWARNING! Элемента %d в списке нет!\n", beforeNumber);
  95. return;
  96. }
  97.  
  98. temp = beforeItem->ptr;
  99. nnew = (List*)malloc(sizeof(List));
  100.  
  101. nnew->field = number;
  102. nnew->ptr = temp;
  103.  
  104. beforeItem->ptr = nnew;
  105. }
  106.  
  107.  
  108. int main()
  109. {
  110. setlocale(LC_ALL, "Rus");
  111. system("color F0");
  112. //printf("Привет Мир\n");
  113. List newList = *(init(0));
  114. //printf("%d\n", newList.field);
  115. List * p , *head, *deleting;
  116.  
  117. p = init(8);
  118. head = p; // для instertElem
  119.  
  120. p = addElem(p, 4);
  121. p = addElem(p, 6);
  122. deleting = p;
  123.  
  124. p = addElem(p, 2);
  125. //deleting = p;
  126. printf("Дано: ");
  127. showList(head);
  128.  
  129. deleteElem(deleting, head); // удаляем 118 строка
  130. printf("\nПосле удаления: ");
  131. showList(head);
  132.  
  133. printf("\nПосле вставки: ");
  134. insertElem(head, 13);
  135. showList(head);
  136.  
  137. printf("\n%d" ,(searchItem(head, 13))->field);
  138.  
  139. searchInsertElem(head, 55, 44);
  140. printf("\nВставка после указанного числа: ");
  141. showList(head);
  142.  
  143. return 0;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement