Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdexcept>
- using namespace std;
- template<typename tip> //kopirano iz zadatka pripremne zadaće 2
- class Lista
- {
- public:
- Lista() {}
- virtual ~Lista() {}
- virtual int brojElemenata() const =0;
- virtual tip &trenutni()=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;
- virtual tip operator[](int i) const=0;
- };
- template<typename tip>
- class DvostrukaLista : public Lista<tip>{
- private:
- struct Cvor{
- tip element;
- Cvor *sljed, *pret;
- Cvor(const tip &element, Cvor* pret, Cvor* sljed=0) : element(element), pret(pret), sljed(sljed){
- if(pret!=0) pret->sljed=this;
- if(sljed!=0) sljed->pret=this;
- }
- Cvor(Cvor *pret=0, Cvor* sljed=0) : pret(pret), sljed(sljed){
- if(pret!=0) pret->sljed=this;
- if(sljed!=0) sljed->pret=this;
- }
- };
- Cvor *poc, *kr, *tren; int lduzina, dduzina;
- public:
- DvostrukaLista(int velicina=10){ tren = poc = new Cvor(0,0);
- poc->sljed=kr=new Cvor(poc,0);
- lduzina=dduzina=0;
- }
- ~DvostrukaLista(){
- while (poc!=0) {
- tren=poc;
- poc=poc->sljedeci;
- delete tren;
- }
- kr=0; tren=0;
- }
- int brojElemenata() const{ return dduzina+lduzina; }
- tip &trenutni(){ if (dduzina!=0) return tren->sljed->element; else throw "Nema trenutnog.";}
- tip trenutni() const{ if (dduzina!=0) return tren->sljed->element; else throw "Nema trenutnog.";}
- bool prethodni();
- bool sljedeci();
- void pocetak();
- void kraj();
- void obrisi();
- void dodajIspred(const tip &el);
- void dodajIza(const tip &el);
- tip &operator[] (int i){
- if(i<0 || i>dduzina+lduzina) throw "Neispravan indeks.";
- int p(0), ld(lduzina), dd(dduzina);
- dduzina=dduzina+lduzina-i;
- lduzina=i; int k(0);
- if(i<abs(i-ld) && i<(ld+dd)/2){
- k=i-ld;
- tren=poc;
- }else if(abs(i-ld) < ld+dd-i) k=i-ld;
- else{
- k=i-ld-dd-1;
- tren=kr;
- }
- if(k<0)
- for(int i(0); i<abs(k); i++) tren=tren->pret;
- else
- for(int i=0; i<k; i++) tren=tren->sljed;
- }
- tip operator[](int i) const{
- {
- if(i<0 || i>dduzina+lduzina) throw "Neispravan indeks.";
- int p(0), ld(lduzina), dd(dduzina);
- dduzina=dduzina+lduzina-i;
- lduzina=i; int k(0);
- if(i<abs(i-ld) && i<(ld+dd)/2){
- k=i-ld;
- tren=poc;
- }else if(abs(i-ld) < ld+dd-i) k=i-ld;
- else{
- k=i-ld-dd-1;
- tren=kr;
- }
- if(k<0)
- for(int i(0); i<abs(k); i++) tren=tren->pret;
- else
- for(int i=0; i<k; i++) tren=tren->sljed;
- }
- }
- };
- template<typename tip>
- bool DvostrukaLista<tip>:: prethodni(){
- if(tren!=poc){
- tren=tren->pret;
- lduzina--;
- dduzina++;
- }
- return false;
- }
- template<typename tip>
- bool DvostrukaLista<tip>:: sljedeci(){
- if(tren!=kr){
- tren=tren->sljed;
- dduzina--;
- lduzina++;
- }
- return false;
- }
- template<typename tip>
- void DvostrukaLista<tip> ::kraj(){
- tren=kr;
- lduzina+=dduzina;
- dduzina=0;
- }
- template<typename tip>
- void DvostrukaLista<tip> ::pocetak(){
- tren=poc;
- dduzina+=lduzina;
- lduzina=0;
- }
- template<typename tip>
- void DvostrukaLista<tip> ::obrisi(){
- while (poc!=0) {
- tren=poc;
- poc=poc->sljedeci;
- delete tren;
- }
- kr=0; tren=0;
- tren=poc= new Cvor(0,0);
- poc->sljed=kr=new Cvor(poc,0);
- lduzina=dduzina=0;
- }
- int main() {
- std::cout << "Zadaća 1, Zadatak 1";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement