Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
3.8 kB
2
Indexable
Never
#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;
}