Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Podatke o restoranima u jednoj ulici spremamo u vezanu listu. Za svaki restoran
- pamtimo naziv (string od najviše 50 znakova), kućni broj (prirodni broj) i zaradu restorana (realni broj). Vezana lista
- restorana je uvijek uzlazno sortirana po kućnom broju. Možete pretpostaviti da ne postoje dva restorana s istim kućnim
- brojem.
- Napišite funkciju rest* prvih_k(rest** first, int k) koja traži prvih k susjednih restorana s ukupnom najvećom
- zaradom i izbacuje ih iz vezane liste. Dva restorana su susjedna ako u vezanoj listi ne postoji restoran koji se nalazi
- između njih. Funkcija vraća pokazivač na početak vezane liste izbačenih restorana (koja, također, mora biti sortirana
- uzlazno po kućnim brojevima). Ukoliko u ulaznoj vezanoj listi ima strogo manje od k elemenata, funkcija ne mijenja
- ulaznu vezanu listu i vraća NULL.*/
- rest* prvihk(rest** first, int k){
- rest* pom1 = *first;
- rest* pom2;
- rest* pom3;
- int k_pom = k;
- int dobro=0; //provjera ako slucajno nemoramo brisati prvih k;
- double najveca_zarada = 0.0, zarada;
- for(pom1 = *first; k_pom > 0; pom1=pom1->next){
- k_pom--;
- najveca_zarada+=pom1->zarada;
- }
- pom1=*first;
- k_pom=k;
- while(pom1!=NULL){ //da vidimo kojih k ima najvecu zaradu
- zarada=0.0;
- k_pom=k;
- pom2=pom1;
- while(pom2!=NULL && k_pom>0){
- zarada+pom2->zarada;
- if(k_pom!=0)pom2=pom2->next;
- }
- /*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
- pom3 pokazival na sljedbenika od zadnjeg, a to je NULL. ja hocu da mi pokazujem bas na zadnjeg kojeg ocu brisati.*/
- if(zarada>najveca_zarada){
- dobro=1;
- najveca_zarada=zarada;
- pom3=pom2; //pom3 pokazuje na zadnji u nizu od k koji trebamo obrisati
- }
- pom1=pom1->next;
- }
- //ponovo prolazim po listi da nadjem prethodnika prvog kojeg trebam brisati
- if(dobro==1){ //brisemo ili u sredini negdje k elemenata ili na kraju k elemenata
- for(pom1=*first; pom1->next!=NULL; pom1=pom1->next){
- k_pom=k;
- pom2=pom1->next;
- while(k_pom>1){ //mora biti vece od 1 jer sam tak gore namjestila
- pom2=pom2->next;
- k_pom--;
- }
- if(pom2==pom3){
- pom3=pom1; //prethodnik onog elementa kojeg prvo brisemo
- }
- }
- for(pom1=pom3; k>0; pom1=pom1->next){
- rest* temp=pom1->next;
- pom1->next=temp->next;
- free(temp);
- k--;
- }
- }
- else{ //treba brisati prvih k
- for(pom1=*first; k_pom>0; pom1=pom1->next){
- k_pom--;
- rest* temp=pom1;
- free(temp);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement