bt_bb_section_bottom_section_coverage_image

Pravljenje stack-a

program pravljenjeSteka;
type stek=^slog;
    slog=record 
        vr:integer;
        sl:stek;
        end;

procedure push(var vrh:stek; x :integer);
var p:stek;
begin
new(p);
p^.vr:=x;
p^.sl:=vrh;
vrh:=p;
end;

procedure pop(var vrh:stek; var x :integer);
var p:stek;
begin
if vrh=nil then
    begin
    x:=-1;
    exit;
    end;
p:=vrh;
x := vrh^.vr;
vrh:=vrh^.sl;
dispose(p);
end;

var i, x :integer;
	s :stek;
begin
s:=nil;
for i := 1 to 10 do
    push(s, i);
for i := 1 to 10 do
    begin
    pop(s, x);
    writeln(x);
    end;
end.
PUSH

1. Deklaracija procedure

procedure push(var vrh:stek; x: integer);
  • vrh: Promenljiva koja predstavlja vrh steka (pokazivač na najnoviji element). Prosleđuje se po referenci (var), jer se njen sadržaj menja unutar procedure.
  • x: Vrednost tipa integer koju želimo da dodamo na stek.

2. Deklaracija pomoćne promenljive

var p: stek;
  • p: Privremena promenljiva tipa stek koja služi za kreiranje novog elementa steka.

3. Kreiranje novog elementa

new(p);
  • Funkcija new(p) alocira memoriju za novi element steka.
  • Nakon ove linije, p pokazuje na novokreirani čvor (element) steka.

4. Dodeljivanje vrednosti

p^.vr := x;
  • p^.vr postavlja vrednost novog elementa na x (broj koji dodajemo na stek).
  • p^.vr označava polje vr (vrednost) u čvoru na koji pokazuje pokazivač p.

5. Povezivanje sa prethodnim vrhom steka

p^.sl := vrh;
  • p^.sl postavlja pokazivač sledećeg čvora (polje sl) na trenutni vrh steka.
  • Ovim povezujemo novi element sa postojećim stekom.

6. Ažuriranje vrha steka

vrh := p;
  • Ažurira promenljivu vrh tako da sada pokazuje na novokreirani element (tj. novi vrh steka).

image

POP

1. Deklaracija procedure

procedure pop(var vrh:stek; var x: integer)
  • vrh: Pokazivač na trenutni vrh steka, koji se menja unutar procedure. Prosleđuje se po referenci (var).
  • x: Promenljiva u koju se smešta vrednost uklonjenog elementa sa steka.

2. Deklaracija pomoćne promenljive

var p: stek;
  • p: Privremena promenljiva tipa stek koja će čuvati adresu elementa koji treba ukloniti.

3. Provera da li je stek prazan

if vrh = nil then
begin
    x := -1;
    exit;
end;
  • Ako je vrh nil, stek je prazan:
    • Postavlja se vrednost x na 1 (ili neku drugu oznaku da je stek prazan).
    • Izlazi se iz procedure pomoću exit.

4. Pamćenje elementa za uklanjanje

p := vrh;
  • p postavlja se na trenutni vrh, tj. element koji treba ukloniti.

5. Preuzimanje vrednosti elementa

x := vrh^.vr;
  • Vrednost elementa sa vrha steka (vrh^.vr) preuzima se i smešta u promenljivu x.

6. Ažuriranje vrha steka

vrh := vrh^.sl;
  • vrh se ažurira tako da pokazuje na sledeći element u steku (vrh^.sl).

7. Oslobađanje memorije

dispose(p);
  • Oslobađa se memorija zauzeta elementom koji je uklonjen, jer više nije deo steka.

image

Komentariši