Posted By

m_kovacek on 11/10/12


Tagged

list lista adt Strukture podataka pokazivaci ATP


Versions (?)

Implementacija liste pomocu pokazivaca


 / Published in: C++
 

Implementacija liste pomocu pokazivaca sadrzi funkcije poput: FirstL(L), EndL(L),NextL(p,L),PreviousL(p,L), LocateL(x,L), InsertL(x,p,L), DeleteL(p,L), RetreiveL(p,L), DeleteAllL(L) i InitL(L)

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct zivotinje {
  5. int sifra;
  6. char vrsta[30],naziv[30];
  7. float cijena;
  8. int datum;
  9. };
  10.  
  11. struct li{
  12. zivotinje elem;
  13. li *sljedeci;
  14. };
  15. typedef li *element;
  16. typedef li lista;
  17.  
  18.  
  19. element EndL(lista *l)
  20. { element posljednji=l;
  21. while(posljednji->sljedeci!=NULL)
  22. posljednji=posljednji->sljedeci;
  23. return posljednji;
  24. }
  25.  
  26. element FirstL (lista *l)
  27. {
  28. if ((*l).sljedeci==0)
  29. return EndL(l);
  30. else
  31. return l->sljedeci;
  32. }
  33.  
  34.  
  35. element NextL (element p, lista *l)
  36. { if(p->sljedeci==NULL)
  37. return EndL(l);
  38. else
  39. return p->sljedeci;
  40. }
  41. element PreviousL (element p, lista *l)
  42. {
  43. lista *tekuci=l->sljedeci;
  44. while(p!=tekuci->sljedeci && tekuci->sljedeci!=NULL)
  45. tekuci=tekuci->sljedeci;
  46. return tekuci;
  47. }
  48.  
  49. element LocateL (zivotinje x, lista *l)
  50. {
  51. element tekuci=l;
  52.  
  53. if(tekuci->sljedeci==0)
  54. {
  55. cout<<"Lista je prazna"<<endl;
  56. exit(0);
  57. }
  58.  
  59.  
  60. else
  61. {
  62. while(tekuci!=EndL(l))
  63. {
  64. if(strcmp(x.naziv,tekuci->elem.naziv)==0)
  65. return tekuci;
  66. tekuci=tekuci->sljedeci;
  67. }
  68. }
  69. }
  70. element Locatel (zivotinje x, lista *l)
  71. {
  72. element tekuci=l;
  73.  
  74. if(tekuci->sljedeci==0)
  75. {
  76. cout<<"Lista je prazna"<<endl;
  77. exit(0);
  78. }
  79.  
  80. else
  81. {
  82. while(tekuci!=EndL(l))
  83. {
  84. if(strcmp(x.vrsta,tekuci->elem.vrsta)==0)
  85. return tekuci;
  86.  
  87. tekuci=tekuci->sljedeci;
  88. }
  89. }
  90.  
  91. }
  92. int InsertL (zivotinje x, lista *p, lista *l){
  93. lista *tekuci=p;
  94. lista *novi=new lista;
  95. if(p==EndL(l)){
  96. novi->sljedeci=NULL;
  97. tekuci->sljedeci=novi;
  98. tekuci->elem=x;
  99. }
  100. else if (p==FirstL(l)){
  101. novi->sljedeci=tekuci;
  102. l->sljedeci=novi;
  103. novi->elem=x;
  104. }
  105. else {
  106. lista *prethodni=PreviousL(p,l);
  107. novi->sljedeci=tekuci;
  108. prethodni->sljedeci=novi;
  109. novi->elem=x;
  110. }
  111. if(tekuci->elem.sifra==x.sifra)
  112. return 1;
  113. else
  114. return 0;
  115. }
  116. int DeleteL ( element p, lista *l)
  117. { element prethodni, tekuci;
  118. tekuci=p;
  119. if (p==FirstL(l)){
  120. l->sljedeci=tekuci->sljedeci;
  121. delete tekuci;
  122. return 1;
  123. }
  124. else{
  125. prethodni= PreviousL(tekuci,l);
  126. prethodni->sljedeci=tekuci->sljedeci;
  127. delete tekuci;
  128. return 1;
  129. }
  130. return 0;
  131. }
  132.  
  133. zivotinje RetrieveL(element p, lista*l)
  134. {
  135. return p->elem;
  136. }
  137.  
  138. void DeleteallL(lista *l)
  139. { lista *obrisi= l->sljedeci;
  140. if(obrisi==0) return;
  141. lista *s=obrisi->sljedeci;
  142. while(s)
  143. { delete obrisi;
  144. obrisi=s;
  145. s=obrisi->sljedeci;
  146. }
  147. delete obrisi;
  148. }
  149. lista *InitL (lista *l){
  150. l=new lista;
  151. lista *zadnji=new lista;
  152. l->sljedeci=zadnji;
  153. zadnji->sljedeci=NULL;
  154. return l;
  155. }

Report this snippet  

You need to login to post a comment.