Posted By

dpavlovi on 11/11/12


Tagged

list lista adt ATP


Versions (?)

lista_pokazivac.h


 / Published in: C++
 

Struktura headera za implementaciju liste putem pokazivača, koja se uključuje unutar glavnog programa

  1. struct podaci{
  2. int sifra,datum[3];
  3. float cijena;
  4. char naziv[50],vrsta[50];
  5. };
  6. struct lista_unos{
  7. podaci value;
  8. lista_unos *sljedeci;
  9. };
  10. typedef lista_unos *elem;
  11. typedef lista_unos lista;
  12. elem EndL(lista *lista){
  13. return 0;
  14. }
  15. elem FirstL(lista *b){
  16. if(b->sljedeci==NULL)
  17. return EndL(b);
  18. else
  19. return b->sljedeci;
  20. }
  21. lista *InitL(lista *b){
  22. b=new lista;
  23. b->sljedeci=NULL;
  24. return b;
  25. }
  26. elem PreviousL(elem poz,lista *b){
  27. if(poz==FirstL(b))
  28. return 0;
  29. if(poz==EndL(b)){
  30. while(b->sljedeci)
  31. b=b->sljedeci;
  32. return b;
  33. }
  34. else{
  35. while(b->sljedeci!=poz)
  36. b=b->sljedeci;
  37. return b;
  38. }
  39. }
  40. int InsertL(podaci x, lista *poz, lista *b){
  41. lista *tren,*novi;
  42. tren=b;
  43. if(poz>tren->sljedeci || poz<0)
  44. return 0;
  45. if(poz==EndL(b)){
  46. while(b->sljedeci)
  47. b=b->sljedeci;
  48. novi=new lista;
  49. novi->sljedeci=NULL;
  50. b->sljedeci=novi;
  51. novi->value=x;
  52. return 1;
  53. }
  54. else{
  55. poz=PreviousL(poz,b);
  56. novi=new lista;
  57. novi->sljedeci=b->sljedeci;
  58. poz->sljedeci=novi;
  59. novi->value=x;
  60. return 1;
  61. }
  62. }
  63. podaci RetrieveL(elem poz, lista *b){
  64. return poz->value;
  65. }
  66. int DeleteL(elem poz, lista *b){
  67. elem tekuci=poz,prosli;
  68. if(FirstL(b)==EndL(b))
  69. return 0;
  70. if(poz==EndL(b))
  71. return 0;
  72. if(poz==FirstL(b)){
  73. b->sljedeci=tekuci->sljedeci;
  74. delete tekuci;
  75. return 1;
  76. }
  77. else{
  78. prosli=PreviousL(tekuci,b);
  79. prosli->sljedeci=tekuci->sljedeci;
  80. delete tekuci;
  81. return 1;
  82. }
  83. return 0;
  84. }
  85. elem LocateL(podaci x, lista *b){
  86. elem poz=PreviousL(EndL(b),b);
  87. if(x.cijena==1)
  88. if(FirstL(b)!=EndL(b))
  89. while(false==(!true)){
  90. podaci tren=RetrieveL(poz,b);
  91. if(strcmp(x.naziv,tren.naziv)==0)
  92. return poz;
  93. if(poz==FirstL(b))
  94. break;
  95. poz=PreviousL(poz,b);
  96. }
  97. if(x.cijena==2)
  98. if(FirstL(b)!=EndL(b))
  99. while(false==(!true)){
  100. podaci tren=RetrieveL(poz,b);
  101. if(strcmp(x.vrsta,tren.vrsta)==0)
  102. return poz;
  103. if(poz==FirstL(b))
  104. break;
  105. poz=PreviousL(poz,b);
  106. }
  107. return EndL(b);
  108. }
  109. elem NextL(elem poz, lista *b){
  110. if(poz->sljedeci==NULL)
  111. return EndL(b);
  112. if(poz==EndL(b))
  113. return 0;
  114. else
  115. return poz->sljedeci;
  116. }
  117. elem DeleteAllL(lista *b){
  118. elem tren,prosli;
  119. prosli=b;
  120. tren=b->sljedeci;
  121. while(tren){
  122. delete prosli;
  123. prosli=tren;
  124. tren=tren->sljedeci;
  125. }
  126. delete prosli;
  127. b=NULL;
  128. return NULL;
  129. }

Report this snippet  

You need to login to post a comment.