2.1 Stack

- HOME -

stack adalah struktur data yang konsep dasarnya dapat digambarkan seperti sebuah tumpukan piring

bayangkan saja, anda sedang mencuci piring. tiap kali kita selesai mencuci sebuah piring, kita selalu meletakkannya di atas piring yang lain, bukan ?

kalo anda masih tidak bisa membayangkan, cepat ambil beberapa piring, lalu cuci. awalnya anda mencuci sebuah piring, lalu meletakkannya di atas meja. kemudian setelah mencuci piring berikutnya, anda pasti meletakkannya di atas piring sebelumnya ( bukan "pasti" sih sebenarnya (: , tapi dianggap gitu gak pa-pa kan ? ).

kemudian, jika anda ingin mengambil piring dari tumpukan, anda pasti mengambil piring yang paling atas, ato piring terakhir yang anda letakkan - butuh keahlian khusus untuk mengambil piring yang paling bawah, iya gak ? (; - inilah yang disebut LIFO ( Last In First Out ), piring yang terakhir diletakkan adalah piring yang pertama diambil.

dalam implementasi-nya di FreePascal, kita gunakan struktur data Array. secara visual dapat digambarkan sebagai berikut :::::

....
data ke-i
....
data ke-3
data ke-2
data ke-1

jika kita punya data = { 90, 23, 34, 55, 3, 0 }, maka dalam array dapat digambarkan sebagai :::

indeks element
6 0
5 3
4 55
3 34
2 23
1 90

dan jika kita masukkan data ke-7 yaitu {12}, maka array akan menjadi :::

indeks element
7 12
6 0
5 3
4 55
3 34
2 23
1 90

salah satu problem yang memanfaatkan 'stack' adalah pembalik kata

Problem 2.1 Pembalik Kata
buatlah sebuah program untuk membalik kata. misalnya = this is my website, menjadi = etisbew ym si siht . Input berupa string dan panjangnya tidak lebih dari 100 character. Output adalah hasil pembalikan

Problem Solving
seperti kita tahu, bahwasanya string merupakan suatu jenis array yang bertipe char, ato bisa kita tuliskan menjadi :::
type         STRING = Array [0..255] of char ; ( dalam bahasa Free Pascal )

jadi, misalnya kita membaca input dengan readln(myStr) ; dan inputnya ==> "this is my website", maka secara otomatis variabel myStr --- yang bertipe String tentunya --- akan menjadi ::::

indeks element
18 e
17 t
16 i
15 s
14 b
13 e
12 w
11 [ spasi ]
10 y
9 m
8 [ spasi ]
7 s
6 i
5 [ spasi ]
4 s
3 i
2 h
1 t
0 chr(18)

dan solusinya, kita ambil tiap karakter dari atas ke bawah.
kodenya
for i := length(mystr) downto 1 do write(mystr[i]);
mudah, bukan ? ;)

visualisasinya menjadi :::

OUTPUT
[masih kosong]

MyStr
indeks element
18 e
17 t
16 i
15 s
14 b
13 e
12 w
11 [ spasi ]
10 y
9 m
8 [ spasi ]
7 s
6 i
5 [ spasi ]
4 s
3 i
2 h
1 t
0 chr(18)
---- LOOP 1 ----
OUTPUT
e

MyStr
indeks element
17 t
16 i
15 s
14 b
13 e
12 w
11 [ spasi ]
10 y
9 m
8 [ spasi ]
7 s
6 i
5 [ spasi ]
4 s
3 i
2 h
1 t
0 chr(18)
---- LOOP 2 ----
OUTPUT
et

MyStr
indeks element
16 i
15 s
14 b
13 e
12 w
11 [ spasi ]
10 y
9 m
8 [ spasi ]
7 s
6 i
5 [ spasi ]
4 s
3 i
2 h
1 t
0 chr(18)
---- LOOP 3 ----
OUTPUT
eti

MyStr
indeks element
15 s
14 b
13 e
12 w
11 [ spasi ]
10 y
9 m
8 [ spasi ]
7 s
6 i
5 [ spasi ]
4 s
3 i
2 h
1 t
0 chr(18)
---- LOOP 3 ----
OUTPUT
etis

MyStr
indeks element
14 b
13 e
12 w
11 [ spasi ]
10 y
9 m
8 [ spasi ]
7 s
6 i
5 [ spasi ]
4 s
3 i
2 h
1 t
0 chr(18)

dan seterusnya, sampai ....
---- LOOP length(myStr) ----
OUTPUT
etisbew ym si siht

MyStr
indeks element
0 chr(18)

yach, saya rasa materi stack sudah selesai.


Copyright 2004 by Floyd
Hosted by www.Geocities.ws

1