Advertisements
LINEAR
LIST
Linear List adalah
suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear list A yang terdiri atas T buah
elemen sebagai berikut :
A
= [a1, a2, ..........,
aT]
Jika T = 0, maka A
dikatakan sebagai “Null List”.
Suatu elemen dari
sembarang posisi pada linear list A dapat dihilangkan. Sebaliknya, suatu elemen
baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada
list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap
saat.
DEFINISI STACK
Stack
adalah suatu bentuk khusus dari linear list di mana operasi penyisipan dan
penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja
yang disebut sebagai “TOP”.
Misal diberikan
Stack S sebagai berikut :
S = [ S1, S2, ..........,
ST ] maka TOP(S) = ST.
Untuk menunjukkan
jumlah elemen suatu stack digunakan notasi NOEL.
Dari stack di atas, maka NOEL(S) = T.
Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat
digambarkan sebagai berikut :
OPERASI
DASAR PADA STACK
1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen,stack)
4. POP(stack)
CREATE
Operator ini berfungsi untuk membuat
sebuah stack kosong dan didefinisikan bahwa :
NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null
ISEMPTY
Operator ini berfungsi untuk menentukan
apakah suatu stack adalah stack kosong. Operasinya akan bernilai boolean,
dengan definisi sebagai berikut :
ISEMPTY(S)
= true, jika S adalah stack kosong
= false, jika S bukan stack kosong
atau
ISEMPTY(S)
= true, jika NOEL(S) = 0
= false, jika NOEL(S) 0
Catatan
: ISEMPTY(CREATE(S)) = true.
PUSH
Operator ini berfungsi untuk menambahkan
satu elemen ke dalam stack. Notasi yang digunakan adalah :
PUSH(E,S)
Artinya
: menambahkan elemen E ke dalam stack S.
Elemen
yang baru masuk ini akan menempati posisi TOP.
Jadi : TOP(PUSH(E,S))
= E.
Akibat
dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S)
menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) =
false).
POP
Operator ini berfungsi untuk mengeluarkan
satu elemen dari dalam stack. Notasinya :
POP(S)
Elemen yang keluar dari dalam stack adalah
elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack
akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah.
Operator POP ini tidak dapat digunakan pada stack kosong, artinya :
POP(CREATE(S)) = error condition
Catatan : TOP(PUSH(E,S)) = E
DEKLARASI
STACK PADA BAHASA PEMROGRAMAN
Dalam bahasa pemrograman, untuk menempatkan
stack biasanya digunakan sebuah array. Tetapi perlu diingat di sini bahwa stack
dan array adalah dua hal yang berbeda. Misalkan suatu variabel S adalah sebuah
stack dengan 100 elemen. Diasumsikan elemen S adalah integer dan jumlah
elemennya maksimum adalah 100 elemen. Untuk mendeklarasikan stack dengan menggunakan
array, harus dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan
indeks dari array. Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang
berada pada posisi TOP dalam stack tersebut. Selanjutnya gabungan kedua
variabel ini diberi nama STACK_STRUCT. Kemudian didefinisikan bahwa :
NOEL(S)
= TOP_PTR
ISEMPTY(S) = TRUE, jika
TOP_PTR = 0 dan
FALSE, jika TOP_PTR > 0.
Maka bentuk deklarasinya dalam PASCAL adalah
:
TYPE Stack_Struct = Record
Stack
: array[1..100] of integer;
TopPtr : integer;
End;
VAR S : Stack_Struct;
Selanjutnya, untuk keperluan operasi PUSH
dan POP harus dibuat suatu prosedur tersendiri, yaitu :
PROCEDURE
PUSH(Eon : integer);
Begin
If (S.TopPtr <
NoelMax) Then Begin
S.TopPtr
:= S.TopPtr + 1;
S.Stack
[S.TopPtr] := Eon
End
Else
Overflow_Condition
End;
PROCEDURE POP(Eoff : integer);
Begin
If (S.TopPtr > 0)
Then Begin
Eoff
:= S.Stack[S.TopPtr];
S.TopPtr
:= S.TopPtr - 1
End
Else
Underflow_Condition
End;
Catatan
:
Overflow adalah suatu keadaan di mana kita melakukan
operasi PUSH terhadap stack dalam keadaan penuh. Underflow adalah keadaan di mana kita melakukan operasi POP
terhadap stack kosong. Eon adalah
elemen yang akan dimasukkan ke dalam stack dan Eoff adalah elemen yang akan dikeluarkan dari dalam stack.
PENGGUNAAN/APLIKASI
STACK
Logika stack digunakan untuk menyelesaikan
berbagai macam masalah. Antara lain digunakan pada compiler, operating system
dan dalam program-program aplikasi. Berikut ini tiga buah contoh aplikasi
stack, yaitu :
MATCHING
PARENTHESES
Proses ini dilakukan compiler untuk
memeriksa kelengkapan tanda kurung yang terdapat pada suatu ekspresi aritmetik.
Sedangkan stack di sini digunakan sebagai tempat prosesnya. Algoritma yang
digunakan adalah :
1. Elemen-elemen suatu ekspresi
aritmetik (string) di-Scan dari kiri ke kanan.
2. Jika ditemukan simbol
"(" atau "Left parenthesis", maka simbol tersebut di-push
ke dalam stack.
3. Jika ditemukan simbol
")" atau "Right parenthesis", maka isi stack diperiksa.
Jika
stack kosong terjadi kesalahan.
berarti : ada simbol
")", tetapi tidak ada simbol "(" yang seharusnya
mendahului.
Jika
stack tidak kosong artinya ada pasangannya dan langsung di-POP
keluar stack.
Misalkan NEXT CHAR adalah suatu karakter
terakhir dalam suatu string. Berikut ini bentuk flowchart (logika proses) yang
digunakan pada proses matching ini :
NOTASI
POSTFIX
Bentuk aplikasi stack yang lain adalah
mengubah suatu ekspresi aritmatik (string) ke dalam notasi postfix. Notasi
postfix ini digunakan oleh compiler untuk menyatakan suatu ekspresi aritmatik
dalam bahasa tingkat tinggi (high level language). Stack digunakan oleh
compiler untuk mentransformasikan ekspresi aritmatik menjadi suatu ekspresi
dalam bentuk/notasi postfix.
Contoh :
Misal diberikan ekspresi aritmatik : A + B ;
Maka bentuknya dalam notasi postfix menjadi
: AB+
Urutan (prioritas)
dari operator adalah :
1. Perpangkatan
(^)
2. Perkalian
(*) atau Pembagian (/)
3. Penjumlahan
(+) atau Pengurangan (-)
Aturan yang
digunakan dalam proses transformasi tersebut adalah :
1. Ekspresi aritmatik yang diberikan di-
"Scan" dari kiri ke kanan.
2. Bila simbol yang di-scan adalah
"(", maka simbol tersebut di push ke dalam stack.
3. Bila
simbol yang di-scan adalah ")", maka seluruh isi stack di pop keluar
mulai dari simbol "(" yang pertama ditemukan dalam stack.
4. Bila
simbol adalah operator, maka dilakukan perbandingan dulu dengan simbol
(operator) yang berada pada posisi top dalam stack.
a. Jika
derajatnya setara atau lebih rendah dari simbol yang berada pada posisi top,
maka top stack di-pop keluar sebagai output dan simbol yang baru di-push ke
dalam stack.
b. Jika derajatnya
lebih tinggi dari simbol yang berada pada posisi top, maka simbol (operator)
yang di-scan tersebut di-push ke dalam stack.
5. Bila
simbol yang di-scan adalah operand, maka simbol tersebut langsung sebagai
output.
6. Bila
simbol adalah ";" maka seluruh isi stack di-pop sebagai output.
Contoh :
Misal diberikan sebuah ekspresi aritmatik dengan
bentuk sbb:
(
(A + B) * C / D + E ^ F ) / G ;
Selanjutnya akan dicari bentuk ekspresi diatas
dalam notasi postfix.
Proses yang dilakukan dapat digambarkan dalam tabel
berikut :
Urutan
Proses
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
Simbol
Yang di
Scan
|
(
|
(
|
A
|
+
|
B
|
)
|
*
|
C
|
/
|
D
|
+
|
E
|
^
|
F
|
)
|
/
|
G
|
;
|
Top
|
(
|
(
|
(
|
+
|
+
|
(
|
*
|
*
|
/
|
/
|
+
|
+
|
^
|
^
|
|
/
|
/
|
|
|
|
(
|
(
|
(
|
(
|
|
(
|
(
|
(
|
(
|
(
|
(
|
+
|
+
|
|
|
|
|
|
|
|
|
(
|
(
|
|
|
|
|
|
|
|
(
|
(
|
|
|
|
|
Output
|
|
|
A
|
|
B
|
+
|
|
C
|
*
|
D
|
/
|
E
|
|
F
|
^+
|
|
G
|
/
|
Jadi ekspresi aritmatik
: ( ( A + B ) * C / D + E^F ) / G ;
dalam notasi postfix menjadi : AB+D*C/EF^+G/
PROSES
REKURSIF
Stack juga dapat digunakan untuk menelurusuri
suatu program atau procedure yang rekursif.
Berikut ini sebuah contoh yang menyelesaikannya menggunakan proses
rekursif.
Persoalan :
Agar
diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan datang, berapakah banyak uang yang harus didepositokan
saat ini. dianggap bahwa tingkat bunga tidak berubah selama 25 yahun yaitu
sebesar 8% per_tahun.
Penyelesaian :
Untuk
menyelesaikan masalah ini akan digunakan logika stack yatiu :
- pada
tahun ke-25 jumlah uang = Rp. 1.000.000,-
- pada
tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
- pada
tahun ke-23 jumlah uang =
.
dst
Berikut ini sebuh
program PASCAL yang mengandung suatu procedure rekursif untuk menghitung jumlah
uang diinginkan.
PROGRAM DEPOSITO ;
CONST Goal
= 1000000;
Rate = 0.08;
VAR Ju
: Real;
Thn: Integer;
PROCEDURE Hitung (VAR Thn : Integer);
BEGIN
IF (Thn > 0) THEN
BEGIN
Ju
:= Ju/(1.0 + Rate);
Thn
:= Thn - 1;
Hitung(Thn);
END;
END;
BEGIN
Thn := 25;
Ju := Goal;
HITUNG(Thn);
WRITE(Ju);
END.
Artikel Terkait
Advertisements
Title : MATERI STACK
Description : LINEAR LIST Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear...
Description : LINEAR LIST Linear List adalah suatu struktur data yang merupakan himpunan terurut. Misal didefinisikan suatu linear...
0 Response to "MATERI STACK"
Post a Comment