Advertisement
Adijata

skupovi maji

Oct 26th, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.15 KB | None | 0 0
  1. #include <iostream>
  2. #include<stdexcept>
  3. using namespace std;
  4.  
  5. template <typename Tip>
  6. class MojiSkupovi
  7. {
  8. public:
  9.     MojiSkupovi() {};
  10.     virtual ~MojiSkupovi() {};
  11.     virtual void dodajElement(Tip el)=0;
  12.     virtual void obrisi()=0;
  13.     virtual void obrisi (Tip el)=0;
  14.     virtual void ispisi()=0;
  15.     virtual int brojElemenata()=0;
  16.     virtual Tip &nadji(Tip el)=0;
  17.     virtual bool nadjiBool(Tip el) const=0;
  18.  
  19. };
  20. template <typename Tip>
  21. class Skup
  22. {
  23.     struct Cvor
  24.     {
  25.         Tip element;
  26.         Cvor *veza;
  27.         Cvor *prVeza;
  28.     };
  29.     Cvor* Pocetak;
  30.     Cvor* Kraj;
  31.     Cvor* Tekuci;
  32.     int brojEl;
  33.  
  34. public:
  35.     Skup()
  36.     {
  37.         Pocetak=new Cvor;
  38.  
  39.         Kraj=0;
  40.         Tekuci=0;
  41.         brojEl=0;
  42.     }
  43.  
  44.     virtual ~Skup()
  45.     {
  46.         while (Pocetak != 0)
  47.         {
  48.             Tekuci = Pocetak;
  49.             Pocetak = Pocetak->veza;
  50.             delete Tekuci;
  51.         }
  52.         Kraj=0;
  53.         Tekuci=0;
  54.         Pocetak=0;
  55.  
  56.     };
  57.     virtual int brojElemenata()const
  58.     {
  59.         return brojEl;
  60.     }
  61.     virtual void dodajElement(Tip el)
  62.     {
  63.         if((brojEl !=0 )&& (nadjiBool(el)))return;
  64.         if(brojEl==0)
  65.         {
  66.             Pocetak->element=el;
  67.             Pocetak->veza=nullptr;
  68.             Pocetak->prVeza=nullptr;
  69.             Tekuci=Kraj = Pocetak;
  70.         }
  71.         else
  72.         {
  73.             Cvor* novi=new Cvor;
  74.             novi->element=el;
  75.             novi->veza=nullptr;
  76.             novi->prVeza=Tekuci;
  77.             Tekuci->veza = novi;
  78.             Tekuci=Kraj=novi;
  79.  
  80.         }
  81.         brojEl++;
  82.     }
  83.     virtual void obrisi()
  84.     {
  85.         while (Pocetak != 0)
  86.         {
  87.             Tekuci = Pocetak;
  88.             Pocetak = Pocetak->veza;
  89.             delete Tekuci;
  90.         }
  91.         Kraj=0;
  92.         Tekuci=0;
  93.         Pocetak=0;
  94.         brojEl=0;
  95.  
  96.     }
  97.     virtual void obrisi (Tip el)
  98.     {
  99.         Cvor* Temp=Pocetak;
  100.         while (Temp != 0)
  101.         {
  102.             if(Temp->element==el)
  103.             {
  104.                 Cvor* nesto=Temp->prVeza;
  105.                 delete Temp;
  106.  
  107.                 Temp=Temp->veza;
  108.                 Temp->prVeza=nesto;
  109.                 brojEl--;
  110.                 return;
  111.             }
  112.             else
  113.                 Temp = Temp->veza;
  114.         }
  115.  
  116.         throw domain_error("Nemam sta obrisat budalo");
  117.  
  118.     }
  119.  
  120.  
  121.     virtual Tip &nadji(Tip el)
  122.     {
  123.         Cvor* Temp=Pocetak;
  124.         while(Temp!=Kraj)
  125.         {
  126.             if(Temp->element==el)
  127.                 return Temp->element;
  128.             Temp=Temp->veza;
  129.         }
  130.         throw domain_error("Nema elementa! ");
  131.  
  132.     }
  133.     virtual bool nadjiBool(Tip el) const
  134.     {
  135.         Cvor* Temp=Pocetak;
  136.         while(Temp!=Kraj)
  137.         {
  138.             if(Temp->element==el)
  139.                 return true;
  140.  
  141.             Temp = Temp->veza;
  142.         }
  143.         return false;
  144.  
  145.     }
  146.     virtual void ispisi()
  147.     {
  148.         Cvor* it = Pocetak->veza;
  149.             int N = brojEl, cuvajj = 0;
  150.  
  151.             while (N != 0) {
  152.                 cuvajj = 0;
  153.                 it = Pocetak->veza;
  154.                 for (int j = 1; j < N; j ++) {
  155.                     if (it->prVeza->element > it->element) {
  156.                         Tip temp = it->element;
  157.                         it->element = it->prVeza->element;
  158.                         it->prVeza->element = temp;
  159.                         cuvajj = j;
  160.                     }
  161.                     it = it->veza;
  162.                 }
  163.                 N = cuvajj;
  164.             }
  165.  
  166.         Cvor* temp=Pocetak;
  167.         while(temp!=0)
  168.         {
  169.             cout << temp->element << " ";
  170.             temp = temp->veza;
  171.         }
  172.  
  173.     }
  174.     Skup(const Skup &L)
  175.     {
  176.         Pocetak = 0;
  177.         Cvor *pm=L.Pocetak;
  178.         Cvor *prethodni;
  179.         while(pm!=0)
  180.         {
  181.             Cvor *novi=new Cvor(*pm);
  182.  
  183.             novi->veza=0;
  184.             if(Pocetak==0) Pocetak=novi;
  185.             else prethodni->veza= novi;
  186.             novi->prVeza=prethodni;
  187.             prethodni=novi;
  188.             pm=pm->veza;
  189.         }
  190.  
  191.  
  192.         Tekuci=Kraj =prethodni;
  193.         brojEl = L.brojEl;
  194.     }
  195.  
  196.  
  197.  
  198.     Skup &operator =(const Skup &L)
  199.     {
  200.         if(&L!=this)
  201.         {
  202.             if (brojEl != 0)
  203.             {
  204.                 while (Pocetak != 0)
  205.                 {
  206.                     Tekuci = Pocetak;
  207.                     Pocetak = Pocetak->veza;
  208.                     delete Tekuci;
  209.                 }
  210.                 Kraj=0;
  211.                 Tekuci=0;
  212.                 Pocetak=0;
  213.             }
  214.             else
  215.                 delete Pocetak;
  216.             Pocetak = 0;
  217.             Cvor *pm=L.Pocetak;
  218.             Cvor *prethodni;
  219.             while(pm!=0)
  220.             {
  221.                 Cvor *novi=new Cvor(*pm);
  222.  
  223.                 novi->veza=0;
  224.                 if(Pocetak==0) Pocetak=novi;
  225.                 else prethodni->veza= novi;
  226.                 novi->prVeza=prethodni;
  227.                 prethodni=novi;
  228.                 pm=pm->veza;
  229.             }
  230.  
  231.             Tekuci=Kraj = prethodni;
  232.             brojEl = L.brojEl;
  233.  
  234.         }
  235.  
  236.         return *this;
  237.  
  238.     }
  239.  
  240. };
  241. template <typename Tip>
  242. class MultiSkup
  243. {
  244.     struct Cvor
  245.     {
  246.         Tip element;
  247.         Cvor *veza;
  248.         Cvor *prVeza;
  249.     };
  250.     Cvor* Pocetak;
  251.     Cvor* Kraj;
  252.     Cvor* Tekuci;
  253.     int brojEl;
  254.  
  255. public:
  256.     MultiSkup()
  257.     {
  258.         Pocetak=new Cvor;
  259.  
  260.         Kraj=0;
  261.         Tekuci=0;
  262.         brojEl=0;
  263.     }
  264.  
  265.     virtual ~MultiSkup()
  266.     {
  267.         while (Pocetak != 0)
  268.         {
  269.             Tekuci = Pocetak;
  270.             Pocetak = Pocetak->veza;
  271.             delete Tekuci;
  272.         }
  273.         Kraj=0;
  274.         Tekuci=0;
  275.         Pocetak=0;
  276.  
  277.     };
  278.     virtual int brojElemenata()const
  279.     {
  280.         return brojEl;
  281.     }
  282.     virtual void dodajElement(Tip el)
  283.     {
  284.  
  285.         if(brojEl==0)
  286.         {
  287.             Pocetak->element=el;
  288.             Pocetak->veza=nullptr;
  289.             Pocetak->prVeza=nullptr;
  290.             Tekuci=Kraj = Pocetak;
  291.         }
  292.         else
  293.         {
  294.             Cvor* novi=new Cvor;
  295.             novi->element=el;
  296.             novi->veza=nullptr;
  297.             novi->prVeza=Tekuci;
  298.             Tekuci->veza = novi;
  299.             Tekuci=Kraj=novi;
  300.  
  301.         }
  302.         brojEl++;
  303.     }
  304.     virtual void obrisi()
  305.     {
  306.         while (Pocetak != 0)
  307.         {
  308.             Tekuci = Pocetak;
  309.             Pocetak = Pocetak->veza;
  310.             delete Tekuci;
  311.         }
  312.         Kraj=0;
  313.         Tekuci=0;
  314.         Pocetak=0;
  315.         brojEl=0;
  316.  
  317.     }
  318.     virtual void obrisi (Tip el)
  319.     {
  320.         Cvor* Temp=Pocetak;
  321.         while (Temp != 0)
  322.         {
  323.             if(Temp->element==el)
  324.             {
  325.                 Cvor* nesto=Temp->prVeza;
  326.                 delete Temp;
  327.  
  328.                 Temp=Temp->veza;
  329.                 Temp->prVeza=nesto;
  330.                 brojEl--;
  331.                 return;
  332.             }
  333.             else
  334.                 Temp = Temp->veza;
  335.         }
  336.  
  337.         throw domain_error("Nemam sta obrisat budalo");
  338.  
  339.     }
  340.  
  341.  
  342.     virtual Tip &nadji(Tip el)
  343.     {
  344.         Cvor* Temp=Pocetak;
  345.         while(Temp!=Kraj)
  346.         {
  347.             if(Temp->element==el)
  348.                 return Temp->element;
  349.             Temp=Temp->veza;
  350.         }
  351.         throw domain_error("Nema elementa! ");
  352.  
  353.     }
  354.     virtual bool nadjiBool(Tip el) const
  355.     {
  356.         Cvor* Temp=Pocetak;
  357.         while(Temp!=Kraj)
  358.         {
  359.             if(Temp->element==el)
  360.                 return true;
  361.  
  362.             Temp = Temp->veza;
  363.         }
  364.         return false;
  365.  
  366.     }
  367.     virtual void ispisi()
  368.     {
  369.         Cvor* it = Pocetak->veza;
  370.             int N = brojEl, cuvajj = 0;
  371.  
  372.             while (N != 0) {
  373.                 cuvajj = 0;
  374.                 it = Pocetak->veza;
  375.                 for (int j = 1; j < N; j ++) {
  376.                     if (it->prVeza->element > it->element) {
  377.                         Tip temp = it->element;
  378.                         it->element = it->prVeza->element;
  379.                         it->prVeza->element = temp;
  380.                         cuvajj = j;
  381.                     }
  382.                     it = it->veza;
  383.                 }
  384.                 N = cuvajj;
  385.             }
  386.  
  387.         Cvor* temp=Pocetak;
  388.         while(temp!=0)
  389.         {
  390.             cout << temp->element << " ";
  391.             temp = temp->veza;
  392.         }
  393.  
  394.     }
  395.     MultiSkup(const MultiSkup &L)
  396.     {
  397.         Pocetak = 0;
  398.         Cvor *pm=L.Pocetak;
  399.         Cvor *prethodni;
  400.         while(pm!=0)
  401.         {
  402.             Cvor *novi=new Cvor(*pm);
  403.  
  404.             novi->veza=0;
  405.             if(Pocetak==0) Pocetak=novi;
  406.             else prethodni->veza= novi;
  407.             novi->prVeza=prethodni;
  408.             prethodni=novi;
  409.             pm=pm->veza;
  410.         }
  411.  
  412.  
  413.         Tekuci=Kraj =prethodni;
  414.         brojEl = L.brojEl;
  415.     }
  416.  
  417.  
  418.  
  419.     MultiSkup &operator =(const MultiSkup &L)
  420.     {
  421.         if(&L!=this)
  422.         {
  423.             if (brojEl != 0)
  424.             {
  425.                 while (Pocetak != 0)
  426.                 {
  427.                     Tekuci = Pocetak;
  428.                     Pocetak = Pocetak->veza;
  429.                     delete Tekuci;
  430.                 }
  431.                 Kraj=0;
  432.                 Tekuci=0;
  433.                 Pocetak=0;
  434.             }
  435.             else
  436.                 delete Pocetak;
  437.             Pocetak = 0;
  438.             Cvor *pm=L.Pocetak;
  439.             Cvor *prethodni;
  440.             while(pm!=0)
  441.             {
  442.                 Cvor *novi=new Cvor(*pm);
  443.  
  444.                 novi->veza=0;
  445.                 if(Pocetak==0) Pocetak=novi;
  446.                 else prethodni->veza= novi;
  447.                 novi->prVeza=prethodni;
  448.                 prethodni=novi;
  449.                 pm=pm->veza;
  450.             }
  451.  
  452.             Tekuci=Kraj =prethodni;
  453.             brojEl = L.brojEl;
  454.  
  455.         }
  456.  
  457.         return *this;
  458.  
  459.     }
  460.  
  461. };
  462.  
  463.  
  464.  
  465. int main()
  466. {
  467.   try{
  468.     Skup<int> s;
  469.     s.dodajElement(5);
  470.     s.dodajElement(4);
  471.     s.dodajElement(7);
  472.     s.dodajElement(8);
  473.     s.dodajElement(7);
  474.     s.dodajElement(9);
  475.     s.nadji(7)=121;
  476.  
  477.     Skup<int> p(s);
  478.     p.dodajElement(44);
  479.     p.ispisi();
  480.     cout << endl;
  481.  
  482.  
  483.     s.ispisi();
  484.   }
  485.   catch(domain_error e)
  486.   {
  487.       cout << e.what();
  488.   }
  489.  
  490. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement