Mengenal Stack dalam Pemrograman
![](https://cdn.prod.website-files.com/61af164800e38cf1b6c60b55/6690fe4b18bc882adb913ddc_stack-6690fdb0a5a1e.webp)
Stack adalah struktur data yang mengikuti prinsip LIFO (Last In, First Out), di mana elemen terakhir yang ditambahkan ke dalam stack akan menjadi yang pertama untuk dihapus atau diakses.
Dalam konteks pemrograman, operasi utama yang dilakukan pada stack adalah "push" (yang menambahkan elemen ke atas stack) dan "pop" (yang menghapus elemen teratas dari stack).
Implementasi stack biasanya menggunakan array atau struktur data linked list. Penggunaan array menyederhanakan penyimpanan karena memungkinkan indeksasi langsung. Sementara linked list memberikan fleksibilitas dalam penggunaan memori karena elemen dapat ditambahkan atau dihapus dengan mengubah pointer, tanpa perlu menggeser elemen lain dalam struktur data.
Kedua metode implementasi ini memiliki kelebihan dan kekurangan tergantung pada kebutuhan spesifik aplikasi dan batasan sistem.
Prinsip Dasar Stack
Prinsip dasar dari stack adalah model Last In, First Out (LIFO). Artinya, elemen terakhir yang ditambahkan ke dalam stack akan menjadi yang pertama dikeluarkan.
Konsep ini mirip dengan tumpukan piring, di mana user hanya bisa menambah atau mengambil piring dari bagian atas tumpukan.
Dalam stack, ada beberapa operasi dasar yang umum dilakukan, yaitu:
- Push: menambahkan elemen ke puncak stack.
- Pop: mengeluarkan elemen dari puncak stack dan mengembalikan nilai elemen tersebut.
- Peek atau top: memberikan akses ke elemen puncak stack tanpa mengeluarkannya dari stack.
- IsEmpty: memeriksa apakah stack kosong atau tidak.
- Size: mengembalikan jumlah elemen yang ada di dalam stack.
Jenis-jenis Stack
Dalam pemrograman, ada dua jenis stack yang umum diterapkan:
#1 Fixed size stack
Fixed size stack memiliki ukuran yang tetap dan tidak bisa berubah secara dinamis. Jika stack penuh dan ada upaya untuk menambah elemen, akan terjadi error overflow. Jika stack kosong dan ada upaya untuk mengambil elemen, akan terjadi error underflow.
#2 Dynamic size stack
Berbeda dengan sebelumnya, dynamic size stack ukurannya dapat bertambah atau berkurang secara dinamis. Saat stack penuh, ukurannya akan otomatis bertambah untuk menampung elemen baru, dan saat stack kosong, ukurannya bisa berkurang.
Jenis stack ini biasanya menggunakan linked list yang memudahkan penyesuaian dari ukuran stack.
Contoh Stack
Berikut beberapa contoh penggunaan stack:
- Navigasi halaman web: stack digunakan untuk mengimplementasikan fungsi tombol "kembali" dan "berikutnya" di web browser. Setiap kali user mengunjungi halaman baru, URL halaman tersebut disimpan di sebuah stack. Ketika user menekan tombol kembali, URL teratas diambil dari stack untuk mengarahkan user ke halaman sebelumnya.
- Fungsi undo dalam aplikasi: dalam aplikasi text editor atau grafis, stack digunakan saat user melakukan undo (membatalkan) tindakan terakhir. Setiap tindakan yang dilakukan user ditumpuk ke dalam stack. Saat user memilih untuk melakukan undo, tindakan terakhir diambil dari stack dan dibatalkan.
- Pengecekan kesalahan syntax dalam pemrograman: stack juga dimanfaatkan untuk memeriksa ketepatan penggunaan tanda kurung saat coding. Setiap kali tanda kurung dibuka, ia ditambahkan ke stack. Setiap kali tanda kurung ditutup, stack diperiksa untuk memastikan tanda kurung sesuai di atas stack.
- Pencocokan tag HTML: dalam web developing, stack digunakan untuk memastikan tag HTML dibuka dan ditutup dengan urutan yang benar. Hal ini melibatkan menambahkan tag pembuka ke stack, lalu mengeluarkannya ketika tag penutup yang sesuai ditemukan untuk memastikan struktur yang benar.
FAQ (Frequently Asked Question)
Apa perbedaan antara stack dan queue?
Stack dan queue adalah struktur data yang digunakan untuk menyimpan data sementara, namun keduanya memiliki prinsip akses yang berbeda.
Stack mengikuti prinsip LIFO (Last In, First Out). Artinya, elemen terakhir yang masuk akan menjadi yang pertama keluar. Sedangkan queue mengikuti prinsip FIFO (First In, First Out), di mana elemen pertama yang masuk akan menjadi yang pertama keluar.
Berikut tabel perbedaan keduanya:
![](https://cdn.prod.website-files.com/61af164800e38cf1b6c60b55/6690fe425186c55513a070ee_AD_4nXeFE2Mog1--t6pMIWPv2Lm6ossbv-ASKawvYTdhPhYSjaLtchi3dU8uN7R9ANcP0l7_K92MWlymLoNuo_svfmJ_13K2wKITIGGZ0slqBdcPFgTjfx832czU9pajBVRozdxC7LAUyYFpa6bbOzUEC15oJl0.webp)