Struktur Data dan Algoritma - Stack

Tumpukan adalah Tipe Data Abstrak (ADT), yang umum digunakan di sebagian besar bahasa pemrograman. Dinamai tumpukan karena berperilaku seperti tumpukan dunia nyata, misalnya - setumpuk kartu atau tumpukan piring, dll.

Tumpukan dunia nyata memungkinkan operasi di satu ujung saja. Misalnya, kita dapat menempatkan atau mengeluarkan kartu atau piring hanya dari atas tumpukan. Demikian pula, Stack ADT memungkinkan semua operasi data di satu ujung saja. Pada waktu tertentu, kami hanya dapat mengakses elemen teratas tumpukan.

Fitur ini membuatnya menjadi struktur data LIFO. LIFO adalah singkatan dari Last-in-first-out. Di sini elemen yang ditempatkan (disisipkan atau ditambahkan) terakhir, diakses terlebih dahulu. Dalam terminologi stack, operasi penyisipan disebutPUSH operasi operasi dan pemindahan disebut POP operasi.

Representasi Stack

Diagram berikut menggambarkan tumpukan dan operasinya -

Tumpukan dapat diimplementasikan melalui Array, Structure, Pointer, dan Linked List. Tumpukan dapat berupa ukuran tetap atau mungkin memiliki kesan perubahan ukuran dinamis. Di sini, kita akan mengimplementasikan stack menggunakan array, yang menjadikannya implementasi stack dengan ukuran tetap.

Operasi Dasar

Operasi tumpukan mungkin melibatkan menginisialisasi tumpukan, menggunakannya dan kemudian membatalkan inisialisasi. Terlepas dari hal-hal dasar ini, tumpukan digunakan untuk dua operasi utama berikut -

  • push() - Mendorong (menyimpan) elemen di stack.

  • pop() - Menghapus (mengakses) elemen dari stack.

Saat data DITOLAK ke stack.

Untuk menggunakan tumpukan secara efisien, kita perlu memeriksa status tumpukan juga. Untuk tujuan yang sama, fungsi berikut ditambahkan ke tumpukan -

  • peek() - dapatkan elemen data teratas dari tumpukan, tanpa menghapusnya.

  • isFull() - periksa apakah tumpukan sudah penuh.

  • isEmpty() - periksa apakah tumpukan kosong.

Setiap saat, kami mempertahankan penunjuk ke data PUSHed terakhir di tumpukan. Karena penunjuk ini selalu mewakili bagian atas tumpukan, maka dinamaitop. Itutop pointer memberikan nilai teratas dari tumpukan tanpa benar-benar menghapusnya.

Pertama kita harus belajar tentang prosedur untuk mendukung fungsi stack -

mengintip()

Algoritma peek () fungsi -

begin procedure peek
   return stack[top]
end procedure

Implementasi fungsi peek () dalam bahasa pemrograman C -

Example

int peek() {
   return stack[top];
}

penuh()

Algoritma dari fungsi isfull () -

begin procedure isfull

   if top equals to MAXSIZE
      return true
   else
      return false
   endif
   
end procedure

Implementasi fungsi isfull () dalam bahasa pemrograman C -

Example

bool isfull() {
   if(top == MAXSIZE)
      return true;
   else
      return false;
}

kosong()

Algoritma fungsi isempty () -

begin procedure isempty

   if top less than 1
      return true
   else
      return false
   endif
   
end procedure

Implementasi fungsi isempty () dalam bahasa pemrograman C sedikit berbeda. Kami menginisialisasi top di -1, karena indeks dalam array dimulai dari 0. Jadi kami memeriksa apakah top di bawah nol atau -1 untuk menentukan apakah stack kosong. Ini kodenya -

Example

bool isempty() {
   if(top == -1)
      return true;
   else
      return false;
}

Operasi Dorong

Proses menempatkan elemen data baru ke dalam tumpukan dikenal sebagai Operasi Dorong. Operasi dorong melibatkan serangkaian langkah -

  • Step 1 - Memeriksa apakah tumpukan sudah penuh.

  • Step 2 - Jika tumpukan penuh, menghasilkan kesalahan dan keluar.

  • Step 3 - Jika tumpukan tidak penuh, tambahkan top untuk menunjukkan ruang kosong berikutnya.

  • Step 4 - Menambahkan elemen data ke lokasi tumpukan, di mana bagian atas mengarah.

  • Step 5 - Mengembalikan kesuksesan.

Jika daftar tertaut digunakan untuk mengimplementasikan tumpukan, maka pada langkah 3, kita perlu mengalokasikan ruang secara dinamis.

Algoritma untuk Operasi PUSH

Algoritma sederhana untuk operasi Push dapat diturunkan sebagai berikut -

begin procedure push: stack, data

   if stack is full
      return null
   endif
   
   top ← top + 1
   stack[top] ← data

end procedure

Implementasi algoritma ini di C, sangat mudah. Lihat kode berikut -

Example

void push(int data) {
   if(!isFull()) {
      top = top + 1;   
      stack[top] = data;
   } else {
      printf("Could not insert data, Stack is full.\n");
   }
}

Operasi Pop

Mengakses konten sambil menghapusnya dari tumpukan, dikenal sebagai Operasi Pop. Dalam implementasi array dari operasi pop (), elemen data sebenarnya tidak dihapustopditurunkan ke posisi yang lebih rendah dalam tumpukan untuk menunjuk ke nilai berikutnya. Tapi dalam implementasi linked-list, pop () sebenarnya menghapus elemen data dan membatalkan alokasi ruang memori.

Operasi Pop mungkin melibatkan langkah-langkah berikut -

  • Step 1 - Memeriksa apakah tumpukan kosong.

  • Step 2 - Jika tumpukan kosong, menghasilkan kesalahan dan keluar.

  • Step 3 - Jika tumpukan tidak kosong, mengakses elemen data di mana top menunjuk.

  • Step 4 - Mengurangi nilai teratas sebanyak 1.

  • Step 5 - Mengembalikan kesuksesan.

Algoritma untuk Operasi Pop

Algoritme sederhana untuk operasi Pop dapat diturunkan sebagai berikut -

begin procedure pop: stack

   if stack is empty
      return null
   endif
   
   data ← stack[top]
   top ← top - 1
   return data

end procedure

Implementasi algoritma ini di C, adalah sebagai berikut -

Example

int pop(int data) {

   if(!isempty()) {
      data = stack[top];
      top = top - 1;   
      return data;
   } else {
      printf("Could not retrieve data, Stack is empty.\n");
   }
}

Untuk program stack lengkap dalam bahasa pemrograman C, silakan klik di sini .