Minggu, 23 Oktober 2016

Algoritma Pemrograman | Struktur Data Stack dan Queue




Pengertian Stack Dan Queue
Stack (tumpukan) dan queue (antrian) sebenarnya adalah sebuah cara dalam mengorganisasikan data-data yang dimiliki. Ibarat seseorang yang menyimpan buku-bukunya, ada yang disusun dengan cara ditumpuk, ada juga yang dijejerkan di dalam lemari.
Tumpukan dapat diartikan sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada data yang diletakkan di atas data yang lain seperti pada gambar 01. Saat kita ingin mengambil data A, maka data-data yang berada di atasnya haruslah lebih dulu dikeluarkan ( di-POP ). Hal ini membuat tumpukan / stack memiliki ciri-ciri Last In First Out ( LIFO ) yang berarti data yang masuk terakhir akan keluar pertama.


Operasi atau Fungsi dari Stack : 

  1. Push         : digunakan untuk menambah item pada stack pada tumpukan paling atas.
  2. Pop          : digunakan untuk mengambil item pada stack pada tumpukan paling atas 
  3. Clear       : digunakan untuk mengosongkan stack 
  4. IsEmpty  : fungsi yang digunakan untuk mengecek apakah stack sudah kosong 
  5. IsFull      : fungsi yang digunakan untuk mengecek apakah stack sudah penuh 


Sedangkan queue / antrian hampir mirip dengan stack, tapi hanya saja, data yang masuk pertama kali akan keluar pertama kali dari Queue. ( Bisa dilihat pada gambar 02 ). FIFO ( First In First Out ) Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).
Karakteristik Queue atau antrian :
1. elemen antrian
2. front (elemen terdepan antrian)
3. tail (elemen terakhir)
4. jumlah elemen pada antrian
5. status antrian Operasi pada Queue atau antrian

Operasi-operasi Queue : 
  1.  Create() Untuk menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1 
  2. IsEmpty() Untuk memeriksa apakah Antrian sudah penuh atau belum Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail. 
  3. IsFull Untuk mengecek apakah Antrian sudah penuh atau belum Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh 
  4. Enqueue Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu 
  5. Dequeue() Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 Penggeseran dilakukan dengan menggunakan looping.
  6. Clear() Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1 Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca 
  7. Tampil() Untuk menampilkan nilai-nilai elemen Antrian Menggunakan looping dari head s/d tail 

Penyajian Stack Dan Queue  
Stack dan/atau Queue dapat disajikan baik dengan Array maupun dengan struct. Pada Array, stack ataupun queue yang disajikan bersifat statis. Ini disebabkan karena jumlah maksimal data pada array sudah ditentukan sejak awal.  

Contoh deklarasi stack dengan struct : 

Struct stack 
{       
char data;       
stack*next; 
}; 


Operasi Pada Stack Dan Queue   
Dalam penyajian stack dan queue, ada 2 proses yang terjadi, yaitu pemasukan data (PUSH) dan pengeluaran data (POP). Seperti yang sudah dijelaskan bahwa array itu memiliki jumlah maksimal, maka pada proses PUSH, perlu pengecekan apakah data yang di-PUSH  di stack / queue melebihi jumlah maksimal array atau tidak.

Contoh algoritma untuk proses PUSH (stack dan queue ) adalah sebagai berikut :
0. Masukkan inputan ( x )
1. Jika variable cek ( c ) = nilai maksimal array ( max ), kerjakan langkah 2. Jika tidak, kerjakan langkah 3.
2. cetak ”TUMPUKAN PENUH”
3. selama ( c ) kurang dari ( max ), maka Æ c Å c + 1  dan data [c] Å x  

Contoh algoritma untuk proses POP pada stack adalah sebagai berikut :  
0. Jika c = 0, maka kerjakan langkah 1. Jika tidak, lakukan langkah 2.
1. cetak ”TUMPUKAN KOSONG”
2. c Å c-1


Sumber :

  • Muhammad Fachrie. 2012. Stack dan Queue (Tesis). Yogyakarta:  STMIK Amikom Yogyakarta.
  • Kenkeina. 2010. Stack dan Queue (Tesis). Semarang: Universitas Stikubank.


3 komentar: