Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 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;
  13. element *pozycja_pierwszego;
  14. element* pozycja_ost;
  15. int size;
  16. public:
  17. Lista();
  18. ~Lista();
  19. void insert(string, int, element*); //wkladam pozycje pierwszego i co
  20. void erase(int*); //jaki element usunac
  21. void push_front(string, int);
  22. void push_back(string, int);
  23. int get_size();
  24.  
  25. };
  26.  
  27. int main()
  28. {
  29. string slowo;
  30. int wartosc;
  31. Lista list;
  32. int rozmiar_listy;
  33. int indeks_pierwszego;
  34. cin >> rozmiar_listy >> indeks_pierwszego;
  35. for( int i =0; i < rozmiar_listy; i++)
  36. {
  37. cin >> slowo >> wartosc;
  38. list.push_back(slowo, wartosc);
  39. }
  40. int rozmiar_drugiej;
  41. cin >> rozmiar_drugiej;
  42. while(list.get_size()>0)
  43. {
  44. list.erase(&indeks_pierwszego);
  45. }
  46. return 0;
  47. }
  48. Lista::Lista()
  49. {
  50. pozycja_pierwszego = pozycja_ost = nullptr;
  51. size =0; //z gwiazdką????
  52. }
  53.  
  54. Lista::~Lista()
  55. {
  56.  
  57. }
  58. void Lista::insert(string slowo, int wartosc, element* el)
  59. {
  60. element *nowy = new element;
  61. nowy->slowo = slowo;
  62. nowy->wartosc = wartosc;
  63. el->poprzedni->nastepny = nowy;
  64. nowy->poprzedni = el->poprzedni;
  65. nowy->nastepny = el;
  66. el->poprzedni= nowy;
  67. size++;
  68.  
  69.  
  70. }
  71.  
  72. void Lista::erase(int* indeks_pierwszego) //to tak naprawde nie jest index pierwszego xDD
  73. {
  74. element *el = pozycja_pierwszego;
  75. *indeks_pierwszego = *indeks_pierwszego%size;
  76. if(*indeks_pierwszego >= size/2)
  77. {
  78. for(int i = (size - *indeks_pierwszego);i>0;i--)
  79. {
  80. el = el->poprzedni;
  81. }
  82. }
  83. else
  84. {
  85. for(int i = *indeks_pierwszego;i>0;i--)
  86. {
  87. el = el->nastepny;
  88. }
  89. }
  90. if(el->wartosc != 0)
  91. {
  92. cout << el->slowo << " ";
  93. el->poprzedni->nastepny = el->nastepny;
  94. el->nastepny->poprzedni = el->poprzedni;
  95. size--;
  96. if((*indeks_pierwszego + el->wartosc) < 0)
  97. {
  98. *indeks_pierwszego += (size + (el->wartosc%size));
  99. }
  100. else if((*indeks_pierwszego + el->wartosc) >= size)
  101. {
  102. if(size == 0)
  103. {
  104.  
  105. }
  106. else
  107. {
  108. *indeks_pierwszego = (*indeks_pierwszego + (el->wartosc%size)-1)%size ;
  109. }
  110. }
  111. else
  112. *indeks_pierwszego += el->wartosc;
  113. delete el;
  114. }
  115. else
  116. {
  117. string nowe_s;
  118. int wart_slowa;
  119. int wart_zera;
  120. cin >> nowe_s >> wart_slowa >> wart_zera;
  121. el->wartosc= wart_zera;
  122. insert(nowe_s, wart_slowa, el);
  123. *indeks_pierwszego+= 1;
  124. if((*indeks_pierwszego + el->wartosc) < 0)
  125. {
  126. *indeks_pierwszego += (size + (el->wartosc%size));
  127. }
  128. else if((*indeks_pierwszego + el->wartosc) > size)
  129. {
  130. *indeks_pierwszego = (*indeks_pierwszego + (el->wartosc%size)-1)%size;
  131. }
  132. else
  133. *indeks_pierwszego += el->wartosc;
  134. }
  135.  
  136.  
  137. }
  138. void Lista::push_front(string slowo, int wartosc)
  139. {
  140. element *pomocniczy = new element;
  141. pomocniczy -> slowo = slowo;
  142. pomocniczy -> wartosc = wartosc;
  143. pomocniczy ->nastepny = pozycja_pierwszego;
  144. pozycja_pierwszego = pomocniczy;
  145. pozycja_ost = pozycja_pierwszego;
  146. }
  147.  
  148. void Lista::push_back(string slowo, int wartosc)
  149. {
  150. if(pozycja_pierwszego == NULL)
  151. push_front(slowo, wartosc);
  152. else
  153. {
  154. element *nowy = new element;
  155. nowy ->slowo = slowo;
  156. nowy ->wartosc = wartosc;
  157. nowy ->nastepny = pozycja_pierwszego;
  158. nowy->poprzedni = pozycja_ost;
  159. pozycja_ost->nastepny= nowy;
  160. pozycja_pierwszego->poprzedni = nowy;
  161. pozycja_ost = nowy;
  162. }
  163. size++;
  164. }
  165.  
  166. int Lista::get_size()
  167. {
  168. return size;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement