Lompat ke konten Lompat ke sidebar Lompat ke footer

Struktur Data Stack: Pengertian, Karakteristik, dan Kegunaannya

Struktur data merupakan aspek yang cukup penting diketahui oleh setiap orang yang memulai bidang pemrograman dan komputer. Dengan memahami prinsip dan cara kerja sebuah struktur data kita dapat mengimplementasikan ke dalam program dengan lebih baik dan sesuai fungsinya.

Salah satunya adalah struktur data stack. Apa itu stack? Bagaimana cara kerjanya? Simak ulasannya di artikel ini.

Daftar Isi

Pengertian Stack

Stack atau dalam Bahasa Indonesia diartikan tumpukan, adalah struktur data linier yang mengikuti prinsip Last In First Out (LIFO). Artinya elemen yang terakhir disisipkan akan menjadi elemen pertama yang keluar.

Struktur Data Stack: Pengertian, Karakteristik, dan Kegunaannya

Cara struktur data stack dalam menyimpan sebuah nilai dapat kita bayangkan seperti piring yang disusun rapi secara bertumpuk ke atas. Apabila kita ingin mengambil piring bagian bawah, kita harus terlebih dahulu menyisihkan semua piring yang ada di atas.

Ilustrasi stack dalam kehidupan nyata
Sumber: programiz.com

Dalam istilah pemrograman, upaya menambahkan elemen pada struktur data stack disebut dengan push. Sedangkan proses menghapus atau menghilangkan elemen data dari stack disebut pop

push dan pop pada struktur data stack
Sumber: programiz.com

Dari gambar di atas, dapat terlihat bahwa meskipun elemen ke-3 adalah yang paling terakhir ditambahkan, namun elemen tersebut justru yang pertama dihapus. Operasi inilah yang kemudian disebut sebagai prinsip operasi LIFO (Last In First Out).

Kita dapat mengimplementasikan stack dengan bahasa pemrograman seperti C, C++, Java, Python, atau C#.

Contoh kode implementasi stack dengan bahasa pemrograman C++

// Stack implementation in C++

#include <stdlib.h>
#include <iostream>

using namespace std;

#define MAX 10
int size = 0;

// Creating a stack
struct stack {
  int items[MAX];
  int top;
};
typedef struct stack st;

void createEmptyStack(st *s) {
  s->top = -1;
}

// Check if the stack is full
int isfull(st *s) {
  if (s->top == MAX - 1)
    return 1;
  else
    return 0;
}

// Check if the stack is empty
int isempty(st *s) {
  if (s->top == -1)
    return 1;
  else
    return 0;
}

// Add elements into stack
void push(st *s, int newitem) {
  if (isfull(s)) {
    cout << "STACK FULL";
  } else {
    s->top++;
    s->items[s->top] = newitem;
  }
  size++;
}

// Remove element from stack
void pop(st *s) {
  if (isempty(s)) {
    cout << "\n STACK EMPTY \n";
  } else {
    cout << "Item popped= " << s->items[s->top];
    s->top--;
  }
  size--;
  cout << endl;
}

// Print elements of stack
void printStack(st *s) {
  printf("Stack: ");
  for (int i = 0; i < size; i++) {
    cout << s->items[i] << " ";
  }
  cout << endl;
}

// Driver code
int main() {
  int ch;
  st *s = (st *)malloc(sizeof(st));

  createEmptyStack(s);

  push(s, 1);
  push(s, 2);
  push(s, 3);
  push(s, 4);

  printStack(s);

  pop(s);

  cout << "\nAfter popping out\n";
  printStack(s);
}

Perlu diketahui, dalam struktur data stack ada dua kondisi yang perlu dihindari, yaitu underflow dan overflow.

  • Stack underflow, yaitu keadaan dimana kita mencoba mengakses atau menghapus elemen data pada stack yang kosong
  • Stack overflow, yaitu keadaan di mana ruang memori yang dialokasikan untuk struktur data stack sudah penuh namun masih dilakukan operasi penyisipan elemen

Jenis-jenis Stack

Berdasarkan kemampuan menyimpan data, struktur data stack dapat dibagi menjadi 2 jenis, yaitu: register stack dan memory stack.

1. Register stack

Register stack merupakan stack yang hanya mampu menampung data dalam jumlah yang kecil. Kedalaman maksimum pada register stack cenderung dibatasi karena ukuran unit memorinya sangat kecil dibandingkan dengan memory stack.

2. Memory stack

Pada stack jenis ini, kedalaman dari stack cukup fleksibel dan mampu menangani dalam dalam skala yang lebih besar dibandingkan jenis sebelumnya. 

Karakteristik Stack

Struktur data stack memiliki ciri sebagai berikut:

  • Stack digunakan pada  banyak algoritma yang berbeda seperti Tower of Hanoi, Tree traversal, rekursi dll.
  • Stack diimplementasikan dengan struktur data array atau linked list.
  • Mengikuti prinsip operasi Last In First Out, yaitu elemen yang dimasukkan pertama akan muncul terakhir dan sebaliknya.
  • Penyisipan dan penghapusan terjadi di satu ujung yaitu dari atas tumpukan.
  • Apabila ruang memori yang dialokasikan untuk struktur data stack sudah penuh namun masih dilakukan operasi penyisipan elemen maka akan terjadi stack overflow.
  • Apabila struktur data tidak memiliki elemen data atau kosong, namun tetap dilakukan operasi penghapusan maka akan terjadi stack underflow

Operasi-operasi Dasar pada Stack

Ada beberapa operasi dasar yang bisa kita untuk lakukan terhadap struktur data stack. Operasi-operasi tersebut meliputi

  • Push: Menyisipkan elemen ke bagian atas stack
  • Pop: Menghapus elemen atas dari stack
  • IsEmpty: Memeriksa apakah stack kosong
  • IsFull: Memerika apakah stack sudah penuh
  • Peek: Mendapatkan nilai elemen teratas tanpa menghapusnya

Fungsi dan Kegunaan Stack

Adapun fungsi dan kegunaan struktur data stack adalah sebagai berikut:

  • Struktur data stack digunakan dalam evaluasi dan konversi ekspresi aritmatika. Proses ini banyak dipakai untuk program kompiler.
  • Stack digunakan dalam pemrograman rekursi.
  • Digunakan untuk pemeriksaan tanda kurung.
  • Stack digunakan dalam manajemen memori.
  • Dipakai untuk memproses pemanggilan sebuah fungsi.

Salah satu contoh penerapan struktur data stack adalah fitur tombol back pada browser. Dimana browser akan menyimpan semua URL yang telah kita kunjungi sebelumnya dalam stack.

Setiap kali kita mengunjungi halaman baru, halaman itu ditambahkan di atas stack. Saat kita menekan tombol kembali, URL saat ini dihapus dari tumpukan, dan URL sebelumnya diakses.

Kelebihan Menggunakan Stack

Adapun kelebihan menggunakan struktur data stack di antaranya:

  • Manajemen data yang efisien: Stack membantu mengelola data berdasarkan prinsip operasi LIFO yang tidak bisa dilakukan dengan linked list dan array.
  • Manajemen fungsi yang efisien: Ketika suatu fungsi dipanggil, variabel lokal disimpan dalam stack, dan secara otomatis dihancurkan setelah dikembalikan.
  • Kontrol atas memori: Stack memungkinkan kita untuk mengontrol bagaimana memori dialokasikan dan tidak dialokasikan.
  • Manajemen memori cerdas: Stack secara otomatis membersihkan objek.
  • Tidak mudah rusak: Stack tidak mudah rusak, oleh karena itu stack cenderung lebih aman dan dapat diandalkan.
  • Tidak mengizinkan pengubahan ukuran variabel: Variabel pada stack tidak dapat diubah ukurannya.

Kekurangan Menggunakan Stack

Selain kelebihan di atas, stack juga terdapat beberapa kelemahan berikut:

  • Ukuran memori terbatas: Memori pada stack cukup terbatas.
  • Kemungkinan stack overflow: Terlalu banyak membuat objek di stack dapat meningkatkan risiko stack overflow.
  • Akses acak tidak dimungkinkan: Dalam stack, akses data secara acak tidak bisa dilakukan. Data yang dapat diakses adalah data yang berada pada elemen atas.
  • Dapat menyebabkan fungsi tidak tedefinisi: Ketika penyimpanan variabel akan ditimpa, kadang-kadang akan menyebabkan perilaku fungsi atau program yang tidak terdefinisi.
  • Penghentian yang tidak diinginkan: Jika stack berada di luar memori maka dapat menyebabkan penghentian yang tidak normal.

Penutup

Demikianlah penjelasan lengkap mengenai struktur data stack. Semoga bermanfaat.

Apabila Anda suka dengan artikel seperti ini, Anda bisa mengunjungi rubrik Data Structure atau membaca artikel lainnya mengenai "Struktur Data Linked List".

Salam!

Referensi:

Trivusi
Trivusi Ikatlah ilmu dengan menulis. Menebar manfaat dengan berbagi :)

Posting Komentar untuk "Struktur Data Stack: Pengertian, Karakteristik, dan Kegunaannya"