[S]tack merupakan suatu struktur data yang berbentuk tumpukan di mana proses memasukkan dan mengeluarkan data dilakukan pada satu “pintu” yang sama. Hal ini berbeda dengan struktur data Queue/antrian yang menggunakan dua “pintu”, satu pintu untuk masuk antrian dan pintu lainnya untuk keluar dari antrian.
Stack atau tumpukan biar mudah memahaminya bisa diibaratkan sebagai suatu tumpukan kardus di mana hanya data yang terletak paling atas yang bisa diambil. Data yang terletak ditengah-tengah atau pun yang berada paling bawah bisa diambil jika data yang terletak di atasnya sudah diambil terlebih dahulu.
Struktur data Stack merupakan struktur data yang bersifat LIFO (Last in First Out) artinya data yang masuk terakhir adalah data yang bisa keluar terlebih dahulu.
Perhatikan gambar ilustrasi di bawah.
Data E adalah data yang terakhir dimasukkan (method Push) oleh karenanya berada pada posisi paling atas. Jika ingin mengambil data B maka terlebih dahulu harus mengeluarkan (method Pop) berturut-turut data E, D dan C.
Oke, berikut adalah method-method yang wajib ada pada sebuah struktur data Stack:
1. Push, digunakan untuk memasukkan data ke dalam Stack
2. Pop, digunakan untuk mengeluarkan data teratas dari Stack
3. Peek, digunakan untuk melihat data yang berada di posisi paling atas
4. Count, digunakan untuk mengetahui jumlah isi data pada Stack
5. Clear, digunakan untuk mengapus seluruh data yang ada pada Stack
Stack, karena bersifat menyimpan data maka memerlukan struktur data yang lain, dalam kasus ini saya gunakan ArrayList.
Berikut adalah implementasi Stack dalam bahasa pemrograman Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com.agungsetiawan.interview.stack; import java.util.ArrayList; import java.util.List; /** * * @author Agung Setiawan */ public class Stack { private List<Object> list=new ArrayList<Object>(); private int currentIndex=-1; public void push(Object object){ list.add(object); currentIndex++; } public Object pop(){ Object object=list.remove(currentIndex); currentIndex--; return object; } public int count(){ return list.size(); } public Object peek(){ return list.get(currentIndex); } public void clear(){ list.clear(); currentIndex=-1; } } |
Mari kita bahas line per line.
1 2 |
private List<Object> list=new ArrayList<Object>(); private int currentIndex=-1; |
ArrayList di sini digunakan untuk menyimpan objek yang dimasukkan ke Stack. Seperti sudah saya katakan tadi bahwa Stack butuh struktur data lain untuk menyimpan data. Selanjutnya variabel currentIndex digunakan untuk menandai index teratas pada list. Index teratas adalah 0 oleh karena itu variabel ini bernilai awal -1.
1 2 3 4 |
public void push(Object object){ list.add(object); currentIndex++; } |
Method di atas digunakan untuk menambah data ke dalam Stack yang sebenarnya adalah menambah data ke dalam array list, kemudian nilai currentIndex dinaikkan sebesar 1 angka.
1 2 3 4 5 |
public Object pop(){ Object object=list.remove(currentIndex); currentIndex--; return object; } |
Berkebalikan dengan push, pop digunakan untuk membuang data dari Stack (data teratas). Karena dalam Stack yang dikeluarkan adalah data teratas maka kita perlu mengetahui index teratas dari list maka digunakanlah variabel currentIndex tadi. Setelah data dibuang selanjutnya nilai dari currentIndex dikurangi sebesar 1 angka.
1 2 3 |
public int count(){ return list.size(); } |
Method di atas dipanggil untuk mengetahui jumlah data pada Stack. Sesugguhnya yang dipanggil adalah method pada array list untuk mengetahui jumlah datanya.
1 2 3 |
public Object peek(){ return list.get(currentIndex); } |
peek() berfungsi melihat data teratas yang ada pada Stack. Lagi, karena melihat data teratas perlu mengetahui index teratas seperti layaknya melakukan pop maka variabel currentIndex memegang peranan penting.
1 2 3 4 |
public void clear(){ list.clear(); currentIndex=-1; } |
Terakhir adalah method clear yang digunakan untuk menghapus seluruh data pada Stack dan mengembalikan index ke nilai semula.
Silahkan coba kelas ini pada method main atau coba tes menggunakan JUnit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package com.agungsetiawan.interview; import com.agungsetiawan.interview.stack.Stack; import java.util.List; public class App { public static void main( String[] args ){ Stack stack=new Stack(); stack.push("Agung"); stack.push("Setiawan"); stack.push("http://agung-setiawan.com"); int count=stack.count(); Object object=stack.peek(); System.out.println("Jumlah Data Pada Stack : "+count); System.out.println("Data Teratas Pada Stack : "+object); System.out.println("==================================="); object=stack.pop(); System.out.println("Objek yang dikeluarkan (Pop) : "+object); count=stack.count(); System.out.println("Jumlah Data Pada Stack setelah Pop: "+count); object=stack.peek(); System.out.println("Data Teratas Pada Stack setelah Pop: "+object); } } |
Ouput program pada console :
1 2 3 4 5 6 |
Jumlah Data Pada Stack : 3 Data Teratas Pada Stack : http://agung-setiawan.com =================================== Objek yang dikeluarkan (Pop) : http://agung-setiawan.com Jumlah Data Pada Stack setelah Pop: 2 Data Teratas Pada Stack setelah Pop: Setiawan |
Semoga bermanfaat tulisan mengenai stack java ini 🙂
Tetap mampir ke sini karena pada kesempatan mendatang saya akan menulis salah satu implementasi Stack dalam ilmu komputer
[followme]
mas master tlong bantuannya ya,,,, gimana ya cara bikin program DOUBLE LINKED LIST, untuk mendata data dari suatu nasabah Bank yang terdiri dari NOMER NASABAH, NAMA NASABAH, dan SALDO TABUNGAN. Yang harus anda buat adalah program : – TAMBAH DATA, yaitu program untuk menambah data di depan, di tengah, dan di belakang. – TAMPIL DATA, yaitu program untuk menampilkan DATA NASABAH secara urut ascending sesuai dengan SALDO NASABAH. mohon bantuanya, trimakasih…
Min, mau request buat yang queue dong. Materi seperti Stack ini sangat membantu 😀 makasih ya min. Ditunggu materi Queue-nya 😀
mantap sangat membantu ..