Advertisement
Kubas1998

Untitled

Dec 11th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5.  
  6. // ------------ DEFINIOWANIE STRUKTURY LISTY ---------------------- //
  7. typedef struct lista
  8. {
  9. struct lista *next, *prev;
  10. char *slowo;
  11. }lista;
  12.  
  13.  
  14. // ------------ TWORZENIE NOWYCH LIST ---------------------- //
  15.  
  16. lista *test = NULL;
  17. lista *test2 = NULL;
  18. lista *test3 = NULL;
  19.  
  20.  
  21. // ------------ WSTAWIANIE ---------------------- //
  22.  
  23. void wstaw(char* slowko, lista **head)
  24. {
  25. lista *nowe = (lista*)malloc(sizeof(lista));// tymczasowa zmienna pomocnicza,
  26. //do której przypisany zostanie adres pierwszego elementu listy
  27. nowe->slowo = slowko; //zamieniamy slowo na nasze slowko
  28. nowe->next = *head; //zamieniamy nexta na starego heada
  29. *head = nowe;
  30. //nowe->prev = NULL;
  31. }
  32.  
  33.  
  34. // ------------ DRUKOWANIE ---------------------- //
  35.  
  36. void drukuj(lista *part)
  37. {
  38. while(part != NULL)
  39. {
  40. printf("%s ", part->slowo);
  41. part=part->next;
  42. }
  43. printf("\n\n");
  44. }
  45.  
  46. lista* szukaj(char* slowko, lista *part)
  47. {
  48. while(part != NULL && part->slowo != slowko)
  49. {
  50. part=part->next;
  51. }
  52. return part;
  53. }
  54.  
  55.  
  56. // ------------ USUWANIE WEZLA ---------------------- //
  57.  
  58. void usun(char *slowko, lista **head)
  59. {
  60. lista* temp = *head;
  61. lista* usun = NULL;
  62. int licznik=0;
  63. while(temp != NULL)
  64. {
  65. if(temp->slowo != slowko)
  66. {
  67. usun=temp;
  68. temp=temp->next;
  69. licznik++;
  70. }
  71. else
  72. {
  73. if(licznik==0)
  74. {
  75. *head = temp->next;
  76. return;
  77. }
  78. else
  79. {
  80. usun->next = temp->next;
  81. free(temp);
  82. return;
  83. }
  84. }
  85. }
  86. return;
  87.  
  88. }
  89.  
  90.  
  91.  
  92. /*
  93. void bez_powt(lista *head)
  94. {
  95. lista *pierwszy, *drugi, *usun;
  96. pierwszy = head;
  97.  
  98. while(pierwszy != NULL && pierwszy->next != NULL)
  99. {
  100. drugi = pierwszy;
  101. while(drugi->next != NULL)
  102. {
  103. if(pierwszy->slowo == drugi->next->slowo)
  104. {
  105. usun = drugi->next;
  106. drugi->next = drugi->next->next;
  107. free(usun);
  108. }
  109. else
  110. drugi=drugi->next;
  111. }
  112. pierwszy=pierwszy->next;
  113. }
  114. }
  115. */
  116.  
  117. // ------------ BEZ POWTORZEN ---------------------- //
  118.  
  119. lista* bezpowtorzen(lista *oryginal){
  120. lista *head = NULL;
  121. while(oryginal != NULL)
  122. {
  123. wstaw(oryginal->slowo, &head);
  124. oryginal=oryginal->next;
  125.  
  126. }
  127. lista *pierwszy, *drugi, *duplikat, *adrespowrotny;
  128. pierwszy = head;
  129. adrespowrotny = head;
  130.  
  131.  
  132. //Sprawdzamy elementy jeden po drugim
  133. while(pierwszy != NULL && pierwszy->next != NULL)
  134. {
  135. drugi = pierwszy;
  136. //Porównujemy element z reszta elementow
  137. while(drugi->next != NULL)
  138. {
  139. //Jesli kopia to ja kasujemy
  140. if(pierwszy->slowo == drugi->next->slowo)
  141. {
  142. duplikat = drugi->next;
  143. drugi->next = drugi->next->next;
  144. free(duplikat);
  145. }
  146. else
  147. {
  148. drugi=drugi->next;
  149. }
  150. }
  151. pierwszy=pierwszy->next;
  152. }
  153. printf("\nKopia bez powtorzen: ");
  154. drukuj(adrespowrotny);
  155. return adrespowrotny;
  156. }
  157.  
  158.  
  159. // ------------ SCALANIE LIST ---------------------- //
  160.  
  161. void scal(lista** list1, lista** list2, lista** list3)
  162. {
  163. lista *tmp;
  164. *list3 = *list1;
  165. tmp = *list3;
  166. while(tmp->next != NULL){
  167. tmp=tmp->next;
  168. }
  169. tmp->next = *list2;
  170. (*list2)->prev = tmp;
  171. *list1 = NULL;
  172. *list2 = NULL;
  173. }
  174.  
  175.  
  176. // ------------ KASOWANIE LISTY ---------------------- //
  177.  
  178. void kasuj(lista** head){
  179. lista* tmp = *head;
  180. lista *t;
  181. while(tmp != NULL){
  182. t = tmp->next;
  183. free(tmp);
  184. tmp = t;
  185. }
  186. *head = NULL;
  187. printf("Lista zostala usunieta i pamiec zwolniona \n");
  188. }
  189.  
  190.  
  191.  
  192. int main()
  193. {
  194.  
  195. wstaw("reka", &test);
  196. wstaw("noga", &test);
  197. wstaw("posladek", &test);
  198. wstaw("posladek", &test);
  199. wstaw("klata", &test);
  200. wstaw("noga", &test);
  201. wstaw("reka", &test);
  202.  
  203.  
  204. wstaw("reka", &test2);
  205. wstaw("ogon", &test2);
  206. wstaw("posladek", &test2);
  207. wstaw("brzuch", &test2);
  208.  
  209.  
  210. printf("Cala lista 1:\n");
  211. drukuj(test);
  212.  
  213. printf("\n\nLista 1 bez klaty:\n");
  214. usun("klata", &test);
  215. drukuj(test);
  216.  
  217. printf("\n\nLista 1 po usunieciu klaty z polowa ciala (bez powtorzen kopia):\n");
  218. bezpowtorzen(test);
  219. printf("Nienaruszony oryginal: ");
  220. drukuj(test);
  221.  
  222. printf("\n\nLista 1 usuniecie:\n");
  223. kasuj(&test);
  224. drukuj(test);
  225.  
  226. wstaw("klata", &test);
  227. wstaw("glowa", &test);
  228. wstaw("noga", &test);
  229.  
  230. /*
  231. printf("Lista 1 po usunieciu klaty z polowa ciala (bez powtorzen):\n");
  232. bez_powt(test);
  233. drukuj(test);
  234. */
  235.  
  236.  
  237. printf("\nScalamy liste1 i liste2 w liste3 : \n\n");
  238. printf("Lista 1: ");
  239. drukuj(test);
  240. printf("Lista 2: ");
  241. drukuj(test2);
  242. scal(&test, &test2, &test3);
  243. printf("Lista 3: ");
  244. drukuj(test3);
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement