STACK (TUMPUKAN)
Secara sederhana diartikan dengan
:
·
Sebagai tumpukan dari
benda
·
Sekumpulan data yang
seolah-olah diletakkan di atas data yang lain
·
Koleksi dari
objek-objek
Dengan melihat definisi tersebut
maka jelas bahwa pada stack berlaku aturan LIFO (First In Firs Out) yaitu
elemen yang terakhir masuk akan pertama kali diambil atau dilayani.
ILUSTRASI STACK
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, selanjutnya
meletakkan piring kedua di atas piring pertama dan demikian seterusnya. Pada
saat kita akan mengambil satu piring maka yang diambil piring yang paling atas.
ILUSTRASI STACK-CONT
OPERASI PADA STACK
2 operasi dasar yang
dapat dilaksanakan pada sebuah stack, yaitu :
ü
Operasi
Push (menyisipkan data) memasukkan data ke dalam stack.
ü
Opersi
Pop (menghapus data) menghapus
elemen yang terletak pada posisi paling atas dari sebuah stack.
Contoh pemakaian operasi pust dan
pop dan isi stack untuk setiap selesai eksekusi satu operasi.
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
|
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
PEMOGRAMAN
·
Implementasi dalam
bahasa Pascal dapat dilakukan denagnmemanfaatkan struktur data record dan
array. Arraydipergunakan untuk menyimpan elemen-elemen yang
dimasukkan. Selain itu diperlukan pula suatu variabel untuk mencatat banyaknya
elemen yang ada di dalam array yang sekaligus menggunakan IOS.
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
lainnya). Banyak field yang menyatakan elemen dalam stack saat itu, yang
sekaligus menyatakan TOS (Top of the stack)
DEKLARASI TIPE UNTUK TUMPUKAN
(STACK)
Type tumpukan = record
Banyak
: 0..maxelm;
Elemen
: array[1..maxelm] of typeelemen;
End;
CONT
·
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)
fungsi SIZES (untuk mengetahui banyaknya elemen di dalam
stack). Masing-masing sub program di atas dapat disajikan pseudocode-nya
sebagai berikut :
Ø
PSEUDOCODE
o Procedure Inisialisasi(var S :
tumpukan);
begin
S. banyak-0
end;
o
Function PENUHS(S : tumpukan):
boolean;
begin
Jika S.banyak =
maxelm maka PENUHS - true
else PENUHS - false
end;
Ø
PSEUDOCODE
CONT
o Function KOSONGS(S :
tumpukan):boolean;
begin
If S.banyak = 0 then KOSONGS - true
else KOSONGS - false
end;
o
Procedure PUSH(data :
tipelemen; var S : tumpukan);
begin
If not KOSONGS(S) then
begin
S.banyak - S.banyak
+ 1
S.elemen[S.banyak]- data
end
else
Tampilan pesan kesalahan “Stack Penuh”
end;
o
Procedure POP(var S :
tumpukan; var data : typeelemen);
begin
if not KOSONGS(S) then
begin
data S.elemen[S.banyak]
S.banyak S.banyak
-1
end
else
Tampilan pesan kesalahan “Stack
Kosong”
End:
PENJELASAN OPERASI PADA STACK
v
Buat stack (stack) –
create
Membuat sebuah stack baru yang masih kosong.
#Spesifikasi
§
Tujuan :
mendefinisikan stack yang kosong
§
Input :
stack
§
Syarat
awal : tidak ada
§
Output
stack : - (kosong)
§
Syarat
aktif : stack dalam keadaan kosong
v Stack kosong (stack) – empty
Fungsi untuk menentukan apakah stack dalam keadaan kosong atau tidak.
#Spesifikasi
§
Tujuan :
mengecek apakah stack dalam keadaan kosong
§
Input :
stack
§
Syarat awlal :
tidak ada
§
Output :
boolean
§
Syarat akhir :
stack kosong bernilai true jika stack dalam keadaan kosong.
v
Stack penuh (stack) –
full
Fungsi untuk memeriksa apakah stack yang ada sudah penuh.
#Spesifikasi
§
Tujuan :
mengecek apakah stack dalam keadaan penuh
§
Input :
stack
§
Syarat awlal :
tidak ada
§
Output :
boolean
§
Syarat akhir :
stack kosong bernilai true jika stack dalam keadaan penuh.
v
Push (stack, info
baru)
Menambahkan sebuah elemen ke dalam
stack
#Spesifikasi
§
Tujuan :
menambahkan elemen, info baru pada stack pada posisi paling atas.
§
Input :
stack dan info baru
§
Syarat awlal :
stack tidak penuh
§
Output :
stack
§
Syarat akhir :
stack bertambah satu elemen.
QUEUE (ANTRIAN)
DEFINISI
o
Queue adlah suatu
linear lish dimana operasi DELETE terjadi pada sisi
depan (FRONT) dan operasi INSERT terjadi pada
sisi belakang(REAR).
Jika diberikan suatu Queue Q
dengan elemen-elemennya yang terdiri atas Q1, Q2,
...., QT maka queue Q dituliskan :
Q
= [ Q1, Q2, ...., QT ]
·
FRONT (Q) = Q1
·
REAR (Q) = QT
o Selanjutnya untuk menyatakan
jumlah elemen dalam suatu queue Q digunakan notasi NOEL (Q).
o Catatan : Satu pengoperasian berlaku
hanya untuk satu elemen.
CONT.
o
Pada queue prinsip
yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (Firs In Firs
Out).
o
Data-data di dalam
antrian dapat bertipe integer, real, record
ILUSTRASI QUEUE
OPERASI-OPERASI PADA QUEUE (Q)
o
Terdapat empat
operasi dasar yang didefinisikan pada queue, yaitu :
1. CREATE
Bentuk
umum :
CREATE (Queue)
Suatu operasi CREATE (Q) akan
menghasilkan suatu queue kosong dengan nama Q, dan didefinisikan bahwa :
NOEL
(CREATE (Q)) =
0
FRONT
(CREATE (Q)) =
tidak terdefinisi
REAR (CREATE
(Q)) =
tidak terdefinisi
2. ISEMPTY
Bentuk umumnya adalah : INEMPTY
(queue)
Jika Q adalah Queue, maka
ISEMPTY(Q) adalah suatu operasi yang digunakan untuk memeriksa apakah Queue Q
adalah queue kosong. Jika hasil dari operasi ini akan berjenis data boolean
(true/false),dengan bentuk sebagai berikut :
ISEMPTY(Q) =
True, jika Q adalah queue kosong
=
False, jika Q bukan queue kosong
3. INSERT
Bentuk Umumnya : INSERT (Elemen,
Queue)
INSERT(E,Q), dimana E = elemen
dan Q = queue, adalah suatu operasi yang digunakan untuk memasukkan elemen E ke
dalam queue Q.
Didefinisikan, bahwa elemen E
akan menjadi elemen yang berada pada posisi REAR dan queue Q. Akibat dari
operasi ini adalah :
- REAR(insert(E,Q))
= E
- NOEL(Q)
bertambah satu dan QNOEL adalah E
Jika Q adalah queue kosong, maka :
ISEMPTY(INSERT(E,Q))
= False
Dalam bentuk statemen Pascal,
biasanya dituliskan :
IF
ISEMPTY(Q) Then front (insert(E,Q)) = E
Else
front(insert(E,Q = front(Q);
4. REMOVE
Bentuk umum : REMOVE(elemen,
queue)
REMOVE(Q) berarti mengeluarkan
elemen Q yang berada pada posisi FRONT. Akibat dari operasi ini, elemen Q akan
berkurang satu dan elemen kedua (elemen yang berada disebelahnya) akan menjadi
elemen yang berada pada posisi FRONT dari queue Q ini.
Selanjutnya, jika Q adalah queue
kosong, maka REMOVE(Q) akanmenghasilkan suatu Error.
IF
NOEL(Q) = 0 Then Remove(Q) = erroe_condition
Remove(create(Q))
= error_condition
DEKLARASI QUEUE DALAM PASCAL
·
Dalam bahasa
pemrograman biasanya tidak ada fasilitas queue (built in queue). Untuk
itu setiap programmer harus mendefinisikan sendiri dengan bantuan fasilitas
yang ada. Pada umumnya fasilitas yang digunakan untuk mendeklarasikan queue
adalah Array, Bentuk deklarasinya dalam bahasa sebagai berikut :
TYPE
StrukQueue = Record
Q
: Array[1...100] of integer;
Front,
Rear : Integer;
End;
VAR Q : StrukQueue;