Advertisement
elica123

Untitled

Jul 27th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. /*Podatke o restoranima u jednoj ulici spremamo u vezanu listu. Za svaki restoran
  2. pamtimo naziv (string od najviše 50 znakova), kućni broj (prirodni broj) i zaradu restorana (realni broj). Vezana lista
  3. restorana je uvijek uzlazno sortirana po kućnom broju. Možete pretpostaviti da ne postoje dva restorana s istim kućnim
  4. brojem.
  5. Napišite funkciju rest* prvih_k(rest** first, int k) koja traži prvih k susjednih restorana s ukupnom najvećom
  6. zaradom i izbacuje ih iz vezane liste. Dva restorana su susjedna ako u vezanoj listi ne postoji restoran koji se nalazi
  7. između njih. Funkcija vraća pokazivač na početak vezane liste izbačenih restorana (koja, također, mora biti sortirana
  8. uzlazno po kućnim brojevima). Ukoliko u ulaznoj vezanoj listi ima strogo manje od k elemenata, funkcija ne mijenja
  9. ulaznu vezanu listu i vraća NULL.*/
  10.  
  11. rest* prvihk(rest** first, int k){
  12. rest* pom1 = *first;
  13. rest* pom2;
  14. rest* pom3;
  15. int k_pom = k;
  16. int dobro=0; //provjera ako slucajno nemoramo brisati prvih k;
  17. double najveca_zarada = 0.0, zarada;
  18. for(pom1 = *first; k_pom > 0; pom1=pom1->next){
  19. k_pom--;
  20. najveca_zarada+=pom1->zarada;
  21. }
  22. pom1=*first;
  23. k_pom=k;
  24. while(pom1!=NULL){ //da vidimo kojih k ima najvecu zaradu
  25. zarada=0.0;
  26. k_pom=k;
  27. pom2=pom1;
  28. while(pom2!=NULL && k_pom>0){
  29. zarada+pom2->zarada;
  30. if(k_pom!=0)pom2=pom2->next;
  31. }
  32. /*ovaj if uvjet je tu zato jer ak mi se dogodi slucajno da trebam brisati zadnjih k u listi, onda bez tog uvjeta bi kasnije
  33. pom3 pokazival na sljedbenika od zadnjeg, a to je NULL. ja hocu da mi pokazujem bas na zadnjeg kojeg ocu brisati.*/
  34. if(zarada>najveca_zarada){
  35. dobro=1;
  36. najveca_zarada=zarada;
  37. pom3=pom2; //pom3 pokazuje na zadnji u nizu od k koji trebamo obrisati
  38. }
  39. pom1=pom1->next;
  40. }
  41. //ponovo prolazim po listi da nadjem prethodnika prvog kojeg trebam brisati
  42. if(dobro==1){ //brisemo ili u sredini negdje k elemenata ili na kraju k elemenata
  43. for(pom1=*first; pom1->next!=NULL; pom1=pom1->next){
  44. k_pom=k;
  45. pom2=pom1->next;
  46. while(k_pom>1){ //mora biti vece od 1 jer sam tak gore namjestila
  47. pom2=pom2->next;
  48. k_pom--;
  49. }
  50. if(pom2==pom3){
  51. pom3=pom1; //prethodnik onog elementa kojeg prvo brisemo
  52. }
  53. }
  54. for(pom1=pom3; k>0; pom1=pom1->next){
  55. rest* temp=pom1->next;
  56. pom1->next=temp->next;
  57. free(temp);
  58. k--;
  59. }
  60. }
  61. else{ //treba brisati prvih k
  62. for(pom1=*first; k_pom>0; pom1=pom1->next){
  63. k_pom--;
  64. rest* temp=pom1;
  65. free(temp);
  66. }
  67. }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement