Stack atau disebut LIFO (Last In First Out), yaitu elemen yang terakhir disisipkan
Menjadi elemen yang pertama kali diambil. Ini adalah kasus khusus ordered list
Dimana penyisipan dan penghapusan dilakukan disalah satu ujung.
Misal, Stack S=(A1,A2,....An),maka
1. elemen A1 adalah elemen terbawah
2. elemen Ai adalah diatas elemen Ai-1, dimana 1 < I <= n.
Batasan terhadap stack berimplikasi, jika ada elemen A,B,C,D,E maka pengambilan
Seluruh elemen di stack sebagai berikut E,D,C,B,A.
Karakteristik
1. elemen stack ialah item-item data di
elemen stack
2. Top (elemen puncak dari stack)
3. Jumlah elemen pada stack
4. status stack (kosong/penuh)
Penuh, jika elemen pada stack penuh/mencapai maksimum. Kondisi ini tidak
Memungkinkan menambah elemen, menyebabkan kondisi overflow.
Kosong, jika tidak ada elemen pada stack. Tidak memungkinkan mengambil elemen
Menyebabkan kondisi underflow.
hmmm...contoh stack di dunia nyata seperti, tumpukan kue yang ada didalam keler toples. :D
sumber gambar google image
Operasi pada Stack
1. Create stack
2. Penyisipan elemen pada stack
3. Pengambilan elemen stack
4. Penambahan elemen stack
5. Melihat kondisi pada stack
Penggunaan Stack
1. simulasi tumpukan/stack di dunia nyata
2. pemanggilan fungsi/prosedur
3. implementasi fungsi/prosedur, dan lain-lain
Alhamdulillah pada posting kali ini saya tampilkan program untuk Stack (Pascal Language). Berikut adalah screenshootnya,
![]() |
| Inisialisasi Stack (Membuat Stack Kosong) |
![]() |
| Menyisipkan elemen x ke Stack |
![]() |
| Melihat isi Stack yang telah terisi elemen |
![]() |
| Pengambilan elemen di Stack |
![]() |
| Melihat isi Stack yang telah diambil |
![]() |
| Menambahkan elemen ke Stack Top (atas) |
![]() |
| Melihat isi Stack yang telah ditambahkan |
![]() | ||
| Overflow, jika melebihi batas maksimal banyaknya elemen untuk satu Stack |
Bagi yang ingin mencoba dan mengembangkan software nya silahkan copy saja sourcecode dibawah ini. Maaf softwarenya masih berantakan ^_^
program Stack_(Tumpukan);
uses crt;
const n = 6;
type
TError = (No_Error,Overflow,Underflow,Not_Available);
TData = integer; { datanya berupa tipe bilangan }
stack = record
top : integer;
SElemen : array [1..n] of TData;
errorCode : TError;
end;
var
{ #GLOBAL (for calling procedure/function's parameters }
sGLOBAL : stack;
x : TData;
s : stack;
empety : boolean;
sum : byte;
i : integer;
{ inisialisasi stack }
procedure initS_(var s:stack);
begin
s.top := 0;
s.errorCode := No_Error;
end;
{ menyisipkan item x ke stack }
procedure push_(var s:stack; x:TData);
begin
if (s.top < n) then
begin
s.top := s.top + 1;
s.SElemen[s.top] := x;
end
else
begin
s.errorCode := Overflow;
end;
end;
{ hilangkan elemen puncak dari stack kecuali bila stack kosong }
procedure pop_(var s:stack; var x:TData);
begin
if (s.top > 0) then
begin
x := s.SElemen[s.top];
s.top := s.top - 1;
end
else
begin
s.errorCode := Underflow;
end;
end;
{ mengirim elemen puncak dari stack kecuali bila stack kosong }
function topS_(s:stack; x:TData):TData;
begin
if (s.top > 0) then
begin
topS_ := s.SElemen[s.top] ;
{add}
s.SElemen[s.top] := x;
sGLOBAL.top := sGLOBAL.top + 1;
{/add}
end
else
begin
s.errorCode := Not_Available;
end;
end;
{ tes, apakah stack kosong? }
function empetyS_(s:stack):boolean;
begin
empetyS_ := (s.top = 0);
end;
{ jumlah elemen di stack }
function sum_in_S_(s:stack):integer;
begin
sum_in_S_ := s.top;
end;
procedure menu_of_stack_;
var choose : char;
i,n_elemen : byte;
begin
while true do
begin
textcolor(15);clrscr;
writeln('############## STACK ##############');
writeln('-----------------------------------');
writeln('[1] Inisialisasi Stack');
writeln('[2] Menyisipkan Elemen ke Stack');
writeln('[3] Mengambil Elemen dari Stack');
writeln('[4] Menambahkan Elemen ke Stack');
writeln('[5] Melihat isi Stack');
{writeln('[6] Jumlah Elemen di Stack');}
writeln('[X] Keluar Program');
writeln('===================================');
write('Choose : ');readln(choose);
if (choose = '1') then
begin
initS_(sGLOBAL);
gotoXY(1,10);textcolor(10);write('>>>>>> Inisialisasi Sukses <<<<<<');delay(2400);
end
else if (choose = '4') then
begin
clrscr;
writeln('####### Mengirim Elemen Puncak #######');
writeln('--------------------------------------');
{writeln;write('Masukkan Elemen = ');readln(x);
{sGLOBAL.SElemen[sGLOBAL.top] := sGLOBAL.SElemen[sGLOBAL.top];}
topS_(sGLOBAL,x);
writeln;writeln('>>>>>> Elemen Sukses dikirim <<<<<<');writeln;
textcolor(10);write('Enter = Go to Main Menu');readln;
end
else if (choose = '2') then
begin
repeat
clrscr;
writeln('###### Sisipkan Elemen ke Stack ######');
writeln('--------------------------------------');
write('Banyaknya Elemen [Max 5] > ');readln(n_elemen);
until (n_elemen > 0) and (n_elemen < 6);
for i := 1 to n_elemen do
begin
write('Elemen ke-',i,' = ');readln(x);
push_(sGLOBAL,x);
end;
end
else if (choose = '3') then
begin
clrscr;
writeln('# Mengambil Elemen Puncak dari Stack #');
writeln('--------------------------------------');
pop_(sGLOBAL,x);
writeln;write('>>>>>>> ');textcolor(15+blink);write('Elemen Sukses diambil');textcolor(15);write(' <<<<<<<');
writeln;writeln;textcolor(10);write('Enter = Go to Main Menu');readln;
end
else if (choose = '5') then
begin
clrscr; textcolor(11);
writeln('########### Isi dalam Stack ###########');
writeln('---------------------------------------');
empetyS_(sGLOBAL);
if (empetyS_(sGLOBAL) = FALSE) then
begin
if sum_in_S_(sGLOBAL) <= n-1 then
begin
sum_in_S_(sGLOBAL);
writeln('Jumlah Elemen = ',sum_in_S_(sGLOBAL));
for i := sGLOBAL.top downto 1 do
begin
write(sGLOBAL.SElemen[i]:3);
end;
end
else
begin
writeln('Overflow!');
end;
end
else
begin
gotoXY(13,3);textcolor(15);write('-');
textcolor(4+blink);gotoXY(15,3);writeln('Stack Kosong');
gotoXY(28,3);textcolor(15);writeln('-');
end;
writeln;textcolor(10);write('Enter = Go to Main Menu');
readln;
end
{else if (choose = '6') then
begin
clrscr; textcolor(11);
writeln('####### Jumlah Elemen di Stack #######');
writeln('--------------------------------------');
sum_in_S_(sGLOBAL);
writeln('Jumlah Elemen = ',sum_in_S_(sGLOBAL));writeln;
write('Enter = Go to Main Menu');readln;
end}
else if (choose = 'x') then begin exit end;
end;
end;
{ Program Utama }
begin
menu_of_stack_;
end.










Tidak ada komentar:
Posting Komentar