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;
}
/* 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]$