Tugas IV Stack(Tumpukan)
Apa itu stack ?
Stack
adalah sebuah abstract data type (ADT) yang berisi koleksi data item yang hanya
dapat diakses pada akhir bagian stack tersebut, biasa disebut top. Hal ini
berarti bahwa didalam sebuah stack, kita dapat memasukkan (insert) dan
menghapus (delete) item hanya dari posisi top tersebut. Item terakhir yang kita
masukkan kedalam sebuah stack adalah item yang paling pertama harus kita
keluarkan. Itulah mengapa stack disebut sebagai Last-In-First-Out (LIFO) data
structure. Kalimat sederhana yang dapat menjelaskan konsep tersebut adalah
kalimat “Masuk belakangan keluar duluan”. Apa itu stack ?
Stack
adalah sebuah abstract data type (ADT) yang berisi koleksi data item yang hanya
dapat diakses pada akhir bagian stack tersebut, biasa disebut top. Hal ini
berarti bahwa didalam sebuah stack, kita dapat memasukkan (insert) dan
menghapus (delete) item hanya dari posisi top tersebut. Item terakhir yang kita
masukkan kedalam sebuah stack adalah item yang paling pertama harus kita
keluarkan. Itulah mengapa stack disebut sebagai Last-In-First-Out (LIFO) data
structure. Kalimat sederhana yang dapat menjelaskan konsep tersebut adalah
kalimat “Masuk belakangan keluar duluan”.
Didalam kehidupan sehari-hari, terdapat beberapa contoh penerapan
algoritma dari data structure ini, seperti dalam membuat suatu tumpukan piring,
tumpukan buku, tumpukan koin, tusuk sate, atau bahkan cara memakai gelang.
Salah satu contoh, dalam membuat suatu tumpukan piring kita pasti menempatkan
piring pertama berada pada posisi paling bawah, dan piring terakhir
berada pada posisi paling atas. Nah, ketika kita hendak mencuci atau mengambil
piring tersebut, maka kita akan mengambil piring pada tumpukkan atas terlebih
dahulu dan seterusnya hingga mencapai piring paling bawah. Hal tersebut juga
serupa pada tumpukan buku, koin, tusuk sate dan cara memakai gelang. Saya rasa
ilustrasi tersebut cukup menjelaskan konsep LIFO dari stack.
PUSH DAN POP
q
Fungsi
push: digunakan untuk menambahkan data ke dalam stack. Penambahan data tidak
bisa dilakukan apabila stack sudah penuh. Urutan perintahnya adalah:
menambahkan nilai top dan menambahkan data pada posisi nilai top. Jika dalam
Linked List menggunakan method addLast.
q
Fungsi
pop: digunakan untuk mengeluarkan data teratas stack dengan syarat bahwa stack
tidak kosong. Urutan perintahnya adalah : menghapus data pada posisi nilai top
dan menurunkan nilai top
Operasi Push
Operasi push adalah operasi dasar dari stack yang berguna untuk
menambah suatu elemen data baru pada stack dan di simpan pada posisi top yang
akan mengakibatkan posisi top akan berubah.
Langkah-langkah
operasi ini:
q
Periksa apakah stack penuh(isfull).jika
bernilai false/0 (tidak penuh)maka proses push dilaksanakan dan jika
pemeriksaan ini bernilai true/1,maka proses push digagalkan.
q
Proses
push-nya sendiri adalah dengan menambahkan field top dengan 1,kemudian elemen
pada posisi top di isi dengan elemen data baru.
Operasi Pop
q Operasi
Pop adalah salah satu operasi paling besar dari stack yang berguna untuk
mengambil elemen terakhir(top) dan kemudian menghapus elemen tersebut sehingga
posisi top akan berpindah.
q Operasi
ini biasanya dibuat dalam bentuk function yang me-return-kan nilai sesuai data
yang ada di top. Operasi Pop pada Stack yang menggunakan array adalah terlebih
dahulu memeriksa apakah stack sedang keadaan kosong,jika tidak
kosong maka data diambil pada posisi yang ditunjuk oleh posisi top,kemudian
disimpan dalam variabel baru dengan nama “data”.
CONTOH PROGRAM :
program stack;
uses winCrt;
const max = 100;
Var L : array [1..max] of char;
sisa, i, j, top : integer;
jawab : char;
kondisi : string;
procedure inisiasi;
Begin
top :=0;
end;
procedure CEK;
begin
sisa
:= max - top;
if
top = max then
kondisi := 'penuh'
else
if
((top < max) and (top > 0)) then
kondisi := 'belum penuh'
else
kondisi := 'kosong'
end;
procedure PUSH;
begin
write('Masukan
data : ');
readln(L[top+1]);
top
:= top + 1;
end;
procedure TAMPIL;
begin
writeln('Stack Yang Dihasilkan :
');
for i := top downto 1 do
begin
writeln(L[i]);
end;
end;
procedure POP;
begin
top := top - 1
end;
BEGIN
clrscr;
inisiasi;
jawab := 'Y';
while ((jawab = 'Y') or (jawab = 'y')) do
begin
writeln('PROGRAM STACK');
writeln('1. PUSH');
writeln('2. POP');
write('PILIH 1 ATAu 2 ? ');
readln(j);
case j of
1
: begin
CEK;
if kondisi = 'penuh' then
writeln('STACK PENUH, ANDA TIDAK BISA MENAMBAH TUMPUKAN')
else
begin
if kondisi <> 'penuh' then
begin
CEK;
writeln ('Stack ', kondisi, ', Masih Bisa
Menampung : ', sisa, ' data');
write ('Apakah Anda mau Menambah Data ?
(Y/T) ');
readln (jawab);
while (((jawab = 'Y') or (jawab = 'y')) and
(kondisi <> 'penuh')) do
begin
PUSH;
writeln;
writeln;
CEK;
writeln;
writeln;
TAMPIL;
writeln;
writeln;
writeln ('Stack
', kondisi, 'Masih Bisa Menampung : ', sisa, ' data');
write ('Apakah Anda mau Menambah Data ?
(Y/T) ');
readln (jawab);
end;
end
else
writeln ('STACK PENUH');
end;
end;
2 : begin
write ('Apakah Anda Yakin Mau Menghapus
Data ? (Y/T) ');
readln (jawab);
while (((jawab = 'Y') or (jawab = 'y'))
and (kondisi <> 'kosong')) do
begin
POP;
writeln;
writeln;
CEK;
writeln;
writeln;
TAMPIL;
writeln;
writeln;
writeln ('Stack Masih Bisa Dihapus : ',
top, ' data');
write ('Apakah Anda Mau Menghapus Data ?
(Y/T) ');
readln (jawab);
end;
if kondisi = 'kosong' then
writeln ('STACK KOSONG')
end;
end;
write ('Apakah Mau Kembali Ke Menu Utama ?
(Y/T) ');
readln (jawab);
end;
END.
0 komentar: