Selasa, 27 Maret 2012

Stack (Tumpukan)

TUMPUKAN (STACK) Print E-mail

STACK (TUMPUKAN)

Stack (tumpukan) sebenarnya secara mudah dapat diartikan sebagai list (urutan) dimana penambahan dan pengambilan elemen hanya dilakukan pada satu sisi yang disebut top (puncak) dari stack.
Dengan melihat definisi tersebut maka jelas bahwa pada stack berlaku aturan LIFO (Last In First Out), yaitu elemen yang terakhir masuk akan pertama kali diambil atau dilayani. Salah satu analogi yang dapat dikemukakan di sini adalah tumpukan piring atau barang lain. Pada saat kita hendak menumpuk piring-piring tersebut tentulah yang kita lakukan adalah meletakkan piring pertama pada tempatnya, selsnjutnya meletakkan piring kedua di atas piring pertama dan demikian seterusnya. Pada saat kita hendak mengambil satu piring dari tumpukan tersebut, tentu yang diambil adalah piring teratas (yang terakhir kali ditaruh), bukan yang terbawah (yang pertama kali diletakkan).
Dua operasi dasar pada stack adalah PUSH (operasi pemasukan elemen ke dalam stack) dan POP (operasi pengambilan satu elemen dari dalam stack). Di bawah ini diberikan contoh pemakaian operasi PUSH dan POP dan isi stack untuk setiap selesai eksekusi satu operasi.
(Untuk mempermudah penulisan, di bawah ini isi stack tidak dituliskan secara bertumpuk, tetapi dengan kesepakatan:

  • elemen paling kanan adalah elemen yang ada pada TOS (Top Of the Stack)
  • stack yang dipakai bernama S
  • PUSH(S,B) berarti memasukkan elemen B ke dalam stack S
  • POP(B,S) berarti mengambil elemen dari stack S dan menaruhnya ke dalam variabel B

Operasi yang dilakukan Isi Stack Keterangan
Kondisi Awal kosong -
PUSH('A',S) A -
PUSH('B',S) AB -
PUSH('C',S) ABC -
POP(Data,S) AB Variabel Data berisi 'C'
PUSH('D',S) ABD -
POP(Data,S) AB Data berisi 'D'
POP(Data,S) A Data berisi 'B'



IMPLEMENTASI STACK DALAM BAHASA PASCAL

Implementasi dalam bahasa Pascal dapat dilakukan dengan memanfaatkan struktur data record dan array. Array dipergunakan untuk menyimpan elemen-elemen yang dimasukkan. Selain itu diperlukan pula suatu variabel untuk mencatat banyaknya elemen yang adadi dalam array yang sekaligus menunjukkan TOS. Pada implementasi di bawah ini:
  • konstanta maxelm menyatakan banyaknya elemen maksimum yang dapat ditampung oleh stack
  • typeelemen adalah tipe data yang akan disimpan di dalam stack (bisa integer, word, real, boolean, char , string atau lainya)
  • banyak adalah field yang menyatakan banyaknya elemen dalam stack saat itu, yang sekaligus menyatakan TOS
Deklarasi tipe untuk tumpukan (stack):
type tumpukan = record
   banyak :0..maxelm;
   elemen : array[1..maxelm] of typeelemen;
end;

Selain prosedur untuk POP dan PUSH, kita dapat pula menambahkan sejumlah fungsi untuk membantu penanganan kesalahan diantaranya adalah fungsi PENUHS (untuk mengecek apakah stack penuh) fungsi KOSONGS (untuk mengecek apakah stack kosong) dan fungsi SIZES (untuk mengetahui banyaknya elemen di dalam stack). Masing-masing sub program di atas dapat disajikan pseudocode-nya sebagai berikut:

Procedure Inisialisasi(var S : tumpukan);
begin
  S. banyak¬ 0
end;

Function PENUHS(S : tumpukan): boolean;
begin
 Jika S.banyak = maxelm maka PENUHS ¬ true
 else PENUHS ¬false
end;

Function KOSONGS(S : tumpukan):boolean;
begin
 If S.banyak = 0 then KOSONGS ¬ true
 else KOSONGS¬false
end;

Procedure PUSH(data : tipeelemen; var S : tumpukan);
begin
 If not KOSONGS(S) then
 begin
  1. S.banyak ¬ S.banyak +1
  2. S.elemen[S.banyak]¬data
 end
 else
   Tampilkan pesan kesalahan "Stack Penuh"
end;

Procedure POP(var S : tumpukan; var data : typeelemen);
begin
 If not KOSONGS(S) then
 begin
  1. data¬S.elemen[S.banyak]
  2. S.banyak ¬ S.banyak - 1
 end
 else
   Tampilkan pesan kesalahan "Stack kosong"
End;

Tidak ada komentar:

Posting Komentar

Virtual Coordinator Training Batch 2 Group 11 Bersama SEAMEO

Alhamdulillah pada kesempatan kali ini saya ingin sharing mengenai kegiatan VCT batch 2 yang telah saya lalui bersama para guru hebat lainny...