Posted By

Bozidar on 11/11/12


Tagged

header implementacija strukturepodataka


Versions (?)

Implementacija_liste_pomocu_pokazivaca.h


 / Published in: C++
 

Datoteka zaglavlja u kojoj se nalazi moja implementacija liste pomoću pokazivača. Datoteka sadži funkcije: InitL(L), 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), brunesenihel(L), brisinaziv(L), brisivrstu(L) i cijenaupolje(L).

  1. #include <iostream>
  2. struct lista{
  3. int sifra, dan, mjesec, godina;
  4. float cijena;
  5. char vrsta[20], naziv[20];
  6. lista *sljedeci;
  7. };
  8. typedef struct lista *element;
  9. typedef struct lista list;
  10.  
  11.  
  12. void InitL(list *glava){
  13. glava->sljedeci = NULL;
  14. }
  15.  
  16. element FirstL(list *glava){
  17. list *sljedeci;
  18. sljedeci = glava->sljedeci;
  19. return sljedeci;
  20. }
  21.  
  22. element EndL(list *glava){
  23. list *zadnji;
  24. zadnji = glava;
  25. while(zadnji->sljedeci)
  26. zadnji = zadnji->sljedeci;
  27. return zadnji;
  28. }
  29.  
  30. element NextL(element p, list *glava){
  31. if (p->sljedeci == NULL) {
  32. printf("Element ne postoji!");
  33. return 0;
  34. }
  35. else {
  36. list *sljedbenik;
  37. sljedbenik=p->sljedeci;
  38. return sljedbenik;
  39. }
  40. }
  41.  
  42. element PreviousL(element p, list *glava){
  43. list *prethodni;
  44. prethodni=glava;
  45. while ((prethodni->sljedeci != NULL) && (prethodni->sljedeci != p))
  46. prethodni=prethodni->sljedeci;
  47. if (prethodni->sljedeci != NULL)
  48. return prethodni;
  49. else {
  50. printf("Element ne postoji!");
  51. return 0;
  52. }
  53. }
  54.  
  55. element LocateL(int x, list *glava){
  56. list *tekuci = glava;
  57. while (tekuci != NULL && tekuci->sifra != x)
  58. tekuci=tekuci->sljedeci;
  59. if(tekuci==NULL)
  60. return NULL;
  61. else
  62. return tekuci;
  63. }
  64. element LocateL_naziv_vrsta(char unos[20], list *glava, bool naziv_ili_vrsta){ //trazim prema nazivu i vrti kako bi mogao pronedeno obrisat
  65. list *tekuci = glava;
  66. if(naziv_ili_vrsta==true){
  67. while (tekuci != NULL && strcmp(tekuci->naziv,unos))
  68. tekuci=tekuci->sljedeci;
  69. }
  70. else{
  71. while (tekuci != NULL && strcmp(tekuci->vrsta,unos))
  72. tekuci=tekuci->sljedeci;
  73. }
  74. if(tekuci==NULL){
  75. return NULL;}
  76. else
  77. return tekuci;
  78. }
  79.  
  80. void InsertL(int dan, int mjesec, int godina, int sifra, char vrsta[20],char naziv[20],float cijena, element pozicija, list *glava){
  81. list *prethodni = glava;
  82.  
  83. while(prethodni->sljedeci!=NULL){
  84. if(pozicija==prethodni->sljedeci)
  85. break;
  86. prethodni = prethodni->sljedeci;
  87. }
  88. if(prethodni->sljedeci==NULL){
  89. list *sljedeci = prethodni->sljedeci;
  90. list *novi = new list;
  91. novi->sljedeci = sljedeci;
  92. prethodni->sljedeci = novi;
  93. novi->sifra = sifra;
  94. strcpy(novi->vrsta,vrsta);
  95. strcpy(novi->naziv,naziv);
  96. novi->cijena = cijena;
  97. novi->dan = dan;
  98. novi->mjesec = mjesec;
  99. novi->godina = godina;
  100. }
  101. else{
  102. list *sljedeci = prethodni->sljedeci;
  103. list *novi = new list;
  104. novi->sljedeci = sljedeci;
  105. prethodni->sljedeci = novi;
  106. novi->sifra = sifra;
  107. strcpy(novi->vrsta,vrsta);
  108. strcpy(novi->naziv,naziv);
  109. novi->cijena = cijena;
  110. novi->dan = dan;
  111. novi->mjesec = mjesec;
  112. novi->godina = godina;
  113. }
  114. }
  115.  
  116. void DeleteL(element p, list *glava){
  117. element l;
  118. p=PreviousL(p,glava);
  119. if (p->sljedeci != NULL) {
  120. l=p->sljedeci;
  121. p->sljedeci=p->sljedeci->sljedeci;
  122. delete l;
  123. }
  124. }
  125.  
  126. void RetriveL(element p, list *glava){
  127. list *tekuci = glava;
  128. while(tekuci->sljedeci!=NULL){
  129. tekuci = tekuci->sljedeci;
  130. if(tekuci == p)
  131. break;
  132. }
  133. cout<<"Sifra: "<<tekuci->sifra<<endl;
  134. cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl;
  135. cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl;
  136. cout<<"Cijena: "<<tekuci->cijena<<endl;
  137. cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl;
  138. cout<<endl;
  139.  
  140. }
  141. void RetriveL_Naziv(element p, list *glava, bool naziv_vrsta){
  142. list *tekuci = glava;
  143. while(tekuci->sljedeci!=NULL){
  144. tekuci = tekuci->sljedeci;
  145. if(tekuci == p)
  146. break;
  147. }
  148. if(naziv_vrsta==true)
  149. cout<<tekuci->sifra<<"\t"<<tekuci->naziv<<endl;
  150. else cout<<tekuci->sifra<<"\t"<<tekuci->vrsta<<endl;
  151. }
  152.  
  153. void DeleteAll(list *glava){
  154. element l;
  155. while(glava->sljedeci){
  156. l = glava->sljedeci;
  157. glava->sljedeci = glava->sljedeci->sljedeci;
  158. delete l;
  159. }
  160. }
  161.  
  162. int br_unesenih_el(list *glava){
  163. list *tekuci = glava;
  164. int n = 0;
  165. while(tekuci->sljedeci!=NULL){
  166. n++;
  167. tekuci = tekuci->sljedeci;
  168. }
  169. return n;
  170. }
  171.  
  172. void od_zadnje_sifre(list *glava, int *polje, int br_unesenih_el){
  173. list *tekuci = glava->sljedeci;
  174. for(int i=0;i < br_unesenih_el; i++)
  175. polje[i] = 0;
  176. int i = 0;
  177. while(tekuci!=NULL){
  178. if(tekuci->sifra > 0){
  179. polje[i] = tekuci->sifra;
  180. i++;
  181. }
  182. tekuci = tekuci ->sljedeci;
  183. }
  184. bool zamjena = true;
  185. for(int i = br_unesenih_el-1; i>0 && zamjena; i--){
  186. zamjena = false;
  187. for(int j=0; j<i; j++)
  188. if(polje[j] > polje[j+1]){
  189. int pom = polje[j];
  190. polje[j]=polje[j+1];
  191. polje[j+1]=pom;
  192. zamjena = true;
  193. }
  194. }
  195. return;
  196. }
  197. void RetriveL_datum(list *glava){
  198. list *tekuci = glava;
  199. int n = 0;
  200. while(tekuci!=NULL){
  201. if(tekuci->godina > 2012){
  202. cout<<"Sifra: "<<tekuci->sifra<<endl;
  203. cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl;
  204. cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl;
  205. cout<<"Cijena: "<<tekuci->cijena<<endl;
  206. cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl;
  207. cout<<endl;
  208. n++;
  209. }
  210. if(tekuci->godina == 2012){
  211. if(tekuci->mjesec > 9){
  212. cout<<"Sifra: "<<tekuci->sifra<<endl;
  213. cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl;
  214. cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl;
  215. cout<<"Cijena: "<<tekuci->cijena<<endl;
  216. cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl;
  217. cout<<endl;
  218. n++;
  219. }
  220. }
  221.  
  222. if(tekuci->godina == 2012){
  223. if(tekuci->mjesec==9){
  224. if(tekuci->dan>23){
  225. cout<<"Sifra: "<<tekuci->sifra<<endl;
  226. cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl;
  227. cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl;
  228. cout<<"Cijena: "<<tekuci->cijena<<endl;
  229. cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl;
  230. cout<<endl;
  231. n++;
  232. }}}
  233. tekuci = tekuci->sljedeci;
  234. }
  235. cout<<"\nUkupan broj zivotinja dostavljenih nakon 23. 9. 2012. je: "<<n<<endl;
  236. }
  237. int brisi_naziv(list *glava, bool naziv_ili_vrsta, int izlaz){
  238. char naziv[20];
  239. naziv_ili_vrsta = true;
  240. do{
  241. cout<<"Naziv: "; unos(naziv);
  242. if(LocateL_naziv_vrsta(naziv, glava,naziv_ili_vrsta)==0){
  243. cout<<"Zivotinja sa tim nazivom ne postoji!\n";
  244. cout<<"1. Ponovna pretraga\n";
  245. cout<<"2. Izlaz\n";
  246. cout<<"Vas odabir: "; cin>>izlaz;}
  247. }while(LocateL_naziv_vrsta(naziv, glava, naziv_ili_vrsta)==0 && izlaz!=2);
  248. if(LocateL_naziv_vrsta(naziv, glava, naziv_ili_vrsta)!=0){ //ako u do-while stsnem 2 za izlaz a ne postoji ziv izbacit ce error..i zato sam stavio jos taj if
  249. DeleteL(LocateL_naziv_vrsta(naziv, glava, naziv_ili_vrsta), glava); //LocateL(1. lociram poziciju trazenog elem, 2. i jos samo proslijedim glavu liste)
  250. cout<<"Obrisano!\n";
  251. return 1;
  252. }
  253. else return 0;
  254.  
  255. }
  256. int brisi_vrstu(list *glava, bool naziv_ili_vrsta, int izlaz){
  257. char vrsta[20];
  258. naziv_ili_vrsta = false;
  259. do{
  260. cout<<"Vrsta: "; unos(vrsta);
  261. if(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)==0){
  262. cout<<"Zivotinja s tom vrstom ne postoji!\n";
  263. cout<<"1. Ponovna pretraga\n";
  264. cout<<"2. Izlaz\n";
  265. cout<<"Vas odabir: "; cin>>izlaz;
  266. }
  267. }while(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)==0 && izlaz!=2);
  268. if(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)!=0){ //ako u do-while stsnem 2 za izlaz a ne postoji trazena zivotinja izbacit ce error..i zato sam stavio jos taj if
  269. int broj = br_unesenih_el(glava);
  270. do{
  271. DeleteL(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta), glava); //LocateL(1. lociram poziciju trazenog elem, 2. i jos samo proslijedim glavu liste)
  272. }while(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)!=0); //do-while koristim zato sto zelim proc kroz listu vise puta(ako ima vise istih vrsta) i obrisat sve elemente s tom vrstom
  273. cout<<"Obrisano!\n";
  274. return 1;
  275. }
  276. else return 0;
  277. }
  278.  
  279. void cijena_u_polje(list *glava, float *polje_cijena, float *polje_sifra,char nazivi[1000][20], int br_unesenih_el){
  280. list *tekuci = glava->sljedeci;
  281. list *tekuci2 = glava->sljedeci;
  282.  
  283. for(int i = 0; i<br_unesenih_el; i++){
  284. polje_cijena[i] = 0;
  285. polje_sifra[i] = 0;
  286. }
  287. int i = 0;
  288. while(tekuci!=NULL){
  289. if(tekuci->cijena > 0){
  290. polje_cijena[i] = tekuci->cijena;
  291. polje_sifra[i] = tekuci->sifra;
  292. i++;
  293. }
  294. tekuci = tekuci ->sljedeci;
  295. }
  296.  
  297. for(int i=0; i<br_unesenih_el;i++){
  298. for(int j=0; j<(strlen(tekuci2->naziv)); j++){
  299. nazivi[i][j] = tekuci2->naziv[j];
  300. }
  301. tekuci2 = tekuci2->sljedeci;
  302. }
  303. //sort
  304. char temp[20];
  305. float pomocna = 0;
  306. float pomocna2 = 0;
  307. char hold[20];
  308. int pass;
  309. for ( pass = 1; pass < br_unesenih_el; pass++ ){
  310. for ( i = 0; i < br_unesenih_el - 1; i++ ){
  311. if (strncmp(nazivi[i],nazivi[i+1],br_unesenih_el) > 0){
  312. strcpy(hold, nazivi[i]);
  313. strcpy(nazivi[i], nazivi[i+1]);
  314. strcpy(nazivi[i+1], hold);
  315.  
  316. pomocna = polje_cijena[i];
  317. polje_cijena[i]=polje_cijena[i+1];
  318. polje_cijena[i+1]=pomocna;
  319.  
  320. pomocna2 = polje_sifra[i];
  321. polje_sifra[i]=polje_sifra[i+1];
  322. polje_sifra[i+1]=pomocna2;
  323. }
  324. }
  325. }
  326. }
  327.  
  328. element LocateL_cijena(float x, float y, list *glava){
  329. list *tekuci = glava;
  330.  
  331.  
  332. while (tekuci != NULL){
  333. if(tekuci->cijena == x && tekuci->sifra ==y)
  334. return tekuci;
  335. tekuci=tekuci->sljedeci;}
  336.  
  337. if(tekuci==NULL)
  338. return NULL;
  339. else
  340. return tekuci;
  341. }

Report this snippet  

You need to login to post a comment.