Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<stdexcept>
- using namespace std;
- template <typename Tip>
- class MojiSkupovi
- {
- public:
- MojiSkupovi() {};
- virtual ~MojiSkupovi() {};
- virtual void dodajElement(Tip el)=0;
- virtual void obrisi()=0;
- virtual void obrisi (Tip el)=0;
- virtual void ispisi()=0;
- virtual int brojElemenata()=0;
- virtual Tip &nadji(Tip el)=0;
- virtual bool nadjiBool(Tip el) const=0;
- };
- template <typename Tip>
- class Skup
- {
- struct Cvor
- {
- Tip element;
- Cvor *veza;
- Cvor *prVeza;
- };
- Cvor* Pocetak;
- Cvor* Kraj;
- Cvor* Tekuci;
- int brojEl;
- public:
- Skup()
- {
- Pocetak=new Cvor;
- Kraj=0;
- Tekuci=0;
- brojEl=0;
- }
- virtual ~Skup()
- {
- while (Pocetak != 0)
- {
- Tekuci = Pocetak;
- Pocetak = Pocetak->veza;
- delete Tekuci;
- }
- Kraj=0;
- Tekuci=0;
- Pocetak=0;
- };
- virtual int brojElemenata()const
- {
- return brojEl;
- }
- virtual void dodajElement(Tip el)
- {
- if((brojEl !=0 )&& (nadjiBool(el)))return;
- if(brojEl==0)
- {
- Pocetak->element=el;
- Pocetak->veza=nullptr;
- Pocetak->prVeza=nullptr;
- Tekuci=Kraj = Pocetak;
- }
- else
- {
- Cvor* novi=new Cvor;
- novi->element=el;
- novi->veza=nullptr;
- novi->prVeza=Tekuci;
- Tekuci->veza = novi;
- Tekuci=Kraj=novi;
- }
- brojEl++;
- }
- virtual void obrisi()
- {
- while (Pocetak != 0)
- {
- Tekuci = Pocetak;
- Pocetak = Pocetak->veza;
- delete Tekuci;
- }
- Kraj=0;
- Tekuci=0;
- Pocetak=0;
- brojEl=0;
- }
- virtual void obrisi (Tip el)
- {
- Cvor* Temp=Pocetak;
- while (Temp != 0)
- {
- if(Temp->element==el)
- {
- Cvor* nesto=Temp->prVeza;
- delete Temp;
- Temp=Temp->veza;
- Temp->prVeza=nesto;
- brojEl--;
- return;
- }
- else
- Temp = Temp->veza;
- }
- throw domain_error("Nemam sta obrisat budalo");
- }
- virtual Tip &nadji(Tip el)
- {
- Cvor* Temp=Pocetak;
- while(Temp!=Kraj)
- {
- if(Temp->element==el)
- return Temp->element;
- Temp=Temp->veza;
- }
- throw domain_error("Nema elementa! ");
- }
- virtual bool nadjiBool(Tip el) const
- {
- Cvor* Temp=Pocetak;
- while(Temp!=Kraj)
- {
- if(Temp->element==el)
- return true;
- Temp = Temp->veza;
- }
- return false;
- }
- virtual void ispisi()
- {
- Cvor* it = Pocetak->veza;
- int N = brojEl, cuvajj = 0;
- while (N != 0) {
- cuvajj = 0;
- it = Pocetak->veza;
- for (int j = 1; j < N; j ++) {
- if (it->prVeza->element > it->element) {
- Tip temp = it->element;
- it->element = it->prVeza->element;
- it->prVeza->element = temp;
- cuvajj = j;
- }
- it = it->veza;
- }
- N = cuvajj;
- }
- Cvor* temp=Pocetak;
- while(temp!=0)
- {
- cout << temp->element << " ";
- temp = temp->veza;
- }
- }
- Skup(const Skup &L)
- {
- Pocetak = 0;
- Cvor *pm=L.Pocetak;
- Cvor *prethodni;
- while(pm!=0)
- {
- Cvor *novi=new Cvor(*pm);
- novi->veza=0;
- if(Pocetak==0) Pocetak=novi;
- else prethodni->veza= novi;
- novi->prVeza=prethodni;
- prethodni=novi;
- pm=pm->veza;
- }
- Tekuci=Kraj =prethodni;
- brojEl = L.brojEl;
- }
- Skup &operator =(const Skup &L)
- {
- if(&L!=this)
- {
- if (brojEl != 0)
- {
- while (Pocetak != 0)
- {
- Tekuci = Pocetak;
- Pocetak = Pocetak->veza;
- delete Tekuci;
- }
- Kraj=0;
- Tekuci=0;
- Pocetak=0;
- }
- else
- delete Pocetak;
- Pocetak = 0;
- Cvor *pm=L.Pocetak;
- Cvor *prethodni;
- while(pm!=0)
- {
- Cvor *novi=new Cvor(*pm);
- novi->veza=0;
- if(Pocetak==0) Pocetak=novi;
- else prethodni->veza= novi;
- novi->prVeza=prethodni;
- prethodni=novi;
- pm=pm->veza;
- }
- Tekuci=Kraj = prethodni;
- brojEl = L.brojEl;
- }
- return *this;
- }
- };
- template <typename Tip>
- class MultiSkup
- {
- struct Cvor
- {
- Tip element;
- Cvor *veza;
- Cvor *prVeza;
- };
- Cvor* Pocetak;
- Cvor* Kraj;
- Cvor* Tekuci;
- int brojEl;
- public:
- MultiSkup()
- {
- Pocetak=new Cvor;
- Kraj=0;
- Tekuci=0;
- brojEl=0;
- }
- virtual ~MultiSkup()
- {
- while (Pocetak != 0)
- {
- Tekuci = Pocetak;
- Pocetak = Pocetak->veza;
- delete Tekuci;
- }
- Kraj=0;
- Tekuci=0;
- Pocetak=0;
- };
- virtual int brojElemenata()const
- {
- return brojEl;
- }
- virtual void dodajElement(Tip el)
- {
- if(brojEl==0)
- {
- Pocetak->element=el;
- Pocetak->veza=nullptr;
- Pocetak->prVeza=nullptr;
- Tekuci=Kraj = Pocetak;
- }
- else
- {
- Cvor* novi=new Cvor;
- novi->element=el;
- novi->veza=nullptr;
- novi->prVeza=Tekuci;
- Tekuci->veza = novi;
- Tekuci=Kraj=novi;
- }
- brojEl++;
- }
- virtual void obrisi()
- {
- while (Pocetak != 0)
- {
- Tekuci = Pocetak;
- Pocetak = Pocetak->veza;
- delete Tekuci;
- }
- Kraj=0;
- Tekuci=0;
- Pocetak=0;
- brojEl=0;
- }
- virtual void obrisi (Tip el)
- {
- Cvor* Temp=Pocetak;
- while (Temp != 0)
- {
- if(Temp->element==el)
- {
- Cvor* nesto=Temp->prVeza;
- delete Temp;
- Temp=Temp->veza;
- Temp->prVeza=nesto;
- brojEl--;
- return;
- }
- else
- Temp = Temp->veza;
- }
- throw domain_error("Nemam sta obrisat budalo");
- }
- virtual Tip &nadji(Tip el)
- {
- Cvor* Temp=Pocetak;
- while(Temp!=Kraj)
- {
- if(Temp->element==el)
- return Temp->element;
- Temp=Temp->veza;
- }
- throw domain_error("Nema elementa! ");
- }
- virtual bool nadjiBool(Tip el) const
- {
- Cvor* Temp=Pocetak;
- while(Temp!=Kraj)
- {
- if(Temp->element==el)
- return true;
- Temp = Temp->veza;
- }
- return false;
- }
- virtual void ispisi()
- {
- Cvor* it = Pocetak->veza;
- int N = brojEl, cuvajj = 0;
- while (N != 0) {
- cuvajj = 0;
- it = Pocetak->veza;
- for (int j = 1; j < N; j ++) {
- if (it->prVeza->element > it->element) {
- Tip temp = it->element;
- it->element = it->prVeza->element;
- it->prVeza->element = temp;
- cuvajj = j;
- }
- it = it->veza;
- }
- N = cuvajj;
- }
- Cvor* temp=Pocetak;
- while(temp!=0)
- {
- cout << temp->element << " ";
- temp = temp->veza;
- }
- }
- MultiSkup(const MultiSkup &L)
- {
- Pocetak = 0;
- Cvor *pm=L.Pocetak;
- Cvor *prethodni;
- while(pm!=0)
- {
- Cvor *novi=new Cvor(*pm);
- novi->veza=0;
- if(Pocetak==0) Pocetak=novi;
- else prethodni->veza= novi;
- novi->prVeza=prethodni;
- prethodni=novi;
- pm=pm->veza;
- }
- Tekuci=Kraj =prethodni;
- brojEl = L.brojEl;
- }
- MultiSkup &operator =(const MultiSkup &L)
- {
- if(&L!=this)
- {
- if (brojEl != 0)
- {
- while (Pocetak != 0)
- {
- Tekuci = Pocetak;
- Pocetak = Pocetak->veza;
- delete Tekuci;
- }
- Kraj=0;
- Tekuci=0;
- Pocetak=0;
- }
- else
- delete Pocetak;
- Pocetak = 0;
- Cvor *pm=L.Pocetak;
- Cvor *prethodni;
- while(pm!=0)
- {
- Cvor *novi=new Cvor(*pm);
- novi->veza=0;
- if(Pocetak==0) Pocetak=novi;
- else prethodni->veza= novi;
- novi->prVeza=prethodni;
- prethodni=novi;
- pm=pm->veza;
- }
- Tekuci=Kraj =prethodni;
- brojEl = L.brojEl;
- }
- return *this;
- }
- };
- int main()
- {
- try{
- Skup<int> s;
- s.dodajElement(5);
- s.dodajElement(4);
- s.dodajElement(7);
- s.dodajElement(8);
- s.dodajElement(7);
- s.dodajElement(9);
- s.nadji(7)=121;
- Skup<int> p(s);
- p.dodajElement(44);
- p.ispisi();
- cout << endl;
- s.ispisi();
- }
- catch(domain_error e)
- {
- cout << e.what();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement