Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct lista // lista to taka typ struktury, który posiada:
  6. {
  7. int data; // przechowalnie na dane, czyli to co zawiera ten element
  8. lista * next; //wskaźnik na kolejny element listy
  9.  
  10. };
  11.  
  12.  
  13. void insert_new(lista * & head, int key, int index) // funkcja dodająca nowy element
  14. {
  15. int licznik=0;
  16. unsigned c = 0; // zerujemy licznik
  17. lista* p = head;
  18. while (p) // obliczamy ile jest elementów w 'p' - czyli kopi head ( a head to wskaźnik na listę, która podajemy do funkcji)
  19. {
  20. c++;
  21. p = p->next; // tutaj tę kopię zmieniamy, dlatego używamy kopi, a nie oryginału
  22. }
  23. //są teraz 4 możlowości dodania nowego elementu za które trzeba się inaczej zabrać
  24. if (head==nullptr) // 1. jeżeli wskaźnik na listę jest pusty oznacza to, że lista nie istnieje
  25. {
  26. lista* nowy = new lista; // tworzymy nowy element, który jest wskaźnikiem na strukturę 'lista' - czyli towrzymy nowy element listy
  27. nowy->data = key;
  28. nowy->next = nullptr; //ogólnie rzecz biorąc normalnie w strukturach byśmy zapisali nowy.next, ale zapisujemy nowy->next, bo next jest wskaźnikiem (tak to rozumiem)
  29. head = nowy;
  30. }
  31. else if (index==0) // 2. jeżeli dodajemy na początku listy
  32. {
  33. lista* nowy = new lista;
  34. nowy->next = head;
  35. nowy->data = key;
  36. head = nowy;
  37. }
  38. else if (index==c) // 3. jeżeli chcemy coś umieścić w środku
  39. {
  40. lista* nowy = new lista; // jak zwykle chcąc dodać nowy element trzeba go stworzyć :)
  41. lista* iterator = head; // pomocnicza lista za pomocą której dojdziemy do ostatniego elementu
  42. while (iterator->next!=nullptr) iterator = iterator->next; // sposób w jaki dojść (if you know what I mean) do ostatenigo elementu
  43. iterator->next = nowy;
  44. nowy->data = key;
  45. nowy->next = nullptr;
  46. }
  47. else
  48. {
  49. lista* nowy = new lista;
  50. int inny_licznik=0;
  51. lista* iterator = head;
  52. while (inny_licznik!=(index-1)) // znajdujemy element poprzedający to miejsce, na które chcemy dodać nasz nowy element
  53. {
  54. iterator = iterator->next; // ten sam magiczny sposób na dojście
  55. inny_licznik++;
  56. }
  57. nowy->next = iterator->next;
  58. iterator->next = nowy;
  59. nowy->data = key;
  60. }
  61. }
  62. void delete_index(lista * & head, int index)
  63. {
  64. unsigned c = 0;
  65. lista* p = head; // pomocnicza lista
  66. while (p)
  67. {
  68. c++;
  69. p = p->next;
  70. }
  71. if (index==0) // jeżeli chcem usunąc pierwszy element listy
  72. {
  73. lista* pomocniczy = head; // inna pomocnicza lista
  74. head = pomocniczy->next;
  75. delete pomocniczy;
  76.  
  77. }
  78. else if (index==c) // ostatni element
  79. {
  80. lista* iterator = head;
  81. while (iterator->next != nullptr) iterator = iterator->next;
  82. delete iterator;
  83.  
  84. }
  85. else
  86. {
  87. int inny_licznik = 0;
  88. lista* iterator = head;
  89. while (inny_licznik != (index - 1))
  90. {
  91. iterator = iterator->next;
  92. inny_licznik++;
  93. }
  94.  
  95. iterator->next = iterator->next->next;
  96. // tutaj nie wiem jak wrzucić 'delete', bo trzeba usunąć usunięty element, ale coś mi się pieprzy w programie
  97. }
  98. }
  99.  
  100. void get_index(lista * & head, int index)
  101. {
  102. int inny_licznik = 0;
  103. lista* iterator = head; // pomocnicza lista - kopia
  104. while (inny_licznik != (index ))
  105. {
  106. iterator = iterator->next;
  107. inny_licznik++;
  108. }
  109. cout << iterator->data;
  110. }
  111. int main()
  112. {
  113. lista * L = NULL; // zawiera adres początku listy
  114. char zmienna;
  115. while (cin>>zmienna)
  116. {
  117. if (zmienna == 'q')
  118. break;
  119. switch (zmienna)
  120. {
  121. case 'i':
  122. int key, index;
  123. cin >> key;
  124. cin >> index;
  125. insert_new(L, key, index);
  126. break;
  127.  
  128. case 'g':
  129. int delta;
  130. cin >> delta;
  131. get_index(L, delta);
  132. break;
  133. case 'd':
  134. int gamma;
  135. cin >> gamma;
  136. delete_index(L, gamma);
  137. break;
  138.  
  139. default:
  140. // powinno tu coś być, ale stos nie popełnia błędów i cały ten program napisałem dla przypadku idealnego
  141. break;
  142. }
  143. }
  144. // Szowinistyczny żart na koniec:
  145. // Na lekcji programowania obiektowego student łapie koleżankę obok za pierś.
  146. // Na to ona: „To prywatne!!!”, a on odpowiada: „Myślałem że jesteśmy w tej samej klasie
  147. // ~~ pozdrawiam Dawid Krefta ~~
  148. return 0;
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement