
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
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 :::
| 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) |
| 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) |
| 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) |
| 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) |
| 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) |
| indeks | element |
| 0 | chr(18) |
yach, saya rasa materi stack sudah selesai.