You are on page 1of 5

#include <iostream>

template <typename Tip>


class Lista
{
public:
Lista(){};
virtual ~Lista(){};
virtual int BrojElemenata()const {return 0;}
virtual Tip& trenutni() const=0;
virtual bool prethodni()=0;
virtual bool sljedeci()=0;
virtual void pocetak()=0;
virtual void kraj()=0;
virtual void obrisi()=0;
virtual void dodajIspred(const Tip& el)=0;
virtual void dodajIza(const Tip& el)=0;
virtual Tip& operator[](int i)=0;
};
template <typename Tip>
class NizLista: public Lista<Tip>
{
int duzina;
int kapacitet;
Tip* pok;
int tr;
public:
NizLista(const NizLista& n) {duzina=n.duzina; kapacitet=n.kapacitet; tr=n.tr
; pok=new Tip[kapacitet]; for(int i(0); i<duzina; i++) pok[i]=n.pok[i];};
~NizLista(){delete[] pok; duzina=0; kapacitet=0; tr=0;}
NizLista(): kapacitet(100), duzina(0), tr(0) {pok=new Tip[100];}
int BrojElemenata()const {return duzina;}
Tip& trenutni()const {return pok[tr];}
bool prethodni(){if(duzina==0) throw "Bacila si cigluuu";if (tr==0) return f
alse; tr-=1; return true;}
bool sljedeci() {if(duzina==0) throw "Bacila si cigluuu";if(tr==duzina-1) re
turn false; tr+=1; return true;}
void kraj(){if(duzina==0) throw "Bacila si cigluuu";tr=duzina-1;}
void pocetak(){if(duzina==0) throw "Bacila si cigluuu";tr=0;}
void obrisi() {bool aha(false); if(trenutni==duzina-1) aha=true; for(int i(t
renutni); i<duzina-1; i++) {pok[i]=pok[i+1];} duzina--; if(aha) trenutni-=1; };
void dodajIspred(const Tip& el);
void dodajIza(const Tip& el);
Tip& operator[](int i);
};
template <typename Tip>
Tip& NizLista<Tip>::operator[](int i)
{
return pok[i];
}
template <typename Tip>
void NizLista<Tip>::dodajIspred(const Tip& el)
{
if(duzina==0){ tr=0;
pok[0]=el; duzina++;}
else
{
for(int i(tr+1); i<duzina+1; i++)
{
pok[i]=pok[i-1];
}
pok[tr]=el;
tr+=1;
duzina++;
}
}
template <typename Tip>
void NizLista<Tip>::dodajIza(const Tip& el)
{
if(duzina==0){ tr=0;
pok[0]=el; duzina++;}
else
{
for(int i(tr+2); i<duzina+1; i++)
{
pok[i]=pok[i-1];
}
pok[tr+1]=el;
duzina++;
}
}
template <typename Tip>
class JednostrukaLista :public Lista<Tip>
{
private:
struct Cvor
{
Tip element;
Cvor* sljedeci;
Cvor (const Tip& element, Cvor* sljedeci): element(element), sljedeci(sl
jedeci){}
};
int lduzina; int dduzina;
Cvor* pocetak;
Cvor* kraj;
Cvor* tekuci;
void Unisti();
void IdiNa(int i);
public:
JednostrukaLista(): pocetak(0), kraj(0), tekuci(0), lduzina(0), dduzina(0){}
int BrojElemenata() const {return lduzina;}
Tip& trenutni() {if(dduzina==0 && lduzina==0) throw "Nema elemenata!\n"; if(
tekuci==0) return pocetak->element; else return tekuci->sljedeci->element;}
void pocetak();
void kraj();
void obrisi();
bool prethodni();
bool sljedeci();
void dodajIspred(const Tip& el);
void dodajIza(const Tip& el);
Tip& operator[](int i);
};
template <typename Tip>
void JednostrukaLista<Tip>::IdiNa(int i)
{
int p(0);
int ld(lduzina);
dduzina=dduzina+lduzina-i;
lduzina=i;
if(i==0) {tekuci=0; return;}
if(i>=ld)
{
if(ld==0) tekuci=pocetak;
else
{
p=ld-1;
}
}
else tekuci=pocetak;
for(int k=p; k<i-1; k++) tekuci=tekuci->sljedeci;
}
template <typename Tip>
Tip& JednostrukaLista<Tip>::operator[](int i)
{
if(i<0 || i>dduzina+lduzina) throw "ih ja";
IdiNa(i);
if(i==0 || tekuci==0) return pocetak->element;
else return tekuci->sljedeci->element;
}
template <typename Tip>
void JednostrukaLista<Tip>::dodajIza(const Tip& el)
{
Cvor* p= new Cvor(el, 0);
if(lduzina==0)
{
p->sljedeci=pocetak;
pocetak=p;
if(lduzina+dduzina==0) kraj=p;
}
else
{
p->sljedeci= tekuci->sljedeci;
tekuci->sljedeci=p;
if(dduzina==0) kraj= tekuci->sljedeci;
}
dduzina++;
}
template <typename Tip>
void JednostrukaLista<Tip>::dodajIspred(const Tip& el)
{
Cvor* p= new Cvor(el, 0);
if(lduzina==0)
{
p->sljedeci=pocetak;
pocetak=p;
if(lduzina+dduzina==0) kraj=p;
}
if (lduzina+dduzina==0) kraj=trenutni=p;
else if (lduzina==1){
p->sljedeci=tekuci;
pocetak=p;
}
else {
p->sljedeci=tekuci;
prethodni();
tekuci->sljedeci=p;
tekuci=p->sljedeci;
}
}
template <typename Tip>
void JednostrukaLista<Tip>::obrisi()
{
if(dduzina<=0) throw "Nema elemenata";
Tip x;
Cvor* prvi;
if(lduzina==0)
{
x=pocetak->element;
priv=pocetak;
pocetak=priv->sljedeci;
}
else
{
priv=tekuci->sljedeci;
x=tekuci->sljedeci->element;
tekuci->sljedeci=priv->sljedeci;
}
if(dduzina==1) kraj=tekuci;
delete priv;
dduzina--;
}
template <typename Tip>
void JednostrukaLista<Tip>::pocetak()
{
if(dduzina==0 && lduzina==0) throw "nema elemenata";
tekuci=0;
dduzina+=lduzina;
lduzina=0;
}
template <typename Tip>
void JednostrukaLista<Tip>::kraj()
{
if(dduzina==0 && lduzina==0) throw "nema elemenata";
tekuci=kraj;
lduzina+=dduzina;
dduzina=0;
}
template <typename Tip>
bool JednostrukaLista<Tip>::prethodni()
{
// if(dduzina==0) throw "Nema elemenata!\n";
if(lduzina!=0)
{
if(lduzina==1) {tekuci=0; return false;}
else
{
Cvor* p(pocetak);
while(p->sljedeci != tekuci)
p=p->sljedeci;
tekuci=p;
}
lduzina--;
dduzina++;
return true;
}
}
template <typename Tip>
bool JednostrukaLista<Tip>::sljedeci()
{
if(dduzina==0 && lduzina==0) throw "nema elemenata";
if(dduzina==0) return false;
if(lduzina==0) tekuci=pocetak;
else
{
tekuci=tekuci->sljedeci;
lduzina++;
dduzina--;
}
return true;
}
int main()
{
}

You might also like