Salah satu konsep yang sangat berguna di dalam Ilmu Komputer

advertisement
STACK (TUMPUKAN)
Salah satu konsep yang sangat berguna di dalam Ilmu Komputer adalah satu bentuk
struktur data yang disebut tumpukan (stack). Dalam bab ini kita akan mencoba
menggali mengapa tumpukan sangat berguna dan memainkan peranan penting dalam
pemrograman dan bahasa pemrograman. Juga akan disajikan contoh-contoh program
untuk lebih memahami pemakaian tumpukan.
Pengertian Tumpukan
Secara sederhana, tumpukan bisa diartikan sebagai suatu kumpulan data yang seolaholah ada data yang diletakkan di atas data yang lain. Satu hal yang perlu kita ingat
adalah bahwa kita bisa menambah (menyisipkan) data, dan mengambil (menghapus)
data lewat ujung yang sama, yang disebut sebagai ujung atas tumpukan (top of stack).
Untuk menjelaskan pengertian di atas kita ambil contoh sebagai berikut. Misalnya kita
mempunyai dua buah kotak yang kita tumpuk, sehingga kotak kita tumpukan di atas
kotak yang lain. Jika kemudian tumpukan dua buah kotak itu kita tambah dengan
kotak ketiga, keempat dan seterusnya, maka akan kita peroleh sebuah tumpukan
kotak, yang terdiri dari N kotak.
Secara sederhana, sebuah tumpukan bisa kita ilustrasikan seperti gambar berikut.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 1
Dari gambar ini kita bisa mengatakan bahwa kotak B ada di atas kotak A dan ada di
bawah kotak C. Gambar tersebut menunjukkan bahwa dalam tumpukan kita hanya
bisa menambah atau mengambil sebuah kotak lewat satu ujung, yaitu bagian atas.
Dapat dilihat pula bahwa tumpukan merupakan kumpulan data yang sifatnya dinamis,
artinya kita bisa menambah dan mengambil data darinya.
Timbul pertanyaan, ujung yang manakah yang kita anggap sebagai ujung atas
tumpukan tersebut. Untuk menjawab pertanyaan ini kita harus menentukan ujung
yang mana yang kita gunakan untuk mengambil atau menyisipkan data yang baru.
Dengan penggambaran tumpukan seperti gambar tadi, kita menganggap atau memilih
bahwa kotak F adalah bagian atas dari tumpukan tersebut. Jika ada kotak lain yang
akan disisipkan, maka ia akan diletakkan di atas kotak F, dan jika ada kotak yang
akan diambil, maka kotak F lah ayng akan diambil pertama kali.
Tumpukan merupakan suatu seratai (list) yang mempunyai sifat “masuk terakhir
keluar pertama” (last in first out - LIFO).
Penyajian Tumpukkan
Sebelum kita melihat pada operasi dasar pada sebuah tumpukan, kita akan melihat
terlebih dahulu bagaimana penyajian sebuah tumpukan dalam Bahasa Pemrograman
Pascal. Ada beberapa cara untuk menyajikan sebuah tumpukan.
Dalam Pascal kita mengenal tipe data tersetruktur yang disebut larik (array). Dengan
demikian kita bisa menggunakan larik ini untuk menyajikan sebuah tumpukan. Tetapi
bisa segera kita liaht bahwa penyajian tumpukan menggunakan larik adalah kurang
tepat. Alasannya adalah bahwa banyaknya elemen dalam larik tidak dapat diubah
(statis), sedangkan dalam tumpukan banyaknya elemen bisa sangat bervariasi
(dinamis). Oleh karena itu dalam penggunaan tumpukan lebih baik menggunakan
linked list (senarai berantai).
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 2
Operasi pada tumpukan
Ada dua operasi dasar yang bisa kita laksanakan pada sebuah tumpukan, yaitu operasi
menyisipkan data, atau mempush data, dan operasi menghapus data atau mempop
data. Karena ke dalam tumpukan kita bisa mempush data, maka tumpukan juga sering
disebut dengan pushdown list.
Operasi Push
Operasi push adalah operasi untuk menambahkan sebuah elemen paling atas dari
sebuah tumpukan.
Pemeriksaan yang dilakukan untuk operasi push adalah melihat isi tumpukan pada
saat itu, jika pointer Berikut dari data Stack tidak kosong / nil (terdapat lebih dari
satu data) maka pointer Berikut pada data Baru diset ke alamat yang sama pada
pointer Berikut pada data Stack. Kemudian pointer Berikut pada Stack diset ke
alamat data Baru.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 3
Jika pointer Berikut pada Stack kosong / nill maka pointer Berikut pada Stack
diset ke alamat data Baru.
procedure PUSH (var Stack : Tumpukan; Data : char);
var Baru : Tumpukan;
begin
new(Baru);
with Baru^ do
begin
Info := Data;
Berikut := nil;
end;
if Stack^.Berikut <> nil then
begin
Baru^.Berikut := Stack^.Berikut;
Stack^.Berikut := Baru
end
else
begin
Stack^.Berikut := Baru
end
end;
Operasi POP
Operasi pop adalah operasi untuk menghapus elemen yang terletak pada posisi paling
atas dari sebuah tumpukan.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 4
Di dalam prosedur POP terdapat dilakukan pemeriksaan terhadap ada tidaknya
tumpukan, sebab tumpukan kosong pada senarai berantai akan bernilai nil dan nilai.
Operasi yang dilakukan pada prosedur ini adalah mengambil data pada tumpukan
teratas, kemudian tumpukan kedua dari atas pointernya diset nil sebab tumpukan level
ini (kedua dari atas) akan menjadi level teratas, kemudian data tumpukan teratas
dihapus (dispose).
procedure POP (var Stack : Tumpukan; var Kosong : boolean; var Data : char);
var Bantu : Tumpukan;
begin
Data := ' ';
if Stack^.Berikut = nil then
Kosong := true
else
begin
Kosong := false;
Bantu := Stack^.Berikut;
Data := Bantu^.Info;
Stack^.Berikut := Bantu^.Berikut;
dispose(Bantu)
end
end;
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 5
Contoh Pemakaian Tumpukan dengan Senarai Berantai
Berikut ini adalah contoh penggunaan tumpukan untuk membalikan sebuah kata
dengan senarai berantai.
program BALIK_KALIMAT;
uses crt;
type Tumpukan = ^Elemen;
Elemen
= record
Info : char;
Berikut : Tumpukan
end;
var DataStack : Tumpukan;
Kalimat : String;
I : integer;
StatusKosong : boolean;
Huruf : char;
procedure INISIALISASI_TUMPUKAN (var Stack : Tumpukan);
begin
new(Stack);
Stack^.Berikut := nil
end;
procedure PUSH (var Stack : Tumpukan; Data : char);
var Baru : Tumpukan;
begin
new(Baru);
with Baru^ do
begin
Info := Data;
Berikut := nil;
end;
if Stack^.Berikut <> nil then
begin
Baru^.Berikut := Stack^.Berikut;
Stack^.Berikut := Baru
end
else
begin
Stack^.Berikut := Baru
end
end;
procedure POP (var Stack : Tumpukan; var Kosong : boolean; var
Data : char);
var Bantu : Tumpukan;
begin
Data := ' ';
if Stack^.Berikut = nil then
Kosong := true
else
begin
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 6
Kosong := false;
Bantu := Stack^.Berikut;
Data := Bantu^.Info;
Stack^.Berikut := Bantu^.Berikut;
dispose(Bantu)
end
end;
begin
clrscr;
INISIALISASI_TUMPUKAN (DataStack);
writeln('TUMPUKAN UNTUK MEMBALIKAN KALIMAT');
writeln('---------------------------------');
writeln('');
write('KALIMAT ASLI
: '); readln(Kalimat);
for I := 1 to length(Kalimat) do
PUSH(DataStack, Kalimat[I]);
write('SETELAH DIBALIK : ');
while StatusKosong = false do
begin
POP(DataStack, StatusKosong, Huruf);
write(Huruf);
end;
dispose(DataStack);
readln;
end.
Pusat Pengembangan Pendidikan – Universitas Gadjah Mada 7
Download