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 tipainteger
koju želimo da dodamo na stek.
2. Deklaracija pomoćne promenljive
var p: stek;
p
: Privremena promenljiva tipastek
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 nax
(broj koji dodajemo na stek).p^.vr
označava poljevr
(vrednost) u čvoru na koji pokazuje pokazivačp
.
5. Povezivanje sa prethodnim vrhom steka
p^.sl := vrh;
p^.sl
postavlja pokazivač sledećeg čvora (poljesl
) 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).
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 tipastek
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
na1
(ili neku drugu oznaku da je stek prazan). - Izlazi se iz procedure pomoću
exit
.
- Postavlja se vrednost
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 promenljivux
.
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.