Advertisement
Guest User

Untitled

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