Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Lista {
  6. private:
  7. typedef struct element{
  8. string slowo;
  9. int wartosc;
  10. element *nastepny;
  11. element *poprzedni;
  12. element *aktualny;
  13. }element;
  14. element *pozycja_pierwszego;
  15. element* pozycja_ost;
  16. int size;
  17. public:
  18. Lista();
  19. ~Lista();
  20. void insert(string, int, element*);
  21. void erase(int*);
  22. void push_front(string, int);
  23. void push_back(string, int);
  24. int get_size();
  25. void display_test();
  26. void przesuniecie(int*);
  27.  
  28. };
  29.  
  30. int main()
  31. {
  32. string slowo;
  33. int wartosc;
  34. Lista list;
  35. int rozmiar_listy;
  36. int indeks_pierwszego;
  37. cin >> rozmiar_listy >> indeks_pierwszego;
  38. for( int i =0; i < rozmiar_listy; i++)
  39. {
  40. cin >> slowo >> wartosc;
  41. list.push_back(slowo, wartosc);
  42. }
  43. // list.display_test();
  44. // list.erase(&indeks_pierwszego);
  45. // list.display_test();
  46. int rozmiar_drugiej;
  47. cin >> rozmiar_drugiej;
  48. while(list.get_size()>0)
  49. {
  50. list.erase(&indeks_pierwszego);
  51. }
  52. return 0;
  53. }
  54. Lista::Lista()
  55. {
  56. pozycja_pierwszego = pozycja_ost = nullptr;
  57. size =0;
  58. }
  59.  
  60. Lista::~Lista()
  61. {
  62.  
  63. }
  64. void Lista::insert(string slowo, int wartosc, element* el)
  65. {
  66. element *nowy = new element;
  67. nowy->slowo = slowo;
  68. nowy->wartosc = wartosc;
  69. el->poprzedni->nastepny = nowy;
  70. nowy->poprzedni = el->poprzedni;
  71. nowy->nastepny = el;
  72. el->poprzedni= nowy;
  73. size++;
  74.  
  75.  
  76. }
  77.  
  78. void Lista::erase(int* indeks_pierwszego) //to tak naprawde nie jest indeks pierwszego xDD
  79. {
  80. element *el = pozycja_pierwszego;
  81. // if(size == 2 && *indeks_pierwszego == 0)
  82. // {
  83. // el=el->nastepny;
  84. // }
  85.  
  86. // else {
  87. if(*indeks_pierwszego >= size/2)
  88. {
  89. for(int i = (size - *indeks_pierwszego);i>0;i--)
  90. {
  91. el = el->poprzedni;
  92. }
  93. }
  94. else
  95. {
  96.  
  97. for(int i = *indeks_pierwszego;i>0;i--) //jak mam indeks =0 to sie nie przesuwa
  98. {
  99. el = el->nastepny;
  100. }
  101.  
  102. }
  103. // }
  104.  
  105. if(el->wartosc != 0)
  106. {
  107. cout << el->slowo << " ";
  108. el->poprzedni->nastepny = el->nastepny;
  109. el->nastepny->poprzedni = el->poprzedni;
  110. size--;
  111. if(size == 0)
  112. {
  113. delete el;
  114. return;
  115. }
  116.  
  117. if((*indeks_pierwszego + el->wartosc) < 0)
  118. {
  119. if((el->wartosc*-1) == size)
  120. *indeks_pierwszego=*indeks_pierwszego;
  121. /* else if((*indeks_pierwszego+ (el->wartosc%size)) == 0)
  122. *indeks_pierwszego = 0;*///((el->wartosc + *indeks_pierwszego)*-1) + 1;
  123. else
  124. *indeks_pierwszego = el->wartosc%size + *indeks_pierwszego;
  125. ///*indeks_pierwszego = size+ *indeks_pierwszego +el->wartosc%size;
  126. //*indeks_pierwszego += (el->wartosc%size); //+size; //zle
  127. // *indeks_pierwszego = (*indeks_pierwszego + el->wartosc)%size*-1;
  128. }
  129. else if((*indeks_pierwszego + el->wartosc) >= size)
  130. {
  131. *indeks_pierwszego = (*indeks_pierwszego + (el->wartosc%size)-1)%size ;
  132. }
  133.  
  134. else if(el->wartosc <0 && el->wartosc*-1 < size)
  135.  
  136. *indeks_pierwszego += el->wartosc;
  137. else
  138. *indeks_pierwszego += el->wartosc - 1;
  139. if(el == pozycja_pierwszego)
  140. pozycja_pierwszego = el->nastepny;
  141. if(el == pozycja_ost)
  142. pozycja_ost = el->poprzedni;
  143. delete el;
  144. }
  145. else
  146. {
  147. string nowe_s;
  148. int wart_slowa;
  149. int wart_zera;
  150. cin >> nowe_s >> wart_slowa >> wart_zera;
  151. el->wartosc= wart_zera;
  152. insert(nowe_s, wart_slowa, el);
  153. *indeks_pierwszego+= 1;
  154. if((*indeks_pierwszego + el->wartosc) < 0)
  155. {
  156. if((el->wartosc*-1) == size) //dobre dla tego
  157. *indeks_pierwszego=*indeks_pierwszego;
  158. // else if((el->wartosc%size) ==0
  159. // *indeks_pierwszego =
  160. else if((el->wartosc%size+ *indeks_pierwszego) >= 0) //poprawiane
  161. *indeks_pierwszego = el->wartosc%size + *indeks_pierwszego;
  162. else
  163. *indeks_pierwszego = el->wartosc%size + size + *indeks_pierwszego;
  164. }
  165. else if((*indeks_pierwszego + el->wartosc) > size)
  166. {
  167. //zakazana linijka VVVVV :O
  168. *indeks_pierwszego = (*indeks_pierwszego + (el->wartosc%size)-1)%size ;
  169. }
  170.  
  171. else
  172. *indeks_pierwszego += el->wartosc;
  173. }
  174.  
  175.  
  176. }
  177. void Lista::push_front(string slowo, int wartosc)
  178. {
  179. element *pomocniczy = new element;
  180. pomocniczy -> slowo = slowo;
  181. pomocniczy -> wartosc = wartosc;
  182. pomocniczy ->nastepny = pozycja_pierwszego;
  183. pozycja_pierwszego = pomocniczy;
  184. pozycja_ost = pozycja_pierwszego;
  185. }
  186.  
  187. void Lista::push_back(string slowo, int wartosc)
  188. {
  189. if(pozycja_pierwszego == nullptr)
  190. push_front(slowo, wartosc);
  191. else
  192. {
  193. element *nowy = new element;
  194. nowy ->slowo = slowo;
  195. nowy ->wartosc = wartosc;
  196. nowy ->nastepny = pozycja_pierwszego;
  197. nowy->poprzedni = pozycja_ost;
  198. pozycja_ost->nastepny= nowy;
  199. pozycja_pierwszego->poprzedni = nowy;
  200. pozycja_ost = nowy;
  201. }
  202. size++;
  203. }
  204.  
  205. int Lista::get_size()
  206. {
  207. return size;
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement