Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.51 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template<typename tip>
  6. struct Cvor
  7. {
  8.     tip element;
  9.     Cvor* pok;
  10. };
  11. template <typename tip> class Lista
  12. {
  13. protected:
  14. public:
  15.     Lista() {};
  16.     virtual ~Lista() {};
  17.     virtual int brojElemenata () const=0;
  18.     virtual tip& trenutni()=0;
  19.     virtual bool prethodni()=0;
  20.     virtual bool sljedeci()=0;
  21.     virtual void pocetak()=0;
  22.     virtual void kraj()=0;
  23.     virtual void obrisi()=0;
  24.     virtual void dodajIspred(const tip& el)=0;
  25.     virtual void dodajIza(const tip& el)=0;
  26.     virtual tip &operator[](tip el)=0;
  27.     virtual tip operator[](tip el) const=0;
  28. };
  29. template<typename tip> class NizLista: public Lista<tip>
  30. {
  31.     tip* pok;
  32.     tip* tren;
  33.     int vel;
  34. public:
  35.     NizLista(): vel(0), pok(nullptr), tren(nullptr) {}
  36.     NizLista(int n)
  37.     {
  38.         tren=new tip [n];
  39.         pok=tren;
  40.         vel=n;
  41.     }
  42.     ~NizLista()
  43.     {
  44.         delete [] pok;
  45.     }
  46.     int brojElemenata() const
  47.     {
  48.         return vel;
  49.     }
  50.     tip& trenutni()
  51.     {
  52.         return *tren;
  53.     }
  54.     bool prethodni()
  55.     {
  56.         if(tren==pok) return false;
  57.         tren--;
  58.         return true;
  59.     }
  60.     bool sljedeci()
  61.     {
  62.         if(tren==&pok[vel-1]) return false;
  63.         tren++;
  64.         return true;
  65.     }
  66.     void pocetak()
  67.     {
  68.         tren=&pok[0];
  69.     }
  70.     tip& DajPocetak()
  71.     {
  72.         return pok;
  73.     }
  74.     tip& DajKraj()
  75.     {
  76.         return pok[vel-1];
  77.     }
  78.     void kraj()
  79.     {
  80.         tren=&pok[vel-1];
  81.     }
  82.     void obrisi()
  83.     {
  84.         if(vel==1)
  85.         {
  86.             vel=0;
  87.             delete [] pok;
  88.             pok==nullptr;
  89.             tren=nullptr;
  90.         }
  91.         else
  92.         {
  93.             tip* pom=new tip[vel-1];
  94.             bool test(false), jelzadnji(tren==&pok[vel-1]);
  95.             for(int i(0); i<vel; i++)
  96.             {
  97.                 if((pok[i]==this->trenutni() && !(test)))
  98.                 {
  99.                     if(jelzadnji)
  100.                     {
  101.                         tren=&pom[i-1];
  102.                         continue;
  103.                     }
  104.                     test=true;
  105.                     tren=&pom[i];
  106.                     pom[i]=pok[i+1];
  107.                     continue;
  108.                 }
  109.                 if(!test)pom[i]=pok[i];
  110.                 else pom[i]=pok[i+1];
  111.             }
  112.             delete[] pok;
  113.             pok=pom;
  114.             vel--;
  115.         }
  116.  
  117.     }
  118.     void dodajIza(const tip& el)
  119.     {
  120.         if(vel==0)
  121.         {
  122.             pok=new tip (el);
  123.             tren=pok;
  124.             vel++;
  125.         }
  126.         else
  127.         {
  128.             tip* pom=new tip[vel+1];
  129.             bool test(false);
  130.             for(int i(0); i<vel+1; i++)
  131.             {
  132.                 if(tren==&pok[i])
  133.                 {
  134.                     test=true;
  135.                     tren=&pom[i];
  136.                     pom[i]=pok[i];
  137.                     pom[i+1]=el;
  138.                     i++;
  139.                     continue;
  140.                 }
  141.                 if(!test) pom[i]=pok[i];
  142.                 else pom[i]=pok[i-1];
  143.             }
  144.             delete[] pok;
  145.             pok=pom;
  146.             vel++;
  147.         }
  148.     }
  149.     void dodajIspred(const tip& el)
  150.     {
  151.         if(vel==0)
  152.         {
  153.             pok=new tip (el);
  154.             tren=pok;
  155.             vel++;
  156.         }
  157.         else
  158.         {
  159.             tip* pom=new tip[vel+1];
  160.             bool test1(false), test2(false);
  161.             for(int i(0); i<vel+1; i++)
  162.             {
  163.                 if(tren==&pok[i+1])
  164.                 {
  165.                     test1=true;
  166.                     tren=&pom[i+2];
  167.                     pom[i+1]=el;
  168.                     pom[i]=pok[i];
  169.                     i++;
  170.                     continue;
  171.                 }
  172.                 if(tren==&pok[i])
  173.                 {
  174.                     test2=true;
  175.                     tren=&pom[i+1];
  176.                     pom[i]=el;
  177.                     pom[i+1]=pok[i];
  178.                     break;
  179.                 }
  180.                 if(!test1) pom[i]=pok[i];
  181.                 else pom[i]=pok[i-1];
  182.             }
  183.             delete[] pok;
  184.             pok=pom;
  185.             vel++;
  186.         }
  187.     }
  188.     tip &operator[](int n)
  189.     {
  190.         if(n<0 || n>vel) throw "nesta";
  191.         return pok[n];
  192.     }
  193.     tip operator[](int n) const
  194.     {
  195.         if(n<0 || n>vel) throw "nesta";
  196.         return pok[n];
  197.     }
  198. };
  199. template<typename tip> class JednostrukaLista: public Lista<tip>
  200. {
  201.     int vel;
  202.     Cvor<tip>* p;
  203.     Cvor<tip>* t;
  204.     Cvor<tip>* k;
  205.  
  206. public:
  207.     JednostrukaLista(): vel(0), p(nullptr), t(nullptr) {}
  208.     ~JednostrukaLista()
  209.     {
  210.         for(int i(0); i<vel; i++)
  211.         {
  212.             delete p;
  213.         }
  214.         p=nullptr;
  215.         t=nullptr;
  216.         vel=0;
  217.     }
  218.     int brojElemenata () const
  219.     {
  220.         return vel;
  221.     }
  222.     tip& trenutni()
  223.     {
  224.         return t->element;
  225.     }
  226.     bool prethodni()
  227.     {
  228.         if(p==t) return false;
  229.         int br;
  230.         Cvor<tip>* pom(p);
  231.         for(br=0; br<t-p-1; br++)
  232.         {
  233.             pom=pom->pok;
  234.         }
  235.         t=pom;
  236.     }
  237.     bool sljedeci()
  238.     {
  239.         if(t==k) return false;
  240.         t=t->pok;
  241.         return true;
  242.     }
  243.     void pocetak()
  244.     {
  245.         t=p;
  246.     }
  247.     void kraj()
  248.     {
  249.         t=k;
  250.     }
  251.     void obrisi()
  252.     {
  253.         if(vel==1)
  254.         {
  255.             delete t;
  256.         }
  257.         else
  258.         {
  259.             if(t!=p)
  260.             {
  261.                 Cvor<tip>* pom(p);
  262.                 while(pom->pok!=t)
  263.             {
  264.                 pom=pom->pok;
  265.             }
  266.             pom->pok=t->pok;
  267.             delete t;
  268.             t=pom;
  269.             }
  270.             else
  271.             {
  272.                 k->pok=t->pok;
  273.                 p=t->pok;
  274.                 delete t;
  275.                 t=p;
  276.             }
  277.         }
  278.         vel--;
  279.     }
  280.     void dodajIspred(const tip& el)
  281.     {
  282.         if(vel==0)
  283.         {
  284.             p=new Cvor<tip>;
  285.             p->element=el;
  286.             t=p;
  287.             k=p;
  288.  
  289.         }
  290.         else
  291.         {
  292.             Cvor<tip>* pocetni;
  293.             if(vel==1)
  294.             {
  295.                 pocetni=new Cvor<tip>;
  296.                 pocetni->pok=p;
  297.                 pocetni->element=el;
  298.                 p=pocetni;
  299.                 k->pok=p;
  300.             }
  301.             else
  302.             {
  303.                 pocetni=p;
  304.                 while(p->pok!=t)
  305.                 {
  306.                     p=p->pok;
  307.                 }
  308.                 p->pok=new Cvor<tip>;
  309.                 p->element=el;
  310.                 p->pok->pok=t;
  311.                 p=pocetni;
  312.  
  313.             }
  314.         }
  315.         vel++;
  316.     }
  317.     void dodajIza(const tip& el)
  318.     {
  319.         if(vel==0)
  320.         {
  321.             p=new Cvor<tip>;
  322.             p->element=el;
  323.             t=p;
  324.             k=p;
  325.         }
  326.         else
  327.         {
  328.             Cvor<tip>* trenutak=new Cvor<tip>;
  329.             trenutak->element=el;
  330.             trenutak->pok=t->pok;
  331.             t->pok=trenutak;
  332.             if(k==p || k==t)
  333.             {
  334.                 k=t->pok;
  335.             }
  336.         }
  337.         vel++;
  338.     }
  339.     tip &operator[](int el)
  340.     {
  341.         Cvor<tip>* kretanje(p);
  342.         for(int i(0); i<el; i++)
  343.         {
  344.             kretanje=kretanje->pok;
  345.         }
  346.         return kretanje->element;
  347.     }
  348.     tip operator[](int el) const
  349.     {
  350.         Cvor<tip>* kretanje(p);
  351.         for(int i(0); i<el; i++)
  352.         {
  353.             kretanje=kretanje->pok;
  354.         }
  355.         return kretanje->element;
  356.     }
  357. };
  358. int main()
  359. {
  360.    
  361. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement