Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdexcept>
  3. using namespace std;
  4.  
  5. template<typename tip> //kopirano iz zadatka pripremne zadaće 2
  6. class Lista
  7. {
  8. public:
  9. Lista() {}
  10. virtual ~Lista() {}
  11. virtual int brojElemenata() const =0;
  12. virtual tip &trenutni()=0;
  13. virtual tip trenutni() const=0;
  14. virtual bool prethodni() =0;
  15. virtual bool sljedeci() =0;
  16. virtual void pocetak() =0;
  17. virtual void kraj() =0;
  18. virtual void obrisi() =0;
  19. virtual void dodajIspred(const tip &el)=0;
  20. virtual void dodajIza(const tip &el)=0;
  21. virtual tip &operator[] (int i)=0;
  22. virtual tip operator[](int i) const=0;
  23.  
  24. };
  25.  
  26. template<typename tip>
  27. class DvostrukaLista : public Lista<tip>{
  28. private:
  29. struct Cvor{
  30. tip element;
  31. Cvor *sljed, *pret;
  32. Cvor(const tip &element, Cvor* pret, Cvor* sljed=0) : element(element), pret(pret), sljed(sljed){
  33. if(pret!=0) pret->sljed=this;
  34. if(sljed!=0) sljed->pret=this;
  35. }
  36. Cvor(Cvor *pret=0, Cvor* sljed=0) : pret(pret), sljed(sljed){
  37. if(pret!=0) pret->sljed=this;
  38. if(sljed!=0) sljed->pret=this;
  39. }
  40.  
  41.  
  42. };
  43. Cvor *poc, *kr, *tren; int lduzina, dduzina;
  44. public:
  45. DvostrukaLista(int velicina=10){ tren = poc = new Cvor(0,0);
  46. poc->sljed=kr=new Cvor(poc,0);
  47. lduzina=dduzina=0;
  48. }
  49. ~DvostrukaLista(){
  50. while (poc!=0) {
  51. tren=poc;
  52. poc=poc->sljedeci;
  53. delete tren;
  54. }
  55. kr=0; tren=0;
  56. }
  57. int brojElemenata() const{ return dduzina+lduzina; }
  58. tip &trenutni(){ if (dduzina!=0) return tren->sljed->element; else throw "Nema trenutnog.";}
  59. tip trenutni() const{ if (dduzina!=0) return tren->sljed->element; else throw "Nema trenutnog.";}
  60. bool prethodni();
  61. bool sljedeci();
  62. void pocetak();
  63. void kraj();
  64. void obrisi();
  65. void dodajIspred(const tip &el);
  66. void dodajIza(const tip &el);
  67. tip &operator[] (int i){
  68. if(i<0 || i>dduzina+lduzina) throw "Neispravan indeks.";
  69. int p(0), ld(lduzina), dd(dduzina);
  70. dduzina=dduzina+lduzina-i;
  71. lduzina=i; int k(0);
  72. if(i<abs(i-ld) && i<(ld+dd)/2){
  73. k=i-ld;
  74. tren=poc;
  75.  
  76. }else if(abs(i-ld) < ld+dd-i) k=i-ld;
  77. else{
  78. k=i-ld-dd-1;
  79. tren=kr;
  80. }
  81. if(k<0)
  82. for(int i(0); i<abs(k); i++) tren=tren->pret;
  83. else
  84. for(int i=0; i<k; i++) tren=tren->sljed;
  85.  
  86. }
  87. tip operator[](int i) const{
  88. {
  89. if(i<0 || i>dduzina+lduzina) throw "Neispravan indeks.";
  90. int p(0), ld(lduzina), dd(dduzina);
  91. dduzina=dduzina+lduzina-i;
  92. lduzina=i; int k(0);
  93. if(i<abs(i-ld) && i<(ld+dd)/2){
  94. k=i-ld;
  95. tren=poc;
  96.  
  97. }else if(abs(i-ld) < ld+dd-i) k=i-ld;
  98. else{
  99. k=i-ld-dd-1;
  100. tren=kr;
  101. }
  102. if(k<0)
  103. for(int i(0); i<abs(k); i++) tren=tren->pret;
  104. else
  105. for(int i=0; i<k; i++) tren=tren->sljed;
  106.  
  107. }
  108. }
  109.  
  110. };
  111. template<typename tip>
  112. bool DvostrukaLista<tip>:: prethodni(){
  113. if(tren!=poc){
  114. tren=tren->pret;
  115. lduzina--;
  116. dduzina++;
  117. }
  118. return false;
  119. }
  120. template<typename tip>
  121. bool DvostrukaLista<tip>:: sljedeci(){
  122. if(tren!=kr){
  123. tren=tren->sljed;
  124. dduzina--;
  125. lduzina++;
  126. }
  127. return false;
  128. }
  129.  
  130. template<typename tip>
  131. void DvostrukaLista<tip> ::kraj(){
  132. tren=kr;
  133. lduzina+=dduzina;
  134. dduzina=0;
  135. }
  136. template<typename tip>
  137. void DvostrukaLista<tip> ::pocetak(){
  138. tren=poc;
  139. dduzina+=lduzina;
  140. lduzina=0;
  141. }
  142. template<typename tip>
  143. void DvostrukaLista<tip> ::obrisi(){
  144. while (poc!=0) {
  145. tren=poc;
  146. poc=poc->sljedeci;
  147. delete tren;
  148. }
  149. kr=0; tren=0;
  150. tren=poc= new Cvor(0,0);
  151. poc->sljed=kr=new Cvor(poc,0);
  152. lduzina=dduzina=0;
  153.  
  154. }
  155.  
  156.  
  157. int main() {
  158. std::cout << "Zadaća 1, Zadatak 1";
  159. return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement