Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Lista {
- private:
- typedef struct element{
- string slowo;
- int wartosc;
- element *nastepny;
- element *poprzedni;
- }element;
- element *pozycja_pierwszego;
- element* pozycja_ost;
- int size;
- public:
- Lista();
- ~Lista();
- void insert(string, int, element*); //wkladam pozycje pierwszego i co
- void erase(int*); //jaki element usunac
- void push_front(string, int);
- void push_back(string, int);
- int get_size();
- };
- int main()
- {
- string slowo;
- int wartosc;
- Lista list;
- int rozmiar_listy;
- int indeks_pierwszego;
- cin >> rozmiar_listy >> indeks_pierwszego;
- for( int i =0; i < rozmiar_listy; i++)
- {
- cin >> slowo >> wartosc;
- list.push_back(slowo, wartosc);
- }
- int rozmiar_drugiej;
- cin >> rozmiar_drugiej;
- while(list.get_size()>0)
- {
- list.erase(&indeks_pierwszego);
- }
- return 0;
- }
- Lista::Lista()
- {
- pozycja_pierwszego = pozycja_ost = nullptr;
- size =0; //z gwiazdką????
- }
- Lista::~Lista()
- {
- }
- void Lista::insert(string slowo, int wartosc, element* el)
- {
- element *nowy = new element;
- nowy->slowo = slowo;
- nowy->wartosc = wartosc;
- el->poprzedni->nastepny = nowy;
- nowy->poprzedni = el->poprzedni;
- nowy->nastepny = el;
- el->poprzedni= nowy;
- size++;
- }
- void Lista::erase(int* indeks_pierwszego) //to tak naprawde nie jest index pierwszego xDD
- {
- element *el = pozycja_pierwszego;
- *indeks_pierwszego = *indeks_pierwszego%size;
- if(*indeks_pierwszego >= size/2)
- {
- for(int i = (size - *indeks_pierwszego);i>0;i--)
- {
- el = el->poprzedni;
- }
- }
- else
- {
- for(int i = *indeks_pierwszego;i>0;i--)
- {
- el = el->nastepny;
- }
- }
- if(el->wartosc != 0)
- {
- cout << el->slowo << " ";
- el->poprzedni->nastepny = el->nastepny;
- el->nastepny->poprzedni = el->poprzedni;
- size--;
- if((*indeks_pierwszego + el->wartosc) < 0)
- {
- *indeks_pierwszego += (size + (el->wartosc%size));
- }
- else if((*indeks_pierwszego + el->wartosc) >= size)
- {
- if(size == 0)
- {
- }
- else
- {
- *indeks_pierwszego = (*indeks_pierwszego + (el->wartosc%size)-1)%size ;
- }
- }
- else
- *indeks_pierwszego += el->wartosc;
- delete el;
- }
- else
- {
- string nowe_s;
- int wart_slowa;
- int wart_zera;
- cin >> nowe_s >> wart_slowa >> wart_zera;
- el->wartosc= wart_zera;
- insert(nowe_s, wart_slowa, el);
- *indeks_pierwszego+= 1;
- if((*indeks_pierwszego + el->wartosc) < 0)
- {
- *indeks_pierwszego += (size + (el->wartosc%size));
- }
- else if((*indeks_pierwszego + el->wartosc) > size)
- {
- *indeks_pierwszego = (*indeks_pierwszego + (el->wartosc%size)-1)%size;
- }
- else
- *indeks_pierwszego += el->wartosc;
- }
- }
- void Lista::push_front(string slowo, int wartosc)
- {
- element *pomocniczy = new element;
- pomocniczy -> slowo = slowo;
- pomocniczy -> wartosc = wartosc;
- pomocniczy ->nastepny = pozycja_pierwszego;
- pozycja_pierwszego = pomocniczy;
- pozycja_ost = pozycja_pierwszego;
- }
- void Lista::push_back(string slowo, int wartosc)
- {
- if(pozycja_pierwszego == NULL)
- push_front(slowo, wartosc);
- else
- {
- element *nowy = new element;
- nowy ->slowo = slowo;
- nowy ->wartosc = wartosc;
- nowy ->nastepny = pozycja_pierwszego;
- nowy->poprzedni = pozycja_ost;
- pozycja_ost->nastepny= nowy;
- pozycja_pierwszego->poprzedni = nowy;
- pozycja_ost = nowy;
- }
- size++;
- }
- int Lista::get_size()
- {
- return size;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement