Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Strony{
- public:
- int strona;
- Strony* pierwsza;
- Strony* nastepnastrona; //wskaznik na kolejny elementy listy stron
- Strony(){
- pierwsza=NULL;
- nastepnastrona = NULL;
- }
- void dodajStrony(int strona){
- if(!pierwsza){
- Strony *nowa = new Strony;
- nowa->strona=strona;
- pierwsza=nowa;
- }
- else if(pierwsza->strona>strona){
- Strony *nowa = new Strony;
- nowa->strona=strona;
- nowa->nastepnastrona=pierwsza;
- pierwsza=nowa;
- }
- else{
- Strony* temp = pierwsza;
- Strony* temp2 = temp;
- Strony* nowa = new Strony;
- while(temp){
- if(temp->strona == strona){ //jesli ta sama etykieta to tylko dodaje strony
- break;
- }
- else if(temp->strona > strona){
- temp2->nastepnastrona = nowa;
- nowa->nastepnastrona=temp;
- nowa->strona = strona;
- break;
- }
- else if(temp->nastepnastrona == NULL){ //dodaje na koniec
- temp->nastepnastrona = nowa;
- nowa->strona = strona;
- break;
- }
- temp2 = temp;
- temp = temp->nastepnastrona;
- }
- }
- }
- void usunStrony(int strona){
- if(pierwsza!=NULL){
- Strony* temp = pierwsza;
- Strony* temp2 = temp;
- if(temp->strona==strona){
- if(temp->nastepnastrona==NULL){
- temp=NULL;
- pierwsza=NULL;
- }
- else{
- pierwsza=temp->nastepnastrona;
- temp=NULL;
- }
- }
- while(temp){
- if(temp->strona==strona){
- if(temp->nastepnastrona==NULL){
- temp2->nastepnastrona=NULL;
- temp=NULL;
- break;
- }
- else{
- temp2->nastepnastrona=temp->nastepnastrona;
- temp=NULL;
- break;
- }
- }
- temp2 = temp;
- temp = temp->nastepnastrona;
- }
- }
- }
- int wyszukajStrone(int strona){
- Strony* temp = new Strony;
- temp = pierwsza;
- while(temp){
- if(temp->strona==strona)
- return 1;
- temp=temp->nastepnastrona;
- }
- return 0;
- }
- void wyswietlStrony(){
- Strony *tmp = pierwsza;
- while(tmp!=NULL){
- while(tmp!=NULL){
- cout<<" ";
- cout<<tmp->strona;
- tmp=tmp->nastepnastrona;
- }
- cout<<endl;
- }
- }
- };
- class Etykiety{
- public:
- string etykieta;
- Etykiety *pierwsza; //wskaznik na pierwszy element listy etykiet
- Etykiety *nastepnaetykieta; //wskaznik na nastepny element listy etykiet
- Strony *poczatekstron; //wskaznik na pierwsze elementy listy stron dla danego obiektu Etykiety
- Etykiety(){
- this->pierwsza=NULL;
- this->poczatekstron = new Strony; //tworzy nowa liste stron dla danego obiektu
- this->nastepnaetykieta = NULL;
- }
- ~Etykiety(){
- delete poczatekstron;
- }
- void dodajEtykiete(string etykieta){
- if(!pierwsza){
- Etykiety *nowa = new Etykiety;
- nowa->etykieta=etykieta;
- nowa->poczatekstron = new Strony;
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- nowa->poczatekstron->dodajStrony(strona);
- }
- nowa->pierwsza=nowa;
- pierwsza=nowa;
- }
- else if(pierwsza->etykieta>etykieta){
- Etykiety *nowa = new Etykiety;
- nowa->etykieta=etykieta;
- nowa->poczatekstron = new Strony;
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- nowa->poczatekstron->dodajStrony(strona);
- }
- nowa->nastepnaetykieta = pierwsza;
- nowa->pierwsza=nowa;
- pierwsza=nowa;
- }
- else{
- Etykiety* temp = pierwsza;
- Etykiety* temp2 = temp;
- Etykiety* nowa = new Etykiety;
- while(temp){
- if(temp->etykieta == etykieta){ //jesli ta sama etykieta to tylko dodaje strony
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- temp->poczatekstron->dodajStrony(strona);
- }
- break;
- }
- else if(temp->etykieta > etykieta){
- temp2->nastepnaetykieta = nowa;
- nowa->nastepnaetykieta=temp;
- nowa->etykieta = etykieta;
- nowa->poczatekstron = new Strony;
- int liczbastron;
- cin>>liczbastron;
- for(int i=0; i<liczbastron; i++){
- int strona;
- cin>>strona;
- nowa->poczatekstron->dodajStrony(strona);
- }
- break;
- }
- else if(temp->nastepnaetykieta == NULL){ //dodaje na koniec
- temp->nastepnaetykieta = nowa;
- nowa->etykieta = etykieta;
- nowa->poczatekstron = new Strony;
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- nowa->poczatekstron->dodajStrony(strona);
- }
- break;
- }
- temp2 = temp;
- temp = temp->nastepnaetykieta;
- }
- }
- }
- void usunStrony(string etykieta){
- if(pierwsza==NULL){
- int byleco=0;
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- byleco+=strona;
- }
- }
- else if(pierwsza!=NULL){
- Etykiety* temp = pierwsza;
- while(temp){
- if(temp->etykieta == etykieta){
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- temp->poczatekstron->usunStrony(strona);
- }
- if(temp->poczatekstron->pierwsza==NULL){
- usunEtykiete(etykieta);
- break;
- }
- }
- temp = temp->nastepnaetykieta;
- }
- if(temp==NULL){
- cout<<"nic nie robie"<<endl;
- int byleco=0;
- int liczbastron;
- cin>>liczbastron;
- int strona;
- for(int i=0; i<liczbastron; i++){
- cin>>strona;
- byleco+=strona;
- }
- }
- }
- }
- void usunEtykiete(string etykieta){
- Etykiety* temp = pierwsza;
- Etykiety* temp2 = temp;
- bool czy_usunal = false;
- if(pierwsza->etykieta==etykieta){
- pierwsza=pierwsza->nastepnaetykieta;
- czy_usunal = true;
- }
- while(temp && !czy_usunal){
- if(temp->etykieta==etykieta){
- if(temp->nastepnaetykieta==NULL){
- temp2->nastepnaetykieta=NULL;
- }
- else{
- temp2->nastepnaetykieta=temp->nastepnaetykieta;
- }
- }
- temp2 = temp;
- temp = temp->nastepnaetykieta;
- }
- }
- void wyswietlListe(){
- if(pierwsza!=NULL){
- Etykiety *tmp = pierwsza;
- while(tmp!=NULL){
- cout<<tmp->etykieta;
- tmp->poczatekstron->wyswietlStrony();
- tmp=tmp->nastepnaetykieta;
- }
- }
- }
- void wyszukaj(string etykieta, int strona){
- Etykiety* temp = pierwsza;
- if(pierwsza==NULL){
- cout<<"0";
- }
- while(temp){
- if(temp->etykieta==etykieta){
- cout<<temp->poczatekstron->wyszukajStrone(strona);
- break;
- }
- else if(temp->nastepnaetykieta==NULL){
- cout<<"0";
- break;
- }
- temp=temp->nastepnaetykieta;
- }
- }
- void wyszukajall(string etykieta){
- bool czyznaleziono = false;
- Etykiety* temp = pierwsza;
- while(temp && !czyznaleziono){
- if(temp->etykieta==etykieta){
- czyznaleziono = true;
- cout<<temp->etykieta;
- temp->poczatekstron->wyswietlStrony();
- }
- temp=temp->nastepnaetykieta;
- }
- if(!czyznaleziono)
- cout<<"-1"<<endl;
- }
- };
- int main(){
- Etykiety *lista = new Etykiety();
- int operacje;
- cin>>operacje;
- char operacja;
- for(int i=0; i<operacje; i++){
- cin >> operacja;
- switch(operacja){
- case 'I':{
- string etykietaI;
- cin>>etykietaI;
- lista->dodajEtykiete(etykietaI);
- break;
- }
- case 'D':{
- string etykietaD;
- cin>>etykietaD;
- lista->usunStrony(etykietaD);
- break;
- }
- case 'F':{
- int stronaF;
- string etykietaF;
- cin>>etykietaF;
- cin>>stronaF;
- lista->wyszukaj(etykietaF, stronaF);
- cout<<endl;
- break;
- }
- case 'A':{
- string etykietaA;
- cin>>etykietaA;
- lista->wyszukajall(etykietaA);
- break;
- }
- case 'P':{
- lista->wyswietlListe();
- break;
- }
- }
- }
- delete lista;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement