fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. struct slistEl
  6. {
  7. struct slistEl * next;
  8. int data;
  9. };
  10.  
  11.  
  12. unsigned l_size(struct slistEl * p)
  13. {
  14. int c = 0;
  15.  
  16. while (p)
  17. {
  18. c++;
  19. p = p->next;
  20. }
  21. return c;
  22. }
  23.  
  24.  
  25. void l_printl(struct slistEl * p)
  26. {
  27. int i;
  28. printf("Numer elementu : %d", l_size(p));
  29.  
  30.  
  31.  
  32. for (i = 1; p; p = p->next)
  33. printf("Element #%d to %d\n", i++, p->data);
  34. }
  35.  
  36.  
  37. void l_push_front(struct slistEl * head, int v)
  38. {
  39. struct slistEl * p;
  40.  
  41. p = (struct slistEl*) malloc(sizeof(struct slistEl));
  42. p->data = v;
  43. p->next = head;
  44. head = p;
  45. }
  46.  
  47.  
  48. void l_push_back(struct slistEl * head, int v)
  49. {
  50. struct slistEl *p, *e;
  51.  
  52. e = (struct slistEl*) malloc(sizeof(struct slistEl));
  53. e->next = NULL;
  54. e->data = v;
  55. p = head;
  56. if (p)
  57. {
  58. while (p->next) p = p->next;
  59. p->next = e;
  60. }
  61. else head = e;
  62. }
  63.  
  64.  
  65. void l_insert_before(struct slistEl * head, struct slistEl * e, int v)
  66. {
  67. struct slistEl * p = head;
  68.  
  69. if (p == e) l_push_front(head, v);
  70. else
  71. {
  72. while (p->next != e) p = p->next;
  73. p->next = (struct slistEl*) malloc(sizeof(struct slistEl));
  74. p->next->next = e;
  75. p->next->data = v;
  76. }
  77. }
  78.  
  79.  
  80. void l_insert_after(struct slistEl * e, int v)
  81. {
  82. struct slistEl * p =(struct slistEl*) malloc(sizeof(struct slistEl));
  83.  
  84. p->next = e->next;
  85. p->data = v;
  86. e->next = p;
  87. }
  88.  
  89.  
  90. void l_pop_front(struct slistEl * head)
  91. {
  92. struct slistEl * p = head;
  93.  
  94. if (p)
  95. {
  96. head = p->next;
  97. free(p);
  98. }
  99. }
  100.  
  101.  
  102. void l_pop_back(struct slistEl * head)
  103. {
  104. struct slistEl * p = head;
  105.  
  106. if (p)
  107. {
  108. if (p->next)
  109. {
  110. while (p->next->next) p = p->next;
  111. free(p->next);
  112. p->next = NULL;
  113. }
  114. else
  115. {
  116. free(p);
  117. head = NULL;
  118. }
  119. }
  120. }
  121.  
  122.  
  123. void l_remove(struct slistEl * head, struct slistEl * e)
  124. {
  125. struct slistEl * p;
  126.  
  127. if (head == e) l_pop_front(head);
  128. else
  129. {
  130. p = head;
  131. while (p->next != e) p = p->next;
  132. p->next = e->next;
  133. free(e);
  134. }
  135. }
  136.  
  137.  
  138.  
  139. int main()
  140. {
  141. struct slistEl * L = NULL;
  142. struct slistEl * e;
  143. int i;
  144.  
  145. for (i = 1; i <= 7; i++) l_push_back(L, i);
  146. l_printl(L);
  147.  
  148.  
  149.  
  150. e = L;
  151.  
  152. for (i = 1; i <= 3; i++) e = e->next;
  153.  
  154.  
  155.  
  156. l_insert_before(L, e, 8);
  157.  
  158.  
  159.  
  160. l_insert_after(e, 5);
  161. l_printl(L);
  162.  
  163. l_remove(L, e);
  164. l_pop_front(L);
  165. l_pop_back(L);
  166. l_printl(L);
  167.  
  168. return 0;
  169. }
Runtime error #stdin #stdout 0s 9416KB
stdin
Standard input is empty
stdout
Standard output is empty