bt_bb_section_bottom_section_coverage_image

Dodavanje posle prvog parnog

program dodavanje_posle_prvog_parnog_elementa;
type pokelement = ^element;
    element=record
            podatak:integer;
            sledeci:pokelement;
            end;

function dodaj(p :pokelement; n:integer):pokelement;
var pom :pokelement;
begin
if p=NIL then
    begin
    new(p);
    p^.podatak := n;
    p^.sledeci := NIL;
    end
else
    begin
    pom := p;
    while pom^.sledeci <> NIL do pom := pom^.sledeci;
    new(pom^.sledeci);
    pom := pom^.sledeci;
    pom^.podatak := n;
    pom^.sledeci := NIL;
    end;
dodaj:=p;
end;

procedure stampaj_listu( p:pokelement );
var pom:pokelement;
    begin
    pom := p;
    if p <> NIL then
        begin
        repeat
            write(pom^.podatak,' ');
            pom:=pom^.sledeci;
        until pom = NIL;
        writeln;
        end
    else writeln('Lista je prazna.');
    writeln;
    end;
   
function dodajNaParni(p:pokelement; n:integer) :pokelement;
var novi, pom:pokelement;
begin
pom := p;
while pom <> NIL do
    begin
    if pom^.podatak mod 2 <> 0 then
        pom := pom^.sledeci
    else
        begin
        new(novi);
        novi^.podatak := n;
        novi^.sledeci := pom^.sledeci;
        pom^.sledeci := novi;
        break;
        end;
    end;
dodajNaParni := p;
end;
   
var n,i,x:integer;
    glava:pokelement;
   
begin
glava := NIL ;
writeln('Unesi broj elemenata u listi:');
readln(n);
for i:=1 to n do
    begin
    writeln('Unesi ',i,'. element:');
    readln(x);
    glava := dodaj(glava, x);
    end;

writeln('Unesi  elemenat koji zelis da dodas u listu:');
readln(n);
glava := dodajNaParni(glava, n);
writeln('Kreirana lista je:');
stampaj_listu( glava );
end.
Kako funkcioniše

1. Inicijalizacija pokazivača

pom := p;
  • pom je pomoćni pokazivač koji inicijalizujemo na početak liste (pokazivač p na prvi element). Kroz ovaj pokazivač ćemo prolaziti kroz listu.

2. Prolazak kroz listu i traženje parnog broja

while pom <> NIL do
begin
    if pom^.podatak mod 2 <> 0 then
        pom := pom^.sledeci
  • Petlja while pom <> NIL omogućava prolazak kroz celu listu dok ne naiđemo na NIL, tj. dok ne dođemo do kraja liste.
  • if pom^.podatak mod 2 <> 0: Ako podatak trenutnog elementa nije paran (odnosno, ako nije deljiv sa 2), pomeramo pokazivač pom na sledeći element (pom := pom^.sledeci).

3. Dodavanje novog elementa nakon parnog broja

else
begin
    new(novi);
    novi^.podatak := n;
    novi^.sledeci := pom^.sledeci;
    pom^.sledeci := novi;
    break;
end;
  • Ako je podatak trenutnog elementa paran, kreiramo novi element:
    • new(novi): Alociramo memoriju za novi čvor.
    • novi^.podatak := n: Postavljamo podatak novog čvora na n.
    • novi^.sledeci := pom^.sledeci: Novi element se povezuje sa sledećim elementom nakon trenutnog (koji je paran), jer će novi element postati između trenutnog i sledećeg.
    • pom^.sledeci := novi: Povezujemo trenutni element sa novim elementom.
    • break: Prekidamo petlju jer smo već dodali element i ne treba dalje da tražimo.

4. Vraćanje početnog pokazivača

dodajNaParni := p;
  • Na kraju funkcije, vraćamo početni pokazivač p na prvi element liste jer lista nije promenila svoj početni element, samo smo dodali novi element.
image

Komentariši