bt_bb_section_bottom_section_coverage_image

Izbrisi posle prvog parnog

 

program izbaciPosleParnog;
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 izbaciPosleParnog(p:pokelement):pokelement;
var pom1, pom2:pokelement;
begin
pom1 := p;
while (pom1 <> NIL) and (pom1^.podatak mod 2 = 1) do
    begin
    pom2 := pom1;
    pom1 := pom1^.sledeci;
    end;
pom2 := pom1;
pom1 := pom1^.sledeci;
pom2^.sledeci := pom1^.sledeci;
dispose(pom1);
izbaciPosleParnog := 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;
glava := izbaciPosleParnog(glava);
writeln('Kreirana lista je:');
stampaj_listu( glava );
end.
Kako funkcioniše

1. Inicijalizacija pokazivača

pom1 := p;
  • pom1 je pokazivač koji koristimo za prolazak kroz listu. On je inicijalizovan na početak liste, tj. na prvi element.

2. Traženje prvog parnog broja

while (pom1 <> NIL) and (pom1^.podatak mod 2 = 1) do
begin
    pom2 := pom1;
    pom1 := pom1^.sledeci;
end;
  • Petlja while (pom1 <> NIL) and (pom1^.podatak mod 2 = 1) se koristi da bi se pronašao prvi parni broj u listi.
    • pom1^.podatak mod 2 = 1 proverava da li je trenutni element neparan.
    • Ako je trenutni element neparan, petlja prelazi na sledeći element, čuvajući prethodni element u pom2.

3. Uklanjanje elementa nakon prvog parnog broja

pom2 := pom1;
pom1 := pom1^.sledeci;
pom2^.sledeci := pom1^.sledeci;
dispose(pom1)
  • Nakon što se nađe prvi parni broj (kroz prethodnu petlju), pom1 pokazuje na prvi neparan broj nakon parnog broja.
  • pom2 := pom1: Čuvamo trenutni element (parni broj).
  • pom1 := pom1^.sledeci: Pomera se na sledeći element.
  • pom2^.sledeci := pom1^.sledeci: Prethodni element (parni broj) sada pokazuje na element koji se nalazi posle sledećeg (koji treba da bude obrisan).
  • dispose(pom1): Oslobađamo memoriju za element koji je obrisan.

4. Vraćanje početnog pokazivača

izbaciPosleParnog := p;
  • Na kraju, vraćamo početni pokazivač p jer nije došlo do promene u samom početku liste.

image

Komentariši