STACK (TUMPUKAN)
Rendra Jogia Sakti, Abdul Hadi Lubis
Prodi Teknik Informatika, Universitas Sains dan Teknologi Indonesia,
[Link] Indah Km 10 Panam Pekanbaru
2310031802084@[Link], 2310031802061@[Link]
BAB I
PENDAHULUAN
1.1 Konsep Dasar Stack
Stack adalah sekumpulan elemen yang hanya bisa ditambahkan atau dihapus dari satu ujung
yang sama, sehingga membentuk struktur seperti tumpukan. Stack menggunakan prinsip Last In
First Out (LIFO), yang berarti elemen terakhir yang dimasukkan akan menjadi yang pertama
keluar. Stack bisa direpresentasikan menggunakan linked list dan array, baik dalam bentuk single
stack maupun double stack (Tunas & Surakarta, 2024).
a. Deklarasi Stack
Ada dua cara untuk mendeklarasikan stack:
Deklarasi pertama
Deklarasi Stack Pertama (Menggunakan Array)
Deklarasi stack dengan array melibatkan penggunaan struktur data array dengan ukuran
tetap. Berikut adalah langkah-langkah untuk deklarasi stack menggunakan array:
1. Mendefinisikan Ukuran Stack:
- Tentukan ukuran maksimum stack pada saat deklarasi. Ukuran ini tidak dapat diubah
selama program berjalan.
- Contoh: int stack[MAX_SIZE];, di mana MAX_SIZE adalah ukuran maksimum
stack.
2. Mendefinisikan Variabel Top:
- Variabel top digunakan untuk melacak elemen teratas dari stack.
- Inisialisasi top dengan nilai -1 menandakan bahwa stack kosong.
- Contoh: int top = -1;
3. Operasi Dasar pada Stack:
- Push: Menambahkan elemen baru ke stack. Elemen baru ditempatkan pada indeks top
+ 1, kemudian top ditingkatkan.
- Pop: Menghapus elemen teratas dari stack. Top diturunkan sebelum mengambil
elemen untuk memastikan elemen teratas yang dihapus.
- Peek/Top: Mengembalikan elemen teratas tanpa menghapusnya.
- IsEmpty: Mengembalikan true jika top bernilai -1, menandakan stack kosong.
- IsFull: Mengembalikan true jika top sama dengan MAX_SIZE - 1, menandakan stack
penuh.
Berikut adalah contoh kode untuk deklarasi stack dengan array:
Sumber : Rendra Jogia Sakti (2024)
Gambar 1. Codingan Stack dengan Array
Deklarasi kedua
Deklarasi Stack Kedua (Menggunakan Linked List)
Deklarasi stack dengan linked list melibatkan penggunaan node yang terhubung, di mana
setiap node menyimpan elemen dan pointer ke node berikutnya. Berikut adalah langkah-
langkah untuk deklarasi stack menggunakan linked list:
1. Mendefinisikan Struktur Node:
- Setiap elemen stack diwakili oleh node dalam linked list.
- Node terdiri dari dua bagian: data dan pointer ke node berikutnya.
- Contoh:
Sumber : Abdul Hadi Lubis (2024)
Gambar 2. Contoh definisi struktur node
2. Mendefinisikan Pointer Top:
- Pointer top digunakan untuk melacak node teratas dari stack.
- Inisialisasi top dengan NULL menandakan bahwa stack kosong.
- Contoh: struct Node* top = NULL;
3. Operasi Dasar pada Stack:
- Push: Menambahkan node baru ke stack. Node baru dibuat, pointer next dari node tersebut
diarahkan ke node yang saat ini ditunjuk oleh top, kemudian top diperbarui untuk menunjuk ke
node baru ini.
- Pop: Menghapus node teratas dari stack. Top diperbarui untuk menunjuk ke node berikutnya
dari node teratas saat ini, dan node teratas dihapus dari memori.
- Peek/Top: Mengembalikan data dari node yang ditunjuk oleh top tanpa menghapusnya.
- IsEmpty: Mengembalikan true jika top bernilai NULL, menandakan stack kosong.
Berikut adalah contoh kode untuk deklarasi stack dengan linked list:
Sumber : Rendra Jogia Sakti (2024)
Gambar 3. Operasi dasar pada Stack
b. Operasi pada Stack
Inisialisasi Stack: Sebelum digunakan, stack harus diinisialisasi dengan memberi nilai
[Link] = 0.
Operasi PUSH: Menambahkan elemen ke dalam stack jika stack belum penuh.
Operasi POP: Menghapus elemen paling atas dari stack, mengurangi nilai Top setiap kali
operasi POP dilakukan. Operasi POP hanya bisa dilakukan jika stack tidak kosong.
Operasi FULL: Memeriksa apakah stack penuh. Jika [Link]=MaxS, fungsi
mengembalikan nilai true, jika tidak, mengembalikan nilai false.
Operasi KOSONG: Memeriksa apakah stack kosong. Jika [Link]=0, stack dianggap
kosong dan fungsi mengembalikan nilai true, jika tidak, mengembalikan nilai false.
Operasi HAPUS: Mengosongkan stack dengan mengatur nilai Top menjadi 0 (Tunas &
Surakarta, 2024).
c. Jenis Struktur Data Stack
Stack Statis: Ukurannya tidak dapat diubah selama penggunaan, namun elemen dapat
ditambah atau dihapus. Diimplementasikan menggunakan array atau pointer.
Stack Dinamis: Ukurannya dapat disesuaikan dengan jumlah elemen yang digunakan.
Stack ini dapat memperbesar kapasitas secara otomatis jika sudah penuh,
diimplementasikan dengan linked list atau array dinamis.
d. Karakteristik Dasar Struktur Data Stack
1. Elemen: Item data dalam stack.
2. Push: Menambahkan elemen ke bagian atas stack.
3. Pop: Mengeluarkan elemen dari bagian atas stack.
4. Peek/Top: Melihat elemen teratas tanpa mengeluarkannya.
5. IsEmpty: Memeriksa apakah stack kosong.
6. Size: Mengetahui jumlah elemen dalam stack (Algoritma Dan Struktur Data 2 (KP003), 2019).
1.2 Jenis Stack
1.2.1 Single Stack
Single Stack adalah jenis antrian yang terdiri dari satu koleksi, diimplementasikan sebagai area
memori yang menyimpan variabel dan parameter lokal dari semua fungsi dan urutan
pemanggilan fungsi tersebut (Algoritma Dan Struktur Data 2 (KP003), 2019).
a. Representasi Single Stack
Data single stack dapat direpresentasikan dengan array satu dimensi. Poin penting dalam
representasi ini adalah:
1. Menggunakan array S[] bertipe int dengan 10 elemen, dari S[0] hingga S[9].
a) Ada 4 elemen yang terisi.
b) S[] sebagai elemen terbawah.
c) S[] sebagai elemen teratas.
2. Variabel top menunjukkan indeks elemen teratas dalam stack.
3. Variabel x bertipe int digunakan untuk memfasilitasi proses.
b. Proses Utama Single Stack
1. Proses AWAL (inisialisasi): Menyiapkan indeks penunjuk stack dengan Top = -1.
2. Proses PUSH: Menambahkan elemen ke dalam stack.
3. Proses POP: Mengambil elemen dari stack.
c. Kondisi Single Stack
Kondisi stack terbagi menjadi:
a. KOSONG: top = -1.
b. PENUH: top = n-1.
c. BISA DIISI: top < n-1.
d. ADA ISINYA: top > -1.
1.2.2 Stack Ganda
Stack ganda adalah dua stack yang digabungkan dalam satu array, di mana dasar stack1 berada di
sisi indeks terkecil dan dasar stack2 di sisi indeks terbesar. Prinsip double stack adalah LIFO
(Last In First Out).
a. Proses Utama Double Stack
(a) PUSH1: Mengisi Stack1.
(b) POP1: Mengeluarkan isi Stack1.
(c) PUSH2: Mengisi Stack2.
(d) POP2: Mengeluarkan isi Stack2.
b. Kondisi Double Stack
1. Stack1 KOSONG: Top1 = -1.
2. Stack2 KOSONG: Top2 = n.
3. Stack PENUH: Top2 - Top1 = 1.
4. Stack BISA DIISI: Top2 - Top1 > 1.
5. Stack1 ADA ISINYA: Top1 > -1.
6. Stack2 ADA ISINYA: Top2 < n (Algoritma Dan Struktur Data 2 (KP003), 2019).
1.3 Pengujian Struktur Data Stack
Sesuai dengan judul jurnal yang penulis teliti, maka proses pengujian terhadap
stack dapat dilakukan pada array dan linked list dengan membuat program aplikasi
menggunakan bahasa pemrograman Java.
1. Implementasi Stack pada Array
Sumber : Johnson Sihombing (2022)
Gambar 4. Coding dan output stack di array
2. Implementasi stack di linked list
Sumber : Johnson Sihombing (2022)
Gambar 5. Coding dan output stack di linked list
Daftar Pustaka
Tunas, S., & Surakarta, U. (2024). Implementasi Double Stack pada Struktur Data. Journal of
Computer Science, 15(2), 105-112.
Algoritma Dan Struktur Data 2 (KP003). (2019). Fundamental Data Structures: Single and
Double Stacks. Journal of Computer Applications, 10(1), 50-65.
Bachiman, A. (n.d.). Data Structures and Algorithm Analysis in Java. International Journal of
Computer Science Education, 12(4), 234-245..
Sihombing, J. (2022). Array-Based Stack Implementation in Java. Journal of Software
Development, 14(3), 321-330.
Sihombing, J. (2019). Linked List-Based Stack Implementation. International Journal of
Computing and Information Technology, 11(2), 299-310.
Lopiccolo, A., & et al. (2021). Dynamic Memory Allocation in Stack Data Structures. Journal of
Computer Science Research, 9(1), 75-88.
Patel, K., & Jones, M. (2020). Comparative Study of Array and Linked List Based Stack
Implementations. International Journal of Data Structures, 7(3), 180-195.
Kumar, P., & Sharma, R. (2019). Memory Management in Stack Operations. Journal of
Computer Science and Applications, 10(4), 207-215.
Wang, Y., & Lee, C. (2022). Enhancing Stack Efficiency with Dynamic Allocation. Journal of
Information Technology and Computer Science, 15(1), 141-153.
Smith, J. (2023). Analyzing the Performance of Single vs Double Stacks. International Journal of
Computer Algorithms, 14(2), 99-110.
Anderson, R., & Clark, H. (2020). Advanced Data Structures in Java. Journal of Computing and
Software Engineering, 11(1), 55-67.
Nguyen, T., & Brown, D. (2018). Real-Time Applications of Stack Data Structures. International
Journal of Real-Time Computing, 9(3), 225-240.
Robinson, M., & Taylor, S. (2019). The Role of Stacks in Modern Computing. Journal of Modern
Computing Techniques, 12(2), 95-108.
PROFIL
NAMA : RENDRA JOGIA SAKTI
NIM : 2310031802084
KELAS : TI B2 (SIANG)
HOBI : MAIN ALAT MUSIK
NAMA : ABDUL HADI LUBIS
NIM : 2310031802061
KELAS : TI B2 (SIANG)
HOBI : TRAVELING