Untitled
unknown
plain_text
3 years ago
3.8 kB
5
Indexable
#include <iostream> #include <stdexcept> template <typename tip> class Lista{ public: Lista() {} virtual ~Lista() {} virtual int BrojElemenata() const=0; virtual tip& trenutni()=0; virtual bool sljedeci()=0; virtual bool prethodni()=0; virtual void pocetak()=0; virtual void kraj()=0; virtual void obrisi()=0; virtual void dodajIspred(const tip&)=0; virtual void dodajIza(const tip&)=0; virtual tip &operator[](int index)=0; virtual const tip operator[](int index) const=0; }; template <typename tip> class NizLista : public Lista<tip>{ int kapacitet; int duzina; int tekuci; tip **L; public: NizLista(); NizLista(const NizLista &lista){ kapacitet=lista.kapacitet; tekuci=lista.tekuci; duzina=lista.duzina; L=new tip*[kapacitet]; for(int i=0; i<duzina; i++){ L[i]=new tip(*lista.L[i]); } } ~NizLista(){ for(int i=0; i<duzina; i++){ delete L[i]; } delete []L; } NizLista &operator=(const NizLista &lista){ if(duzina!=0 && this!=&lista){ for(int i=0; i<duzina; i++){ delete L[i]; } delete []L; L=nullptr; kapacitet=lista.kapacitet; duzina=lista.kapacitet; tekuci=lista.tekuci; L=new tip*[kapacitet]; for(int i=0; i<duzina; i++){ L[i]=new tip(*lista.L[i]); } } return *this; } int BrojElemenata() const override{ return duzina; } tip& trenutni() override{ return *L[tekuci]; } bool sljedeci() override{ if(duzina==0) throw std::logic_error("Lista je prazna"); if(tekuci==duzina-1) return false; if(tekuci<duzina) tekuci++; return true; } bool prethodni() override{ if(duzina==0) throw std::logic_error("Lista je prazna"); if(tekuci!=0) return false; tekuci--; return true; } void pocetak() override{ if(duzina==0) throw std::logic_error("Lista je prazna"); tekuci=0; } void kraj() override{ if(duzina==0) throw std::logic_error("Lista je prazna"); tekuci=duzina; } void obrisi() override; void dodajIspred(const tip& el) override; void dodajIza(const tip& el) override; }; template <typename tip> NizLista<tip>::NizLista(){ kapacitet=1000; duzina=0; tekuci=0; L=new tip*[kapacitet] {}; } template <typename tip> void NizLista<tip>::obrisi(){ if(duzina<=0) throw std::logic_error("Nema nista za brisati"); if(tekuci!=0 && tekuci!=duzina-1){ delete L[tekuci]; for(int i=tekuci; i<duzina-1; i++){ L[i]=L[i+1]; } duzina--; } else if(tekuci==0){ delete L[tekuci]; duzina--; } else if(tekuci==duzina-1){ delete L[tekuci]; duzina--; tekuci--; } } template <typename tip> void NizLista<tip>::dodajIspred(const tip &el){ if(duzina==0){ duzina++; L[0]=new tip(el); tekuci=0; } else if(duzina<tekuci){ } } template <typename tip> void NizLista<tip>::dodajIza(const tip &el){ if(duzina==0){ duzina++; L[0]=new tip(el); tekuci=0; } } int main() { NizLista<int> niz; for (int i(1); i<=10000; i++) niz.dodajIspred(i); std::cout << niz.brojElemenata() << " "; for (int i(1); i<=10000; i++) niz.obrisi(); std::cout << niz.brojElemenata(); return 0; }
Editor is loading...