Sunday, September 22, 2013

Antrian FIFO

FIFO adalah kependekan dari First In First Out, artinya yang pertama kali masuk yang pertama kali dikeluarkan.
Sebetulnya prinsip FIFO sama seperti antrian. Nah, dalam mengantri tentu yang mengantri pertamakali lah yang akan dilayani bukan? Dan orang pertama ini tentu yang akan selesai / keluar dari antrian tersebut.
Lalu apa beda FIFO dengan Queue? Jika FIFO merupakan stack, atau tumpukan, artinya bila ada barang yang ditumpuk tidak harus ada barang yang keluar.
Tapi dalam antrian, jika ada yang masuk maka harus ada yang keluar.
Namun dalam prakteknya, sering kali orang menggunakan teknik dan metode queue dalam pemrograman,
Sebab metode stack, dikhususkan hanya bagi Last in First Out, dimana metode Pop() otomatis mendelete data yang terakhir. (khususnya di .NET)
Prinsip Queue
Stack FIFO vs Stack LIFO, push artinya masuk, pop artinya keluar
Lalu apa saja operasi -operasi yang ada dalam proses FIFO ini?
Berikut algoritma sederhana dari FIFO.
a. Insert : menambahkan data ke dalam stack  Prosedurnya :
- Periksa apakah stack penuh atau tidak
- Jika stack belum penuh : tambahkan nilai last ( nilai banyak array).
Masukkan data pada posisi last ( array [last] )
b. Delete : menghapus data dari stack. Prosedurnya :
- Periksa apakah stack kosong atau tidak
- Jika belum kosong, maka ambil data pada posisi 1, Kemudian turunkan nilai last
Pindahkan data dari posisi 2 ke 1, 3 ke 2, dst hingga posisi last +1 ke last.
Untuk Implementasinya, penulis mengambil contoh dari Java dan dari VB.NET
Contoh FIFO dalam JAVA. Dalam java, algoritma ini dimudahkan dengan adanya package dari java yaitu java.util.LinkedList
import java.util.LinkedList;
public class NewMain {

       public static void main(String[] args) {

        LinkedList <Integer> myQ=new LinkedList<Integer>();
        myQ.add(1);
        myQ.add(6);
        myQ.add(3);
        System.out.println(myQ); //1 6 3
        int first=myQ.poll();// retrieve and remove the first element
        System.out.println(first);//1
        System.out.println(myQ);//6 3
        myQ.add(2);
        System.out.println(myQ);//6 3 2
        myQ.poll();
        System.out.println(myQ); // 3 2

               }
    }
Output :
1
6 3
6 3 2
3 2


Dalam VB.NET, dari berbagai sumber yang penulis cari, semua menganjurkan penggunaan metode queue untuk menerapkan algoritma FIFO.
Berikut contoh queue dalam console VB.NET yang kami sesuaikan sesuai dengan algoritma FIFO yang kami jelaskan sebelumnya.
Metode yang digunakan mudah,yaitu :
  • Enqueue() untuk menambah data
  • Dequeue() untuk menghapus data
  • arr = winQueue.ToArray mengubah list antrian ke dalam array sehingga bisa di show ( ditampilkan)
  •  Peek() melihat data yang ada diurutan/ antrian pertama.
  •  count() menhitung jumlah antrian
Public Class Form1

    Dim winQueue As New Queue

    Private Sub btn_enque_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_enque.Click
        txt_enque.Text = txt_enque.Text.Trim
        If txt_enque.Text = "" Then
            MessageBox.Show("Please enter Element")
            txt_enque.Focus()
        Else
            MessageBox.Show(txt_enque.Text & " Element entered into Queue")

            winQueue.Enqueue(txt_enque.Text)
            txt_enque.Text = ""
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim arr() As Object, i As Integer
        arr = winQueue.ToArray

        If arr.Length = 0 Then
            MessageBox.Show("No Element in the Queue")
            Exit Sub
        End If

        For i = 0 To arr.Length - 1
            MessageBox.Show(arr(i))
        Next
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        If winQueue.Count > 0 Then
            MessageBox.Show(winQueue.Dequeue() & " Element is delete from Queue")
            If winQueue.Count > 0 Then
                MessageBox.Show(winQueue.Peek() & " is the Top 1 Element")
            Else
                MessageBox.Show("No Element in Queue to Delete")
            End If
        Else
            MessageBox.Show("No Element in Queue to Delete")
        End If
    End Sub
End Class
Capture2
Capture3Capture4Capture5
Sumber :
http://www.mycstutorials.com/articles/data_structures/stacks
http://www.java2s.com/Code/Java/Collections-Data-Structure
/SimpleQueueFIFObasedonLinkedList.htm

http://stackoverflow.com/questions/10213707/fifo-based-queue-implementations
Materi Kelas XI IPA. LPK Kosayu
http://en.wikipedia.org/wiki/FIFO
http://www.4microsoftsolutions.com/post/Queues-in-VbNet.aspx
http://vb.net-informations.com/collections/vb.net_Queue.htm
http://msdn.microsoft.com/en-us/library/system.collections.queue.enqueue%28v=vs.71%29.aspx
http://www.codeguru.com/columns/vb/working-with-queues-and-stacks.htm

No comments:

Post a Comment