[ overdose @ 04.10.2004. 13:14 ] @
Učim liste, pa sam napisao jedan program koji obrađuje standardne operacije sa listama. Možda može pomoći nekom ko je isto počeo da ih uči :) Izvorni kod je u prikačen uz poruku. Naravno, osim toga što se pravim pametan, hteo sam da pitam da li je moguće optimizovati funkciju umetni ? Čini mi se da sam previše iskomplikovao. Code: /* Umetanje jednog elementa u neopadajuce uredjenu listu tako da lista i dalje ostane uredjena */ Elem *umetni (Elem *niz) { Elem *prethodni=NULL, *tekuci=niz, *naredni=niz->sled, *krajnji=niz; int broj; printf("Unesite broj koji zelite da umetnem u listu: "); scanf("%d", &broj); Elem *novi=malloc(sizeof(Elem)); if (tekuci->sled != NULL && broj>tekuci->broj) { while (krajnji->sled) krajnji=krajnji->sled; if (broj<krajnji->broj) /* standardni slucaj */ while (tekuci) if (broj>tekuci->broj) {prethodni=tekuci; tekuci=naredni; naredni=naredni->sled;} else { novi->broj=broj; novi->sled=tekuci; prethodni->sled=novi; break; /* Kad umetne neka prekine ! */ } else {novi->broj=broj; novi->sled=NULL; krajnji->sled=novi;} } else { if (broj>tekuci->broj) {novi->broj=broj; novi->sled=NULL; tekuci->sled=novi;} else {novi->broj=broj; novi->sled=tekuci; niz=novi;} } return niz; } [~/files/c]$ cc 10_5_dopuna.c -o 10_5_dopuna 10_5_dopuna.c: In function `main': 10_5_dopuna.c:111: warning: return type of `main' is not `int' [~/files/c]$ ./10_5_dopuna Unesite niz celih brojeva, a zatim bilo sta sto nije ceo broj za nastavak. Ukoliko zelite prekid programa unesite nesto sto nije ceo broj. Konacno, trazeni unos je: 2 3 5 6 8 11 15 18 25 123 . Ucitani niz = 2 3 5 6 8 11 15 18 25 123 Trenutni broj elemenata liste je 10 Trenutni zbir elemenata liste je 216 Unesite broj koji zelite da umetnem u listu (paziti da lista mora da bude neopadajuce uredjena !): 20 Novi niz = 2 3 5 6 8 11 15 18 20 25 123 Trenutni broj elemenata liste je 11 Trenutni zbir elemenata liste je 236 Unesite broj koji zelite da izostavim iz liste: 18 Izostavlja se 18 Novi niz = 2 3 5 6 8 11 15 20 25 123 Trenutni broj elemenata liste je 10 Trenutni zbir elemenata liste je 218 Unesite broj za dodavanje na kraj liste: 3 Novi niz = 2 3 5 6 8 11 15 20 25 123 3 Trenutni broj elemenata liste je 11 Trenutni zbir elemenata liste je 221 Unesite broj za dodavanje na pocetak liste: 55 Novi niz = 55 2 3 5 6 8 11 15 20 25 123 3 Trenutni broj elemenata liste je 12 Trenutni zbir elemenata liste je 276 Unesite niz celih brojeva, a zatim bilo sta sto nije ceo broj za nastavak. Ukoliko zelite prekid programa unesite nesto sto nije ceo broj. Konacno, trazeni unos je: . [~/files/c]$ |