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
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
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