Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.18 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Strony{
  6. public:
  7.     int strona;
  8.     Strony* pierwsza;
  9.     Strony* nastepnastrona;                                             //wskaznik na kolejny elementy listy stron
  10.     Strony(){
  11.         pierwsza=NULL;
  12.         nastepnastrona = NULL;
  13.     }
  14.     void dodajStrony(int strona){
  15.         if(!pierwsza){
  16.             Strony *nowa = new Strony;
  17.             nowa->strona=strona;
  18.             pierwsza=nowa;
  19.         }
  20.         else if(pierwsza->strona>strona){
  21.             Strony *nowa = new Strony;
  22.             nowa->strona=strona;
  23.             nowa->nastepnastrona=pierwsza;
  24.             pierwsza=nowa;
  25.         }
  26.         else{
  27.             Strony* temp = pierwsza;
  28.             Strony* temp2 = temp;
  29.             Strony* nowa = new Strony;
  30.             while(temp){
  31.                 if(temp->strona == strona){                                       //jesli ta sama etykieta to tylko dodaje strony
  32.                     break;
  33.                 }
  34.                 else if(temp->strona > strona){
  35.                     temp2->nastepnastrona = nowa;
  36.                     nowa->nastepnastrona=temp;
  37.                     nowa->strona = strona;
  38.                     break;
  39.                 }
  40.                 else if(temp->nastepnastrona == NULL){                            //dodaje na koniec
  41.                     temp->nastepnastrona = nowa;
  42.                     nowa->strona = strona;
  43.                     break;
  44.                 }
  45.                 temp2 = temp;
  46.                 temp = temp->nastepnastrona;
  47.             }
  48.         }
  49.     }
  50.     void usunStrony(int strona){
  51.         if(pierwsza!=NULL){
  52.             Strony* temp = pierwsza;
  53.             Strony* temp2 = temp;
  54.             if(temp->strona==strona){
  55.                 if(temp->nastepnastrona==NULL){
  56.                     temp=NULL;
  57.                     pierwsza=NULL;
  58.                 }
  59.                 else{
  60.                     pierwsza=temp->nastepnastrona;
  61.                     temp=NULL;
  62.                 }
  63.             }
  64.             while(temp){
  65.                 if(temp->strona==strona){
  66.                     if(temp->nastepnastrona==NULL){
  67.                         temp2->nastepnastrona=NULL;
  68.                         temp=NULL;
  69.                         break;
  70.                     }
  71.                     else{
  72.                         temp2->nastepnastrona=temp->nastepnastrona;
  73.                         temp=NULL;
  74.                         break;
  75.                     }
  76.                 }
  77.                 temp2 = temp;
  78.                 temp = temp->nastepnastrona;
  79.             }
  80.         }
  81.     }
  82.  
  83.     int wyszukajStrone(int strona){
  84.         Strony* temp = new Strony;
  85.         temp = pierwsza;
  86.         while(temp){
  87.             if(temp->strona==strona)
  88.                 return 1;
  89.             temp=temp->nastepnastrona;
  90.         }
  91.         return 0;
  92.     }
  93.  
  94.     void wyswietlStrony(){
  95.         Strony *tmp = pierwsza;
  96.         while(tmp!=NULL){
  97.             while(tmp!=NULL){
  98.                 cout<<" ";
  99.                 cout<<tmp->strona;
  100.                 tmp=tmp->nastepnastrona;
  101.             }
  102.             cout<<endl;
  103.         }
  104.     }
  105.  
  106. };
  107.  
  108. class Etykiety{
  109. public:
  110.     string etykieta;
  111.     Etykiety *pierwsza;                                                  //wskaznik na pierwszy element listy etykiet
  112.     Etykiety *nastepnaetykieta;                                          //wskaznik na nastepny element listy etykiet
  113.     Strony *poczatekstron;                                               //wskaznik na pierwsze elementy listy stron dla danego obiektu Etykiety
  114.  
  115.     Etykiety(){
  116.         this->pierwsza=NULL;
  117.         this->poczatekstron = new Strony;                               //tworzy nowa liste stron dla danego obiektu
  118.         this->nastepnaetykieta = NULL;
  119.     }
  120.  
  121.     ~Etykiety(){
  122.         delete poczatekstron;
  123.  
  124.     }
  125.     void dodajEtykiete(string etykieta){
  126.         if(!pierwsza){
  127.             Etykiety *nowa = new Etykiety;
  128.             nowa->etykieta=etykieta;
  129.             nowa->poczatekstron = new Strony;
  130.             int liczbastron;
  131.             cin>>liczbastron;
  132.             int strona;
  133.             for(int i=0; i<liczbastron; i++){
  134.                 cin>>strona;
  135.                 nowa->poczatekstron->dodajStrony(strona);
  136.             }
  137.             nowa->pierwsza=nowa;
  138.             pierwsza=nowa;
  139.         }
  140.         else if(pierwsza->etykieta>etykieta){
  141.             Etykiety *nowa = new Etykiety;
  142.             nowa->etykieta=etykieta;
  143.             nowa->poczatekstron = new Strony;
  144.             int liczbastron;
  145.             cin>>liczbastron;
  146.             int strona;
  147.             for(int i=0; i<liczbastron; i++){
  148.                 cin>>strona;
  149.                 nowa->poczatekstron->dodajStrony(strona);
  150.             }
  151.             nowa->nastepnaetykieta = pierwsza;
  152.             nowa->pierwsza=nowa;
  153.             pierwsza=nowa;
  154.         }
  155.         else{
  156.             Etykiety* temp = pierwsza;
  157.             Etykiety* temp2 = temp;
  158.             Etykiety* nowa = new Etykiety;
  159.             while(temp){
  160.                 if(temp->etykieta == etykieta){                                       //jesli ta sama etykieta to tylko dodaje strony
  161.                     int liczbastron;
  162.                     cin>>liczbastron;
  163.                     int strona;
  164.                     for(int i=0; i<liczbastron; i++){
  165.                         cin>>strona;
  166.                         temp->poczatekstron->dodajStrony(strona);
  167.                     }
  168.                     break;
  169.                 }
  170.                 else if(temp->etykieta > etykieta){
  171.                     temp2->nastepnaetykieta = nowa;
  172.                     nowa->nastepnaetykieta=temp;
  173.                     nowa->etykieta = etykieta;
  174.                     nowa->poczatekstron = new Strony;
  175.                     int liczbastron;
  176.                     cin>>liczbastron;
  177.                     for(int i=0; i<liczbastron; i++){
  178.                         int strona;
  179.                         cin>>strona;
  180.                         nowa->poczatekstron->dodajStrony(strona);
  181.                     }
  182.                     break;
  183.                 }
  184.                 else if(temp->nastepnaetykieta == NULL){                            //dodaje na koniec
  185.                     temp->nastepnaetykieta = nowa;
  186.                     nowa->etykieta = etykieta;
  187.                     nowa->poczatekstron = new Strony;
  188.                     int liczbastron;
  189.                     cin>>liczbastron;
  190.                     int strona;
  191.                     for(int i=0; i<liczbastron; i++){
  192.                         cin>>strona;
  193.                         nowa->poczatekstron->dodajStrony(strona);
  194.                     }
  195.                     break;
  196.                 }
  197.                 temp2 = temp;
  198.                 temp = temp->nastepnaetykieta;
  199.             }
  200.         }
  201.     }
  202.  
  203.     void usunStrony(string etykieta){
  204.             if(pierwsza==NULL){
  205.                 int byleco=0;
  206.                 int liczbastron;
  207.                 cin>>liczbastron;
  208.                 int strona;
  209.                 for(int i=0; i<liczbastron; i++){
  210.                     cin>>strona;
  211.                     byleco+=strona;
  212.                 }
  213.             }
  214.             else if(pierwsza!=NULL){
  215.                 Etykiety* temp = pierwsza;
  216.                 while(temp){
  217.                     if(temp->etykieta == etykieta){
  218.                         int liczbastron;
  219.                         cin>>liczbastron;
  220.                         int strona;
  221.                         for(int i=0; i<liczbastron; i++){
  222.                             cin>>strona;
  223.                             temp->poczatekstron->usunStrony(strona);
  224.                         }
  225.                         if(temp->poczatekstron->pierwsza==NULL){
  226.                             usunEtykiete(etykieta);
  227.                             break;
  228.                         }
  229.                     }
  230.                     temp = temp->nastepnaetykieta;
  231.                 }
  232.                 if(temp==NULL){
  233.                     cout<<"nic nie robie"<<endl;
  234.                     int byleco=0;
  235.                     int liczbastron;
  236.                     cin>>liczbastron;
  237.                     int strona;
  238.                     for(int i=0; i<liczbastron; i++){
  239.                         cin>>strona;
  240.                         byleco+=strona;
  241.                     }
  242.                 }
  243.             }
  244.         }
  245.  
  246.     void usunEtykiete(string etykieta){
  247.         Etykiety* temp = pierwsza;
  248.         Etykiety* temp2 = temp;
  249.         bool czy_usunal = false;
  250.         if(pierwsza->etykieta==etykieta){
  251.             pierwsza=pierwsza->nastepnaetykieta;
  252.             czy_usunal = true;
  253.         }
  254.         while(temp && !czy_usunal){
  255.             if(temp->etykieta==etykieta){
  256.                 if(temp->nastepnaetykieta==NULL){
  257.                     temp2->nastepnaetykieta=NULL;
  258.                 }
  259.                 else{
  260.                     temp2->nastepnaetykieta=temp->nastepnaetykieta;
  261.                 }
  262.             }
  263.             temp2 = temp;
  264.             temp = temp->nastepnaetykieta;
  265.         }
  266.  
  267.     }
  268.  
  269.  
  270.     void wyswietlListe(){
  271.         if(pierwsza!=NULL){
  272.         Etykiety *tmp = pierwsza;
  273.         while(tmp!=NULL){
  274.                 cout<<tmp->etykieta;
  275.                 tmp->poczatekstron->wyswietlStrony();
  276.                 tmp=tmp->nastepnaetykieta;
  277.         }
  278.         }
  279.     }
  280.  
  281.     void wyszukaj(string etykieta, int strona){
  282.         Etykiety* temp = pierwsza;
  283.         if(pierwsza==NULL){
  284.             cout<<"0";
  285.         }
  286.         while(temp){
  287.             if(temp->etykieta==etykieta){
  288.                 cout<<temp->poczatekstron->wyszukajStrone(strona);
  289.                 break;
  290.             }
  291.             else if(temp->nastepnaetykieta==NULL){
  292.                 cout<<"0";
  293.                 break;
  294.             }
  295.             temp=temp->nastepnaetykieta;
  296.         }
  297.     }
  298.  
  299.     void wyszukajall(string etykieta){
  300.         bool czyznaleziono = false;
  301.         Etykiety* temp = pierwsza;
  302.         while(temp && !czyznaleziono){
  303.             if(temp->etykieta==etykieta){
  304.                 czyznaleziono = true;
  305.                 cout<<temp->etykieta;
  306.                 temp->poczatekstron->wyswietlStrony();
  307.             }
  308.             temp=temp->nastepnaetykieta;
  309.         }
  310.         if(!czyznaleziono)
  311.             cout<<"-1"<<endl;
  312.     }
  313. };
  314.  
  315. int main(){
  316.     Etykiety *lista = new Etykiety();
  317.     int operacje;
  318.     cin>>operacje;
  319.     char operacja;
  320.     for(int i=0; i<operacje; i++){
  321.         cin >> operacja;
  322.         switch(operacja){
  323.         case 'I':{
  324.             string etykietaI;
  325.             cin>>etykietaI;
  326.             lista->dodajEtykiete(etykietaI);
  327.             break;
  328.         }
  329.         case 'D':{
  330.             string etykietaD;
  331.             cin>>etykietaD;
  332.             lista->usunStrony(etykietaD);
  333.             break;
  334.         }
  335.         case 'F':{
  336.             int stronaF;
  337.             string etykietaF;
  338.             cin>>etykietaF;
  339.             cin>>stronaF;
  340.             lista->wyszukaj(etykietaF, stronaF);
  341.             cout<<endl;
  342.             break;
  343.         }
  344.         case 'A':{
  345.             string etykietaA;
  346.             cin>>etykietaA;
  347.             lista->wyszukajall(etykietaA);
  348.             break;
  349.         }
  350.         case 'P':{
  351.             lista->wyswietlListe();
  352.             break;
  353.         }
  354.         }
  355.     }
  356.     delete lista;
  357.     return 0;
  358. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement