Dalam ilmu komputer, tumpukan (bahasa Inggris: stack) adalah struktur data linear yang mengikuti prinsip LIFO (Last In, First Out), yang berarti elemen yang terakhir dimasukkan akan menjadi elemen pertama yang dikeluarkan. Konsep ini dapat diibaratkan seperti tumpukan piring di sebuah kafetaria: piring terakhir yang diletakkan di atas tumpukan adalah piring pertama yang akan diambil untuk digunakan.[1]

Sebagai tipe data abstrak, tumpukan membatasi akses datanya hanya pada satu ujung struktur, yang biasa disebut sebagai puncak (top). Tumpukan tidak mengizinkan akses acak (random access) ke elemen yang berada di tengah atau di dasar tumpukan. Untuk menjangkau elemen di bawah puncak, seluruh elemen di atasnya harus dikeluarkan terlebih dahulu.[2]

Operasi dasar

sunting

Sebuah tumpukan umumnya mendukung dua operasi utama dan beberapa operasi pendukung untuk mengelola data di dalamnya:

  • Push (dorong/masukkan): Menambahkan sebuah elemen ke puncak tumpukan. Jika tumpukan telah mencapai kapasitas maksimalnya (pada implementasi berukuran tetap), operasi ini tidak dapat dilakukan dan memicu kondisi galat yang disebut overflow.
  • Pop (keluarkan/ambil): Menghapus dan mengembalikan elemen yang berada di puncak tumpukan. Jika operasi ini dipanggil saat tumpukan kosong, sistem akan memicu kondisi galat yang disebut underflow.
  • Peek atau Top (intip): Mengembalikan nilai dari elemen yang berada di puncak tumpukan tanpa menghapus elemen tersebut dari struktur.
  • IsEmpty (apakah kosong): Memeriksa apakah tumpukan dalam keadaan kosong.
  • IsFull (apakah penuh): Memeriksa apakah tumpukan telah penuh (biasanya hanya berlaku pada implementasi berkapasitas statis).

Implementasi

sunting

Tumpukan dapat diimplementasikan dalam perangkat lunak melalui dua struktur data dasar:

Menggunakan larik

sunting

Implementasi dengan larik (array) menyimpan elemen tumpukan dalam blok memori yang berdampingan secara fisik. Pendekatan ini sangat efisien dalam penggunaan memori (karena tidak memerlukan ruang tambahan untuk menyimpan rujukan atau pointer) dan sangat cepat secara komputasi berkat lokalitas rujukan (locality of reference). Namun, ukuran maksimal tumpukan biasanya harus ditentukan di awal (statis), dan jika larik penuh, memperbesar ukurannya memakan biaya komputasi yang besar.

Menggunakan senarai berantai

sunting

Implementasi dengan senarai berantai (linked list) menyimpan setiap elemen sebagai simpul (node) yang tersebar di memori, di mana setiap simpul memiliki rujukan ke simpul di bawahnya. Pendekatan ini memungkinkan ukuran tumpukan bertambah atau berkurang secara dinamis tanpa batas ukuran kaku, namun memerlukan alokasi memori tambahan untuk menyimpan struktur rujukan tersebut.

Kompleksitas waktu

sunting

Pada implementasi yang baik (baik menggunakan larik maupun senarai berantai), operasi-operasi dasar pada tumpukan sangat cepat karena tidak memerlukan perulangan atau pergeseran elemen lain.[1]

Operasi Kompleksitas waktu
Push
Pop
Peek / Top
IsEmpty
  • (Catatan: Pada larik dinamis, operasi push terkadang memakan waktu jika larik harus diperbesar, tetapi secara rata-rata teramortisasi tetap memakan waktu ).*

Pemanfaatan

sunting

Tumpukan merupakan salah satu struktur data yang paling fundamental dan sering diaplikasikan dalam beraneka ragam sistem komputasi:

Perhitungan ekspresi aritmetika dan penguraian sintaks

sunting

Kalkulator yang menggunakan notasi Polandia terbalik (Reverse Polish Notation atau RPN, di mana operator diletakkan secara posfiks) menggunakan tumpukan untuk menyimpan dan menghitung nilai secara efisien tanpa memerlukan tanda kurung. Selain itu, hampir semua kompilator menggunakan tumpukan untuk mengevaluasi ekspresi matematika, memvalidasi pasangan tanda kurung, dan menguraikan (parsing) sintaks blok program sebelum diterjemahkan ke bahasa tingkat rendah.

Runut balik (Backtracking)

sunting

Tumpukan sangat berguna untuk menyelesaikan algoritme pencarian berbasis runut balik (backtracking). Misalnya, dalam penyelesaian sebuah labirin (maze), kita dapat menyimpan setiap percabangan jalan yang kita lewati menggunakan tumpukan. Apabila kita mencapai jalan buntu, kita dapat memanggil operasi pop untuk mundur ke persimpangan terakhir dan mencoba rute alternatif. Contoh penerapan algoritme ini yang paling terkenal adalah penelusuran graf dan pohon menggunakan metode pencarian mendalam (Depth-First Search atau DFS).

Manajemen eksekusi fungsi

sunting

Sistem operasi dan mesin virtual menggunakan struktur tumpukan panggilan (call stack) untuk mengelola eksekusi fungsi atau prosedur. Ketika sebuah fungsi dipanggil, variabel lokal dan alamat kembalinya (return address) didorong (push) ke dalam tumpukan panggilan. Ketika fungsi tersebut selesai dikerjakan, sistem menarik (pop) memori tersebut untuk kembali ke baris kode asal yang memanggilnya. Prinsip inilah yang memungkinkan berjalannya algoritme rekursif.

Riwayat dan pembatalan perintah

sunting

Fitur "Batal" dan "Ulangi" (Undo / Redo) pada aplikasi penyunting teks maupun perangkat lunak desain diimplementasikan menggunakan dua buah tumpukan. Setiap kali pengguna melakukan aksi baru, aksi tersebut didorong ke tumpukan Undo. Saat pengguna menekan Undo, aksi tersebut diambil dari tumpukan Undo, dibatalkan efeknya, lalu didorong ke tumpukan Redo. Prinsip serupa digunakan pada fitur tombol "Kembali" (Back) dan "Maju" (Forward) pada peramban web.

Lihat pula

sunting

Referensi

sunting
  1. ^ a b Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms (dalam bahasa Inggris) (Edisi 3rd). MIT Press. ISBN 978-0-262-03384-8.
  2. ^ Black, Paul E. "stack". Dictionary of Algorithms and Data Structures (dalam bahasa Inggris). National Institute of Standards and Technology. Diakses tanggal 2 Juni 2026.

Pranala luar

sunting

📚 Artikel Terkait di Wikipedia

PyScripter

Mengeksekusi skrip tanpa menyimpan terlebih dahulu Remote Python debugger Call stack Variabel jendela Watches window Conditional breakpoint Petunjuk debugger

Sinners (film 2025)

seorang musisi blues yang sukses, dikunjungi oleh Stack dan Mary yang awet muda di klub blues setempat. Stack mengungkapkan bahwa Smoke ternyata tidak membunuhnya

Cmd.exe

off-by-default penyelesaian mirip dengan bash pelengkapan tab direktori stack diakses dengan pushd dan perintah popd JIKA dapat melakukan perbandingan

Python (bahasa pemrograman)

documentation". docs.python.org. Diakses tanggal 2020-08-11. "Stack Overflow Developer Survey 2020". Stack Overflow. Diarsipkan dari versi aslinya tanggal 2 March

Paket protokol internet

operasi Istilah yang diberikan kepada perangkat lunak ini adalah TCP/IP stack. Protokol TCP/IP dikembangkan pada akhir dekade 1970-an hingga awal 1980-an

Kesalahan segmentasi

sehingga menghabiskan seluruh kapasitas ruang memori tumpukan panggilan (call stack). Berikut adalah contoh kode sumber sederhana dalam bahasa C yang dipastikan

Screen Actors Guild Award untuk Penampilan Luar Biasa oleh Aktor Pria dalam Peran Utama

Jordan yang menang atas perannya sebagai Elijah "Smoke" Moore/Ellias "Stack" Moore dalam Sinners (2025). Daniel Day-Lewis telah memenangkan penghargaan

Academy Awards ke-98

Diakses tanggal January 22, 2026. "2026 Scientific and Technical Awards Call for Submissions" (Press release). Academy of Motion Picture Arts and Sciences