You are on page 1of 14

Osnovi programiranja dr Boban Stojanovi

1
Liste
Uvod
Pri reavanju mnogih problema potrebne su nam dinamike liste, iju veliinu ne moramo znati u trenutku
kompajliranja, ve je moemo definisati i u toku rada programa. Povezana lista je struktura podataka koja
se koristi za modeliranje ovakvih dinamikih lista.
Koncept
Nizovi su u memoriji predstavljeni korienjem sekvencijalnog mapiranja, tako da su elementi niza
podjednako udaljeni jedan od drugog. Meutim, ovakav pristup ima sledee nedostatke:
Umetanje novog ili brisanje postojeeg elementa iz niza je vremenski veoma skupa operacija, jer
zahteva pomeranje odreenog broja postojeih elemenata.
U sluaju korienja statikih nizova neophodno je poznavanje maksimalnog broja elemenata jo u
trenutku pisanja programa. Pored ovog nedostatka, dodatni problem je i to to bez obzira na
stvaran broj elemenata koji e biti smeten u niz, program uvek alocira maksimalnu veliinu niza,
to dovodi do bespotrebnog troenja memorije.
Korienje dinamikih nizova reava problem poznavanja maksimalnog broja elemenata u
trenutku pisanja programa, ali uvodi i neke nove probleme. Svaka promena veliine niza zahteva
dodatnu alokaciju i dealokaciju memorije, kao i kopiranje sadraja elemenata u novi memorijski
prostor, to drastino pogorava performanse programa.
Da bi se prevazili navedeni problemi uvodi se koncept povezanih elemenata. U ovakvom pristupu nije
neophodno da elementi budu meusobno na podjednakom rastojanju. Umesto toga elemente moemo
smestiti bilo gde u memoriji, a zatim ih povezati tako da svaki element (osim prvog) bude povezan sa
prethodnim elementom u listi. To se moe postii tako to se u svaki element upie i adresa njegovog
sledbenika, to zahteva da svaki element bude u mogunosti da pored svojih podataka uva i adresu
sledeeg elementa. Zbog toga svaki element mora biti slog koji sadri dva dela: jedan koji uva neophodne
podatke (nazovimo ga podatak ili data field) i drugi koji uva adresu sledbenika (veza ili link).
Dakle, povezana lista je lista elemenata koji su proizvoljno rasporeeni u memoriji i koji su meusobno
povezani linkom, tj. smetanjem adrese svakog elementa (osim prvog) u njegovog prethodnika.

Slika ### Povezana lista
Definisanje
Za realizaciju koncepta povezanih lista u programskom jeziku Pascal koriste se slogovi i pokazivai
(pointeri). Element liste koja e sadrati celobrojne podatke se definie na sledei nain:

typepokelement=^element;
element=record
podatak:integer;
sledeci:pokelement;
end;
Osnovi programiranja dr Boban Stojanovi

2
Prethodne linije koda definiu slogovni tip element koji e predstavljati element liste. Svaki element liste
sadri celobrojni podatak i pokaziva na sledei element liste. Podatak unutar liste moe biti i bilo kog
drugog prostog ili sloenog tipa.
Dodavanje elementa u listu
Da bismo uopte mogli da baratamo listom, potrebno je da nam njen prvi element (ukoliko postoji) uvek
bude poznat. Kada znamo prvi element, korienjem pokazivaa na njegovog sledbenika lako dolazimo do
sledeeg elementa u listi. Poto lista moe biti i prazna, umesto da pamtimo prvi element liste, koristimo
pokaziva na prvi element, koji nazivamo glava liste. Dakle, glava liste je pokaziva na prvi element liste, a
u sluaju da je lista prazna vrednost ovog pokazivaa je NIL. Veoma je bitno u svakom trenutku imati
informaciju o glavi liste, jer je samo tako mogue pristupiti listi. Iz tog razloga prilikom pisanja programa
treba voditi rauna da uvek postoji bar jedan pokaziva na poetak liste, koji se nee koristiti u druge svrhe,
ime bi se dolo u opasnost da se izgubi informacija o poetku liste.
Prilikom dodavanja novog elementa u listu moramo razlikovati dva sluaja:
1. Lista je bila prazna pre dodavanja novog elementa
2. Lista nije bila prazna pre dodavanja novog elementa
Pre dodavanja elementa u praznu listu, glava liste je pokaziva koji ima vrednost NIL (ne pokazuje ni na
jedan element). Nakon dodavanja novog elementa, glava liste postaje pokaziva na taj element. U drugom
sluaju lista nije prazna i glava pokazuje na prvi element. Da bi se dodao element na kraj liste, potrebno je
proi kroz sve elemente liste kako bi se pronaao poslednji element, a zatim iza njega dodao novi element.
Dodavanjem novog elementa na kraj liste oigledno ne dolazi do promene glave liste. Imajui u vidu
navedene postupke dodavanja novog elementa, jasno je da se algoritmi u ova dva sluaja drastino
razlikuju, pa ih iz tog razloga i u programu treba razdvojiti.

Slika ### Dodavanje elementa u listu
Prolazak kroz listu
U radu sa listama je esto potrebno kretati se kroz listu, od elementa do elementa. Najee je u pitanju
obrada podataka u listi, pretraga liste kako bi se naao odgovarajui element ili traenje kraja liste. U svim
ovim sluajevima algoritam je slian. Uvodi se pomoni pokaziva koji je inicijalno jednak glavi liste,
odnosno pokazuje na prvi element liste ukoliko ona nije prazna. Nakon provere da li pokaziva pokazuje na
neki element (ima vrednost razliitu od NIL) vri se obrada podatka u tom element (tampa, uporeivanje,
raun...). Po zavretku obrade podatka, pomoni pokaziva dobija vrednost pokazivaa na sledei element,
a itav postupak se ponavlja sve dok pomoni pokaziva ima nenultu vrednost, tj. dok pokazuje na neki
element. Kada pomoni pokaziva dobije vrednost NIL, to znai da smo doli do kraja liste.
Sledei iseak koda pokazuje prolazak kroz listu iji je poetak definisan pokazivaem glava i tampanje
podataka zapisanih u svim njenim elementima:
varpom:pokelement;
...
pom:=glava;
whilepom<>NILdo
begin
write(pom^.podatak,'');
pom:=pom^.sledeci;
end;
Osnovi programiranja dr Boban Stojanovi

3
Primer
Listing programa za kreiranje i tampanje povezane liste:
programKreiranje;
type pokelement=^element;
element=record
podatak:integer;
sledeci:pokelement;
end;

{funkcijazadodavanjenovogelementanakrajliste}
functiondodaj(p:pokelement;n:integer):pokelement;
varpom:pokelement;
begin
{akojepostojecalistapraznaondasedodajenovielementkaopocetni}
ifp=NILthen
begin
{kreiranjenovogelementa}
new(p);

{novomelementusedodeljujeprosledjenipodatak}
p^.podatak:=n;
p^.sledeci:=NIL;
end
else
begin
pom:=p;

{prolazisekrozpostojeculistudabisedobiopokazivacnaposlednjielement}
whilepom^.sledeci<>NILdo pom:=pom^.sledeci;

{kreiranjenovogelementa}
new(pom^.sledeci);

{novomelementusedodeljujeprosledjenipodatak,anjegovaadresaseupisujekaolink
prethodnogelementa}
pom:=pom^.sledeci;
pom^.podatak:=n;
pom^.sledeci:=NIL;
end;

dodaj:=p;
end;

{procedurazastampanjeliste}
procedurestampaj_listu(p:pokelement);
varpom:pokelement;
begin
pom:=p;
ifp<>NILthen
begin
repeat
write(pom^.podatak,'');
pom:=pom^.sledeci;
untilpom=NIL;

writeln;
end
else writeln('Listajeprazna.');

writeln;
end;

var n,i,x:integer;
glava:pokelement;

begin
glava:=NIL;

writeln('Unesibrojelemenataulisti:');
readln(n);

Osnovi programiranja dr Boban Stojanovi



4
fori:=1tondo
begin
writeln('Unesi',i,'.element:');
readln(x);
glava:=dodaj(glava,x);
end;

writeln('Kreiranalistaje:');
stampaj_listu(glava);
end.
Brisanje elementa iz liste
Da bismo obrisali odreeni element iz liste potrebno je da znamo njegovu poziciju u listi. Jedan od naina
je da navedemo njegov redni broj, uz pretpostavku da su elementi numerisani redom od 1 do n. Kada
znamo redni broj elementa, kreemo se kroz listu kako bismo pronali pokaziva na traeni element. Pored
toga, potrebno je da znamo i pokaziva na prethodni element u listi, kako bismo njegovom linku dodelili
pokaziva na element koji sledi elementu koji briemo. Nakon toga moemo da obriemo traeni element,
odnosno da oslobodimo memoriju koju on zauzima.

Slika ### Brisanje elementa iz liste
Primer
Listing programa za kreiranje liste, brisanje zadatog elementa i tampanje povezane liste pre i posle
brisanja:
programBrisanje;
type pokelement=^element;
element=record
podatak:integer;
sledeci:pokelement;
end;

{funkcijazadodavanjenovogelementanakrajliste}
functiondodaj(p:pokelement;n:integer):pokelement;
varpom:pokelement;
begin
{akojepostojecalistapraznaondasedodajenovielementkaopocetni}
ifp=NILthen
begin
{kreiranjenovogelementa}
new(p);

{novomelementusedodeljujeprosledjenipodatak}
p^.podatak:=n;
p^.sledeci:=NIL;
end
else
begin
pom:=p;

{prolazisekrozpostojeculistudabisedobiopokazivacnaposlednjielement}
whilepom^.sledeci<>NILdo pom:=pom^.sledeci;

{kreiranjenovogelementa}
new(pom^.sledeci);

{novomelementusedodeljujeprosledjenipodatak,anjegovaadresaseupisujekaolink
prethodnogelementa}
pom:=pom^.sledeci;
pom^.podatak:=n;
Osnovi programiranja dr Boban Stojanovi

5
pom^.sledeci:=NIL;
end;

dodaj:=p;
end;

{procedurazastampanjeliste}
procedurestampaj_listu(p:pokelement);
varpom:pokelement;
begin
pom:=p;
ifp<>NILthen
begin
repeat
write(pom^.podatak,'');
pom:=pom^.sledeci;
untilpom=NIL;

writeln;
end
else writeln('Listajeprazna.');

writeln;
end;

{funkcijazaodredjivanjeduzineliste}
functionduzina(p:pokelement):integer;
varbroj:integer;
begin
broj:=0;
whilep<>NILdo
begin
broj:=broj+1;
p:=p^.sledeci;
end;

duzina:=broj;
end;

{funkcijazabrisanjezadatogelementaizliste}
functionobrisi(p:pokelement;redni_broj:integer):pokelement;
var prethodni,trenutni:pokelement;
i:integer;
begin
ifp=NILthen
writeln('Listajeprazna.')
else
begin
ifredni_broj>duzina(p)then
writeln('Greska.')
else
begin
prethodni:=NIL;
trenutni:=p;
i:=1;
whilei<redni_brojdo
begin
prethodni:=trenutni;
trenutni:=trenutni^.sledeci;
i:=i+1;
end;
ifprethodni=NILthen
begin
p:=trenutni^.sledeci;
dispose(trenutni);
end
else
begin
prethodni^.sledeci:=trenutni^.sledeci;
dispose(trenutni);
end;
end;
end;

Osnovi programiranja dr Boban Stojanovi



6
obrisi:=p;
end;

var n,i,x:integer;
glava:pokelement;

begin
glava:=NIL;

writeln('Unesibrojcvorovaulisti:');
readln(n);

fori:=1tondo
begin
writeln('Unesi',i,'.element:');
readln(x);
glava:=dodaj(glava,x);
end;

writeln('Listaprebrisanjaelementa:');
stampaj_listu(glava);

writeln('Unesirednibrojelementa:');
readln(n);
glava:=obrisi(glava,n);

writeln('Listaposlebrisanjaelementa:');
stampaj_listu(glava);
end.

Umetanje novog elementa iza odreenog elementa u listi


Da bismo umetnuli novi element na odreeno mesto u listi, neophodno je da znamo redni broj elementa u
listi iza koga e novi element biti umetnut. Pretpostavljamo da su svi elementi liste numerisani rednim
brojevima od 1 do n. Kada znamo broj elementa, kreemo se kroz listu kako bismo dobili pokaziva na
element sa zadatim rednim brojem. Zatim kreiramo novi element, a njegovom linku dodeljujemo
pokaziva na element koji sledi iza elementa sa navedenim rednim brojem. Nakon toga, elementu sa
zadatim rednim brojem postavljamo link tako da pokazuje novi element.

Slika ### Umetanje novog elementa iza odreenog elementa u listi
Primer
programUmetanje;
type pokelement=^element;
element=record
podatak:integer;
sledeci:pokelement;
end;

{funkcijazadodavanjenovogelementanakrajliste}
functiondodaj(p:pokelement;n:integer):pokelement;
varpom:pokelement;
begin
{akojepostojecalistapraznaondasedodajenovielementkaopocetni}
ifp=NILthen
begin
{kreiranjenovogelementa}
new(p);

Osnovi programiranja dr Boban Stojanovi



7
{novomelementusedodeljujeprosledjenipodatak}
p^.podatak:=n;
p^.sledeci:=NIL;
end
else
begin
pom:=p;

{prolazisekrozpostojeculistudabisedobiopokazivacnaposlednjielement}
whilepom^.sledeci<>NILdo pom:=pom^.sledeci;

{kreiranjenovogelementa}
new(pom^.sledeci);

{novomelementusedodeljujeprosledjenipodatak,anjegovaadresaseupisujekaolink
prethodnogelementa}
pom:=pom^.sledeci;
pom^.podatak:=n;
pom^.sledeci:=NIL;
end;

dodaj:=p;
end;

{funkcijazaodredjivanjeduzineliste}
functionduzina(p:pokelement):integer;
varbroj:integer;
begin
broj:=0;
whilep<>NILdo
begin
broj:=broj+1;
p:=p^.sledeci;
end;

duzina:=broj;
end;

{funkcijazaumetanjenovogelementaizaodredjenogelementaulisti}
functionumetni(p:pokelement;redni_broj,vrednost:integer):pokelement;
var novi,pom:pokelement;
i:integer;
begin
if(redni_broj<0)or(redni_broj>duzina(p))then
begin
writeln('Greska!Zadatielementnepostoji.');
exit;
end;

ifredni_broj=0then
begin
new(novi);
novi^.podatak:=vrednost;
novi^.sledeci:=p;
p:=novi;
end
else
begin
pom:=p;
i:=1;
whilei<redni_brojdo
begin
i:=i+1;
pom:=pom^.sledeci;
end;

new(novi);
novi^.podatak:=vrednost;
novi^.sledeci:=pom^.sledeci;
pom^.sledeci:=novi;
end;

umetni:=p;
end;
Osnovi programiranja dr Boban Stojanovi

8

{procedurazastampanjeliste}
procedurestampaj_listu(p:pokelement);
varpom:pokelement;
begin
pom:=p;
ifp<>NILthen
begin
repeat
write(pom^.podatak,'');
pom:=pom^.sledeci;
untilpom=NIL;

writeln;
end
else writeln('Listajeprazna.');

writeln;
end;

var n,i,x:integer;
glava:pokelement;

begin
glava:=NIL;

writeln('Unesibrojcvorovaulisti:');
readln(n);

fori:=1tondo
begin
writeln('Unesi',i,'.element:');
readln(x);
glava:=dodaj(glava,x);
end;

writeln('Listapreumetanjaelementa:');
stampaj_listu(glava);

writeln('Unesirednibrojelementaizakogazelisdanovielementbudeumetnut:');
readln(n);

writeln('Unesivrednostnovogelementa:');
readln(x);

glava:=umetni(glava,n,x);

writeln('Listaposleumetanjaelementa:');
stampaj_listu(glava);
end.
Okretanje redosleda u listi
Da bismo izvrili okretanje redosleda u listi neophodno je da za svaki element znamo pokazivae na
njegovog prethodnika i sledbenika. Kada su nam ovi pokazivai poznati, onda moemo link trenutnog
elementa da postavimo tako da pokazuje na prethodnika. Nakon toga trenutni element proglaavamo za
prethodnika, a njegovog sledbenika za trenutni.

Slika ### Okretanje redosleda u listi
Osnovi programiranja dr Boban Stojanovi

9
Deo koda koji bi obavljao navedenu proceduru mogao bi da izgleda ovako:
prethodni:=NIL;
whiletrenutni<>NILdo
begin
sledeci:=trenutni^.sledeci;
trenutni^.sledeci:=prethodni;
prethodni:=trenutni;
trenutni:=sledeci;
end
Sortiranje liste
Da bismo sortirali listu, prvo prolazimo kroz nju kako bismo pronali element sa najmanjom vrednou
podatka. Nakon toga uklanjamo taj element iz liste i dodajemo ga na kraj druge liste, koja je inicijalno bila
prazna. Ovaj proces ponavljamo sve dok poetna lista ne postane prazna. Na kraju ostaje samo da funkcija
vrati pokaziva na listu u koju su prebaeni svi elementi.

Slika ### Sortiranje liste
Primer
programSortiranje;
type pokelement=^element;
element=record
podatak:integer;
sledeci:pokelement;
end;

{funkcijazadodavanjenovogelementanakrajliste}
functiondodaj(p:pokelement;n:integer):pokelement;
varpom:pokelement;
begin
{akojepostojecalistapraznaondasedodajenovielementkaopocetni}
ifp=NILthen
begin
{kreiranjenovogelementa}
new(p);

{novomelementusedodeljujeprosledjenipodatak}
p^.podatak:=n;
p^.sledeci:=NIL;
end
else
begin
pom:=p;

{prolazisekrozpostojeculistudabisedobiopokazivacnaposlednjielement}
whilepom^.sledeci<>NILdo pom:=pom^.sledeci;

{kreiranjenovogelementa}
new(pom^.sledeci);

Osnovi programiranja dr Boban Stojanovi



10
{novomelementusedodeljujeprosledjenipodatak,anjegovaadresaseupisujekaolink
prethodnogelementa}
pom:=pom^.sledeci;
pom^.podatak:=n;
pom^.sledeci:=NIL;
end;

dodaj:=p;
end;

{procedurazastampanjeliste}
procedurestampaj_listu(p:pokelement);
varpom:pokelement;
begin
pom:=p;
ifp<>NILthen
begin
repeat
write(pom^.podatak,'');
pom:=pom^.sledeci;
untilpom=NIL;

writeln;
end
else writeln('Listajeprazna.');

writeln;
end;

{funkcijazaokretanjaredosledaulisti}
functionokreni(p:pokelement):pokelement;
varprethodni,trenutni,sledeci:pokelement;
begin
prethodni:=NIL;
trenutni:=p;

whiletrenutni<>NILdo
begin
sledeci:=trenutni^.sledeci;
trenutni^.sledeci:=prethodni;
prethodni:=trenutni;
trenutni:=sledeci;
end;

okreni:=prethodni;
end;

{funkcijazasortiranjelisteurastucemredosledu}
functionsortiraj(p:pokelement):pokelement;
varpom1,pom2,min,prethodni,q:pokelement;
begin
q:=NIL;

whilep<>NILdo
begin
prethodni:=NIL;
pom1:=p;
min:=pom1;

pom2:=p^.sledeci;
whilepom2<>NILdo
begin
ifpom2^.podatak<min^.podatakthen
begin
min:=pom2;
prethodni:=pom1;
end;
pom1:=pom2;
pom2:=pom2^.sledeci;
end;

ifprethodni=NILthen
p:=min^.sledeci
else
Osnovi programiranja dr Boban Stojanovi

11
prethodni^.sledeci:=min^.sledeci;

min^.sledeci:=NIL;

ifq=NILthen
q:=min {premestaelementsanajmanjomvrednoscupodatka
izlistepnapocetaklisteq}
else
begin
pom1:=q;

{prolazikrozlistuqdabipronasaonjenposlednjielement}
whilepom1^.sledeci<>NILdopom1:=pom1^.sledeci;

pom1^.sledeci:=min; {premestaelementsanajmanjomvrednoscupodatka
izlistepnakrajlisteq}
end;
end;

sortiraj:=q;
end;

var n,x,i:integer;
glava:pokelement;

begin
glava:=NIL;

writeln('Unesibrojcvorovaulisti:');
readln(n);

fori:=1tondo
begin
writeln('Unesi',i,'.element:');
readln(x);
glava:=dodaj(glava,x);
end;

writeln('Listapresortiranja:');
stampaj_listu(glava);

glava:=sortiraj(glava);

writeln('Sortiranalistaje:');
stampaj_listu(glava);

glava:=okreni(glava);

writeln('Okrenutalistaje:');
stampaj_listu(glava);
end.
Umetanje novog elementa u sortiranu listu
Da bismo umetnuli novi element u listu koja je prethodno sortirana, uporeujemo redom podatke u listi sa
vrednou podatka novog elementa. Ovaj proces se ponavlja sve dok ne dobijemo pokaziva na element
koji se nalazi ispred elementa iji je podatak vei od podatka u novom elementu.

Slika ### Umetanje elementa u sortiranu listu
Osnovi programiranja dr Boban Stojanovi

12
Primer
programUmetanjeSort;
type pokelement=^element;
element=record
podatak:integer;
sledeci:pokelement;
end;

{funkcijazadodavanjenovogelementanakrajliste}
functiondodaj(p:pokelement;n:integer):pokelement;
varpom:pokelement;
begin
{akojepostojecalistapraznaondasedodajenovielementkaopocetni}
ifp=NILthen
begin
{kreiranjenovogelementa}
new(p);

{novomelementusedodeljujeprosledjenipodatak}
p^.podatak:=n;
p^.sledeci:=NIL;
end
else
begin
pom:=p;

{prolazisekrozpostojeculistudabisedobiopokazivacnaposlednjielement}
whilepom^.sledeci<>NILdo pom:=pom^.sledeci;

{kreiranjenovogelementa}
new(pom^.sledeci);

{novomelementusedodeljujeprosledjenipodatak,anjegovaadresaseupisujekaolink
prethodnogelementa}
pom:=pom^.sledeci;
pom^.podatak:=n;
pom^.sledeci:=NIL;
end;

dodaj:=p;
end;

{procedurazastampanjeliste}
procedurestampaj_listu(p:pokelement);
varpom:pokelement;
begin
pom:=p;
ifp<>NILthen
begin
repeat
write(pom^.podatak,'');
pom:=pom^.sledeci;
untilpom=NIL;

writeln;
end
else writeln('Listajeprazna.');

writeln;
end;

{funkcijazasortiranjelisteurastucemredosledu}
functionsortiraj(p:pokelement):pokelement;
varpom1,pom2,min,prethodni,q:pokelement;
begin
q:=NIL;

whilep<>NILdo
begin
prethodni:=NIL;
pom1:=p;
min:=pom1;
Osnovi programiranja dr Boban Stojanovi

13

pom2:=p^.sledeci;
whilepom2<>NILdo
begin
ifpom2^.podatak<min^.podatakthen
begin
min:=pom2;
prethodni:=pom1;
end;
pom1:=pom2;
pom2:=pom2^.sledeci;
end;

ifprethodni=NILthen
p:=min^.sledeci
else
prethodni^.sledeci:=min^.sledeci;

min^.sledeci:=NIL;

ifq=NILthen
q:=min {premestaelementsanajmanjomvrednoscupodatka
izlistepnapocetaklisteq}
else
begin
pom1:=q;

{prolazikrozlistuqdabipronasaonjenposlednjielement}
whilepom1^.sledeci<>NILdopom1:=pom1^.sledeci;

pom1^.sledeci:=min; {premestaelementsanajmanjomvrednoscupodatka
izlistepnakrajlisteq}
end;
end;

sortiraj:=q;
end;

{funkcijazaumetanjenovogelementausortiranulistu}
functionsort_dodaj(p:pokelement;n:integer):pokelement;
vartrenutni,prethodni,novi:pokelement;
begin
trenutni:=p;
prethodni:=NIL;

whiletrenutni^.podatak<ndo
begin
prethodni:=trenutni;
trenutni:=trenutni^.sledeci;
end;

new(novi);

ifprethodni=NILthen{elementcebitiumetnutnapocetakliste}
begin
novi^.podatak:=n;
novi^.sledeci:=p;
p:=novi;
end
else
begin
novi^.podatak:=n;
novi^.sledeci:=prethodni^.sledeci;
prethodni^.sledeci:=novi;
end;

sort_dodaj:=p;
end;

var n,x,i:integer;
glava:pokelement;

begin
glava:=NIL;
Osnovi programiranja dr Boban Stojanovi

14

writeln('Unesibrojcvorovaulisti:');
readln(n);

fori:=1tondo
begin
writeln('Unesi',i,'.element:');
readln(x);
glava:=dodaj(glava,x);
end;

writeln('Listapresortiranja:');
stampaj_listu(glava);

glava:=sortiraj(glava);

writeln('Sortiranalistaje:');
stampaj_listu(glava);

writeln('Unesivrednostnovogelementa:');
readln(x);

glava:=sort_dodaj(glava,x);

writeln('Listaposleumetanjaelementaje:');
stampaj_listu(glava);
end.

You might also like