lista_pokazivac.h


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

implementacija liste pomoću pokazivaća


Copy this code and paste it in your HTML
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct ljubimci_pok{
  6. int sifra, cijena;
  7. string naziv, vrsta, datum_dostave;
  8.  
  9. ljubimci_pok *slijedeci;
  10. };
  11.  
  12. int unos(ljubimci_pok *glv, //potrebna glava liste
  13. int zifra, int cijena,
  14. string datum_dostave,
  15. string naziv,
  16. string vrsta)
  17. {
  18.  
  19. ljubimci_pok *novi=new ljubimci_pok;
  20.  
  21. novi->cijena=cijena; //pridru�¾ujemo unesene podatke podatkovnom dijlu ��vora
  22. novi->sifra = zifra;
  23. novi->vrsta=vrsta;
  24. novi->naziv=naziv;
  25. novi->datum_dostave=datum_dostave;
  26.  
  27. if(glv->slijedeci==NULL) //ako je lista prazna dodaj novi zapis na prvo mjesto
  28. {
  29. glv->slijedeci=novi;
  30. novi->slijedeci=NULL;
  31. }
  32.  
  33. else
  34. { //ako lista nije prazna dodaj novi zapis na pocetak liste
  35. novi->slijedeci=glv->slijedeci;
  36. glv->slijedeci=novi;
  37. }
  38.  
  39. ljubimci_pok *trenutni=glv->slijedeci;
  40. while(trenutni->slijedeci!=NULL && trenutni->sifra!=zifra)
  41. trenutni=trenutni->slijedeci;
  42.  
  43. if (trenutni->slijedeci==NULL && trenutni->sifra!=zifra) //ako ova funkcija ne mo�¾e na��i zapis onda stvarno ne znam tko mo�¾e
  44. {
  45. return 0;
  46. }
  47.  
  48. else
  49. {
  50. return 1;
  51. }
  52. }
  53.  
  54. void ispis(ljubimci_pok *glv)
  55. {
  56. if(glv->slijedeci == NULL) //ako je lista prazna
  57. {
  58. cout << "\nNema ljubimaca u listi, prvo dodaj neke.\n";
  59. return;
  60. }
  61.  
  62. ljubimci_pok *trenutni=glv->slijedeci;
  63.  
  64. cout << "\nUneseni su sljedeci ljubimci:\n\n";
  65.  
  66. while(trenutni!=NULL){
  67. cout << "\nSifra: " << trenutni->sifra;
  68. cout << "\nVrsta: " << trenutni->vrsta;
  69. cout << "\nNaziv: " << trenutni->naziv;
  70. cout << "\nCijena: " << trenutni->cijena;
  71. cout << "\nDatum dostave: " << trenutni->datum_dostave << "\n-----------------------\n\n";
  72. trenutni=trenutni->slijedeci; //pomicanje kroz listu
  73. }
  74. }
  75.  
  76. void trazi(ljubimci_pok *glv)
  77. {
  78. int dan, mjesec, godina, brojalo=0;
  79. string temp;
  80.  
  81. ljubimci_pok *trenutni=glv->slijedeci;
  82.  
  83. if(trenutni == NULL) //ako je lista prazna
  84. {
  85. cout << "\nNema ljubimaca listi, prvo dodaj neke.\n";
  86. return;
  87. }
  88.  
  89. while(trenutni!=NULL)
  90. {
  91. temp=trenutni->datum_dostave.substr(0,2);
  92. dan=atoi(temp.c_str());
  93. temp=trenutni->datum_dostave.substr(3,2);
  94. mjesec=atoi(temp.c_str());
  95. temp=trenutni->datum_dostave.substr(6,4);
  96. godina=atoi(temp.c_str());
  97.  
  98. if((dan>=23 && mjesec>=9 && godina>=2012) || (mjesec>9 && godina>=2012)) //provjera da li je ljubimac dostavljen nakon 23.rujna 2012
  99. {
  100. cout << "\nSifra: " << trenutni->sifra;
  101. cout << "\nVrsta: " << trenutni->vrsta;
  102. cout << "\nNaziv: " << trenutni->naziv;
  103. cout << "\nCijena: " << trenutni->cijena;
  104. cout << "\nDatum dostave: " << trenutni->datum_dostave << "\n------------------------\n\n";
  105. brojalo++;
  106. }
  107. trenutni=trenutni->slijedeci;
  108. }
  109.  
  110. cout << "Postoji u bazi podataka " << brojalo << " zivotinja koje su dostavljene nakon 23.rujna 2012.\n\n";
  111. }
  112.  
  113. int brisi_naziv(ljubimci_pok *glv, string ime)
  114. {
  115. ljubimci_pok *prethodni=glv;
  116. ljubimci_pok *trenutni=glv->slijedeci;
  117. int brojalo=0;
  118.  
  119. while (trenutni->slijedeci!=NULL)
  120. {
  121. if(trenutni->naziv==ime)
  122. {
  123. prethodni->slijedeci=trenutni->slijedeci;
  124. free(trenutni);
  125. brojalo++;
  126. break;
  127. }
  128. prethodni=trenutni;
  129. trenutni=trenutni->slijedeci;
  130. }
  131.  
  132. if (brojalo==0)
  133. {
  134. cout << "\nTrazeni zapis nije nadjen u listi.\n";
  135. return 3; //nema smisla traziti da li je "brisanje" uspjesno ako nista ne brise (dio ispod return 1 ili 0)
  136. }
  137.  
  138. trenutni=glv->slijedeci;
  139. while(trenutni->slijedeci!=NULL && trenutni->naziv!=ime)
  140. trenutni=trenutni->slijedeci;
  141.  
  142. if(trenutni->slijedeci==NULL && trenutni->naziv!=ime)
  143. return 1;
  144.  
  145. else
  146. return 0;
  147. }
  148.  
  149. int brisi_vrstu(ljubimci_pok *glv, string ime)
  150. {
  151. ljubimci_pok *prethodni=glv;
  152. ljubimci_pok *trenutni=glv->slijedeci;
  153. int brojalo=0;
  154.  
  155. while (trenutni->slijedeci!=NULL)
  156. {
  157. if(trenutni->vrsta==ime)
  158. {
  159. prethodni->slijedeci=trenutni->slijedeci;
  160. free(trenutni);
  161. brojalo++;
  162. trenutni=glv;
  163. }
  164. prethodni=trenutni;
  165. trenutni=trenutni->slijedeci;
  166. }
  167.  
  168. if (brojalo==0)
  169. {
  170. cout << "\nTrazeni zapis nije nadjen u listi.\n";
  171. return 3; //nema smisla traziti da li je "brisanje" uspjesno ako nista ne brise (dio ispod - return 1 ili 0)
  172. }
  173.  
  174. trenutni=glv->slijedeci;
  175. while(trenutni->slijedeci!=NULL && trenutni->vrsta!=ime)
  176. trenutni=trenutni->slijedeci;
  177.  
  178. if (trenutni->slijedeci==NULL && trenutni->vrsta!=ime)
  179. return 1;
  180. else
  181. return 0;
  182. }
  183.  
  184. int cmp(ljubimci_pok *a, ljubimci_pok *b)
  185. {
  186. return a->cijena - b->cijena;
  187. }
  188.  
  189. ljubimci_pok *m_sort(ljubimci_pok *lista)
  190. {
  191. ljubimci_pok *p, *q, *e, *rep;
  192. int psize, insize, nmerges, qsize, i;
  193.  
  194. insize=1;
  195.  
  196. while(1)
  197. {
  198. p=lista;
  199. lista=NULL;
  200. rep=NULL;
  201.  
  202. nmerges=0;
  203.  
  204. while (p)
  205. {
  206. nmerges++;
  207. q=p;
  208. psize=0;
  209. for (i=0; i<insize; i++)
  210. {
  211. psize++;
  212. q=q->slijedeci;
  213. if (!q) break;
  214. }
  215. qsize=insize;
  216.  
  217. while (psize>0 || (qsize>0 && q))
  218. {
  219. if (psize==0)
  220. {
  221. e=q; q=q->slijedeci; qsize--;
  222. }
  223. else if (qsize==0 || !q)
  224. {
  225. e=p; p=p->slijedeci; psize--;
  226. }
  227. else if (cmp(p,q) <=0)
  228. {
  229. e=p; p=p->slijedeci; psize--;
  230. }
  231. else
  232. {
  233. e=q; q=q->slijedeci; qsize--;
  234. }
  235.  
  236. if (rep)
  237. {
  238. rep->slijedeci=e;
  239. }
  240. else
  241. {
  242. lista=e;
  243. }
  244. rep=e;
  245. }
  246. p=q;
  247. }
  248. rep->slijedeci=NULL;
  249.  
  250. if (nmerges<=1)
  251. {
  252. return lista;
  253. }
  254. insize *= 2;
  255. }
  256. }

Report this snippet


Comments

RSS Icon Subscribe to comments

You need to login to post a comment.