bt_bb_section_bottom_section_coverage_image

Brisanje poslednjeg elementa iz liste

program Brisanje;
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;

procedure obrisi( var p: pokelement);
var pom1, pom2: pokelement;
begin
    if p = NIL then
        writeln('Lista je prazna.')
    else
        begin
        pom1 := p;
        while pom1^.sledeci <> nil do
            begin
            pom2 := pom1;
            pom1 := pom1^.sledeci;
            end;
        pom2^.sledeci := nil;
        dispose(pom1);
        end;
end;

var n, i, x: integer;
    glava: pokelement;
begin
    glava := NIL;
    writeln('Unesi broj cvorova u listi:');
    readln(n);
    for i := 1 to n do
    begin
        writeln('Unesi ', i, '. element:');
        readln(x);
        glava := dodaj(glava, x);
    end;
    writeln('Lista pre brisanja elementa:');
    stampaj_listu(glava);
    obrisi(glava);
    writeln('Lista posle brisanja elementa:');
    stampaj_listu(glava);
end.
Kako funkcioniše

1. Provera da li je lista prazna

if p = NIL then
    writeln('Lista je prazna.');
  • Ako je pokazivač p (prvi element liste) NIL, to znači da je lista prazna.
  • U tom slučaju se ispisuje poruka “Lista je prazna.”, i funkcija se završava.

2. Traženje poslednjeg elementa

pom1 := p;
while pom1^.sledeci <> nil do
    begin
    pom2 := pom1;
    pom1 := pom1^.sledeci;
		end;
  • Ako lista nije prazna, koristi se pokazivač pom1 za prolazak kroz listu.
  • Petlja while pom1^.sledeci <> nil ide kroz listu dok se ne dođe do poslednjeg elementa (koji ima sledeci = nil).
  • pom2 := pom1: Prethodni element (koji je pre poslednjeg) se čuva u pom2, jer će biti potreban za povezivanje sa nil nakon brisanja poslednjeg elementa.

3. Brisanje poslednjeg elementa

pom2^.sledeci := nil;
dispose(pom1);
  • Nakon što je poslednji element pronađen (pokazivač pom1), pokazivač prethodnog elementa (pom2) se ažurira tako da pom2^.sledeci := nil, čime se uklanja veza prema poslednjem elementu.
  • dispose(pom1): Oslobađa memoriju zauzetu poslednjim elementom (pom1), čime je on fizički uklonjen iz memorije.
https://imateproblem.com/wp-content/uploads/2024/12/mermaid-diagram-2024-12-01-115825.png

Komentariši