Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <malloc.h>
  5. struct list
  6. {
  7. int field;
  8. struct list *ptr;
  9. };
  10. struct list * init(int a)
  11. {
  12. struct list *lst;
  13. lst = (struct list*)malloc(sizeof(struct list));
  14. lst->field = a;
  15. lst->ptr = lst;
  16. return(lst);
  17. }
  18. struct list * addelem(list *lst, int number)
  19. {
  20. struct list *temp, *p;
  21. temp = (struct list*)malloc(sizeof(list));
  22. p = lst->ptr;
  23. lst->ptr = temp;
  24. temp->field = number;
  25. temp->ptr = p;
  26. return(temp);
  27. }
  28. struct list * deletehead(list *root)
  29. {
  30. struct list *temp;
  31. temp = root->ptr;
  32. struct list *y=temp;
  33. free(root);
  34. return(temp);
  35. }
  36. struct list * deletelem(list *lst, list *root)
  37. {
  38. struct list *temp;
  39. temp = root;
  40. while (temp->ptr != lst)
  41. {
  42. temp = temp->ptr;
  43. }
  44. temp->ptr = lst->ptr;
  45. free(lst);
  46. return(temp);
  47. }
  48. void listprint(list *lst)
  49. {
  50. struct list *p;
  51. p = lst;
  52. do {
  53. printf("%d ", p->field);
  54. p = p->ptr;
  55. } while (p != lst);
  56. }
  57. struct list * swap(struct list *lst1, struct list *lst2, struct list *head)
  58. {
  59. struct list *prev1, *prev2, *next1, *next2;
  60. prev1 = head;
  61. prev2 = head;
  62. while (prev1->ptr != lst1)
  63. prev1 = prev1->ptr;
  64. while (prev2->ptr != lst2)
  65. prev2 = prev2->ptr;
  66. next1 = lst1->ptr;
  67. next2 = lst2->ptr;
  68. if (lst2 == next1) {
  69. lst2->ptr = lst1;
  70. lst1->ptr = next2;
  71. prev1->ptr = lst2;
  72. }
  73. else if (lst1 == next2) {
  74. lst1->ptr = lst2;
  75. lst2->ptr = next1;
  76. prev2->ptr = lst2;
  77. }
  78. else {
  79. prev1->ptr = lst2;
  80. lst2->ptr = next1;
  81. prev2->ptr = lst1;
  82. lst1->ptr = next2;
  83. }
  84. if (lst1 == head)
  85. return(lst2);
  86. if (lst2 == head)
  87. return(lst1);
  88. return(head);
  89. }
  90. int main()
  91. {
  92. struct list *head, *r, *p;
  93. int a, n;
  94. system("chcp 1251");
  95. system("cls");
  96. printf("n= ");
  97. scanf("%d",&n);
  98. head = 0;
  99. p = 0;
  100. for (int i = 0; i<n; i++)
  101. {
  102. printf("Введитеэлемент:");
  103. scanf("%d", &a);
  104. if (i == 0)
  105. {
  106. p = init(a);
  107. head = p;
  108. }
  109. else
  110. p = addelem(p, a);
  111. }
  112. listprint(head);
  113. r=head;
  114. while(head->field %3 == 0 )
  115. {
  116. head=deletehead(head);
  117. }
  118. do {
  119. int temp=r->field;
  120. r=r->ptr;
  121. if(r==head)
  122. break;
  123. if(r->field % 3 == 0)
  124. deletelem(r,head);
  125. }
  126. while(1);
  127. printf("\n");
  128. listprint(head);
  129. getchar(); getchar();
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement