SP - Zadatak 1 - ATP Liste - Lista pokazivaci


/ Published in: C++
Save to your folder(s)

Datoteka zaglavalja
lista pokazivaci


Copy this code and paste it in your HTML
  1. #ifndef LISTA_POK_H
  2. #define LISTA_POK_H
  3.  
  4. #include <iostream>
  5. #include <cstring> // memcpy()
  6. using namespace std;
  7.  
  8. #define ERROR_CODE NULL
  9.  
  10. struct tDatum {
  11. short dan, mjesec, godina;
  12. };
  13.  
  14. struct tZiv {
  15. int sifra;
  16. char vrsta[50], naziv[50];
  17. float cijena;
  18. tDatum dat_dostave;
  19. };
  20. struct tEl {
  21. tZiv el;
  22. tEl* slj;
  23. };
  24.  
  25. typedef tEl Lista;
  26. typedef tEl* Element;
  27.  
  28. typedef tZiv Zivotinja;
  29. typedef tDatum Datum;
  30.  
  31. bool operator==(Datum d1, Datum d2) {
  32. if(d1.dan != d2.dan) return false;
  33. if(d1.mjesec != d2.mjesec) return false;
  34. if(d1.godina != d2.godina) return false;
  35. return true;
  36. }
  37.  
  38. bool operator==(Zivotinja z1, Zivotinja z2) {
  39. if(z1.sifra != z2.sifra) return false;
  40. if(z1.cijena != z2.cijena) return false;
  41. if(z1.sifra != z2.sifra) return false;
  42. if(z1.sifra != z2.sifra) return false;
  43. if(!(z1.dat_dostave == z2.dat_dostave) ) return false;
  44. return true;
  45. };
  46.  
  47. ostream& operator<<(ostream& os, Datum d1) {
  48. os << d1.dan << '.' << d1.mjesec << '.' << d1.godina << '.';
  49. return os;
  50. }
  51.  
  52. ostream& operator<<(ostream& os, Zivotinja z1) {
  53. os << "Sifra: " << z1.sifra << endl;
  54. os << "Naziv: " << z1.naziv << endl;
  55. os << "Vrsta: " << z1.vrsta << endl;
  56. os << "Cijena: " << z1.cijena << endl;
  57. os << "Datum dostave: " << z1.dat_dostave << endl;
  58. return os;
  59. }
  60.  
  61. // proto func
  62. Element FirstL(Lista*);
  63. Element EndL(Lista*);
  64.  
  65. Element NextL(Element, Lista*);
  66. Element PreviousL(Element, Lista*);
  67.  
  68. Element LocateL(Zivotinja, Lista*);
  69. bool InsertL(Zivotinja, Element, Lista*);
  70.  
  71. bool DeleteL(Element, Lista*);
  72. Zivotinja RetrieveL(Element, Lista*);
  73.  
  74. void DeleteAllL(Lista*);
  75. void InitL(Lista*);
  76.  
  77. // func
  78. Element FirstL(Lista* L) {
  79. return L;
  80. }
  81.  
  82. Element EndL(Lista* L) {
  83. Element tren = L;
  84. while(tren->slj) tren=tren->slj;
  85. return tren;
  86. }
  87.  
  88. Element NextL(Element p, Lista* L) {
  89. if(p->slj) return p->slj;
  90. return ERROR_CODE;
  91. }
  92.  
  93. Element PreviousL(Element p, Lista* L) {
  94. if(p==FirstL(L) ) return ERROR_CODE;
  95. Element tren=FirstL(L);
  96. while(tren->slj!=p) tren=tren->slj;
  97. return tren;
  98. }
  99.  
  100. Element LocateL(Zivotinja x, Lista* L) {
  101. for(Element tren=L; tren->slj; tren=tren->slj)
  102. if(tren->slj->el == x) return tren;
  103. return EndL(L);
  104. }
  105.  
  106. bool InsertL(Zivotinja x, Element p, Lista* L) { // ***
  107. if(!L) return 0;
  108. Element novi = new tEl;
  109. memcpy(novi, &x, sizeof(Zivotinja) );
  110. novi->slj = p->slj;
  111. p->slj = novi;
  112. return 1;
  113. }
  114.  
  115. bool DeleteL(Element p, Lista* L) {
  116. if(!L) return 0;
  117. Element tren = p->slj;
  118. p->slj = tren->slj;
  119. delete tren;
  120. return 1;
  121. }
  122. Zivotinja RetrieveL(Element p, Lista* L) {
  123. return p->slj->el;
  124. }
  125.  
  126. void DeleteAllL(Lista* L) {
  127. if(!L) return;
  128. if(!L->slj) return;
  129. Element prev = L->slj;
  130. for(Element tren=prev->slj; tren!=NULL; tren=(prev=tren)->slj)
  131. delete prev;
  132. delete prev;
  133. L->slj = NULL;
  134. }
  135. void InitL(Lista* L) {
  136. L->slj = NULL;
  137. }
  138.  
  139. #endif // LISTA_POK_H
  140.  
  141. // hackerma3x (2012)

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.