m6-queue
TRANSCRIPT
-
8/8/2019 M6-Queue
1/53
Linear Data Structures(Queue)
Teknik Informatika - Universitas Muhammadiyah Malang (UMM)
Tahun Akademik 2010-2011
Oleh : Nur Hayatin, S.ST
-
8/8/2019 M6-Queue
2/53
Sub Topik
Queue
Operasi Queue
Implementasi Queue Latihan
-
8/8/2019 M6-Queue
3/53
QUEUE
(Antrian)
-
8/8/2019 M6-Queue
4/53
Definisi
Urutan elemen yang mengikuti konsep FIFO.
FIFO(First In First Out)
Front menunjuk pada elemen yang palingatas.
Rear menunjuk pada elemen yang paling
belakang.
-
8/8/2019 M6-Queue
5/53
Gambaran Proses
Front : Depan
Rear : Belakang
-
8/8/2019 M6-Queue
6/53
Queue (Antrian)
Front Rear
-
8/8/2019 M6-Queue
7/53
Queue (Antrian)
Front Rear
-
8/8/2019 M6-Queue
8/53
Queue (Antrian)
Front Rear
-
8/8/2019 M6-Queue
9/53
Queue (Antrian)
Front Rear
-
8/8/2019 M6-Queue
10/53
Queue (Antrian)
FrontRear
-
8/8/2019 M6-Queue
11/53
Queue (Antrian)
FrontRear
-
8/8/2019 M6-Queue
12/53
Operasi Queue
-
8/8/2019 M6-Queue
13/53
Operasi
Enqueue/put
(operasi penambahan elemen)
Dequeue/remove(operasi penghapusan elemen)
Get front
(operasi pengaksesan elemen terdepan) Get rear
(operasi pengaksesan elemen paling belakang)
-
8/8/2019 M6-Queue
14/53
Operasi Enqueue (add)
Operasi penambahan elemen pada antrian.
Dilakukan pada rear.
Increment rear.
-
8/8/2019 M6-Queue
15/53
Operasi Dequeue (remove)
Operasi penghapusan elemen pada antrian.
Untuk Queue array terjadi pergeseran elemen
dari belakang ke depan. Dilakukan pada Front.
Decrement rear.
-
8/8/2019 M6-Queue
16/53
Operasi Get Front
Pengambilan/pengaksesan elemen yang
paling depan.
Elemen yang ditunjuk oleh front.
-
8/8/2019 M6-Queue
17/53
Operasi Get Rear
Pengambilan/pengaksesan elemen yang
paling belakang.
Elemen yang ditunjuk oleh rear.
-
8/8/2019 M6-Queue
18/53
Contoh Penerapan Queue
mailboxdalam komunikasi antar proses
simulasi dan modeling (misalnya simulasi
sistem pengendali lalu lintas udara) dalammemprediksi performansi
Waiting Line pada Sistem Operasi
-
8/8/2019 M6-Queue
19/53
QUEUE DENGAN CIRCULAR
ARRAY
-
8/8/2019 M6-Queue
20/53
Circular Array
Mampu melakukan proses penghapusan
elemen tanda melakukan pergeseran.
-
8/8/2019 M6-Queue
21/53
Aturan Circular Array
1. Proses penghapusan dilakukan dengan cara nilai depan
(front) ditambah 1 : depan=depan + 1.
2. Proses penambahan elemen sama dengan queue linear
array yaitu nilai belakang ditambah 1 : belakang=belakang +1.
3. Jika depan = maks dan ada elemen yang akan dihapus, maka
nilai depan = 1.
4. Jika belakang = maks dan depan tidak 1 maka jika ada
elemen yang akan ditambahkan, nilai belakang=1.
5. Jika hanya tinggal 1 elemen di queue (depan = belakang),
dan akan dihapus maka depan diisi 0 dan belakang diisi
dengan 0 (queue kosong).
-
8/8/2019 M6-Queue
22/53
Circular Array
-
8/8/2019 M6-Queue
23/53
Proses Circular Array
-
8/8/2019 M6-Queue
24/53
Proses Circular Array
-
8/8/2019 M6-Queue
25/53
Queue dalam Program
-
8/8/2019 M6-Queue
26/53
The Interface Queue
public interface Queue
{
public boolean isEmpty();public Object getFrontEelement();
public Object getRearEelement();
public void put(Object theObject);public Object remove();
}
-
8/8/2019 M6-Queue
27/53
C
lass ArrayQueue
-
8/8/2019 M6-Queue
28/53
Inisialisasi Awal
public class ArrayQueue implements Queue
{int front=0;
int rear=-1;
Object [] queue;
-
8/8/2019 M6-Queue
29/53
Constructor
public ArrayQueue(int initialCapacity)
{
if (initialCapacity < 1)
throw new IllegalArgumentException
("initialCapacity must be >= 1");
queue = new Object [initialCapacity + 1];
}
public ArrayQueue()
{
this(10);
}
-
8/8/2019 M6-Queue
30/53
Method empty()
public boolean isEmpty()
{
return rear == -1;
}
-
8/8/2019 M6-Queue
31/53
Method getFront()
public Object getFrontElement()
{if (isEmpty())
return null;
else
return queue[front];}
-
8/8/2019 M6-Queue
32/53
Method getRear()
public Object getRearElement()
{if (isEmpty())
return null;
else
return queue[rear];
}
-
8/8/2019 M6-Queue
33/53
Method put()
public void put(Object theElement)
{
if (rear == queue.length - 1){
Object [] newArray = new Object [2*queue.length];
System.arraycopy(queue, 0, newArray, 0, queue.length);
queue = newArray;
}
queue[++rear] = theElement;
}
-
8/8/2019 M6-Queue
34/53
Method remove()
public Object remove()
{
if (isEmpty())
return null;Object frontElement = queue[front];
for(int i = 1;i
-
8/8/2019 M6-Queue
35/53
Method main()public static void main(String [] args)
{
int x;
ArrayQueue q = new ArrayQueue(3);
q.put(new Integer(1)); q.put(new Integer(2));
q.put(new Integer(3)); q.put(new Integer(4));
q.remove(); q.remove();q.put(new Integer(5)); q.put(new Integer(6));
q.put(new Integer(7)); q.put(new Integer(8));
q.put(new Integer(9)); q.put(new Integer(10));
q.put(new Integer(11)); q.put(new Integer(12));
while (!q.isEmpty())
{System.out.println("Rear element is " + q.getRearElement());
System.out.println("Front element is " + q.getFrontElement());
System.out.println("Removed the element " + q.remove());
}
}
}
-
8/8/2019 M6-Queue
36/53
Class LinkedQueue
-
8/8/2019 M6-Queue
37/53
Class ChainNode
class ChainNode
{
// package visible data members
Object element;
ChainNode next;
// package visible constructors
ChainNode() {}
ChainNode(Object element)
{this.element = element;}
ChainNode(Object element, ChainNode next)
{this.element = element;
this.next = next;}
}
-
8/8/2019 M6-Queue
38/53
Inisialisasi Awal
public class LinkedQueue implements Queue
{
protected ChainNode front;
protected ChainNode rear;
-
8/8/2019 M6-Queue
39/53
Method isEmpty()
public boolean isEmpty()
{
return front == null;
}
-
8/8/2019 M6-Queue
40/53
Method getFront()
public Object getFrontElement()
{ if (isEmpty())
return null;
else
return front.element;}
-
8/8/2019 M6-Queue
41/53
Method getRear()
public Object getRearElement()
{if (isEmpty())
return null;
else
return rear.element;}
-
8/8/2019 M6-Queue
42/53
Method put()
public void put(Object theElement)
{
ChainNode p = new ChainNode(theElement, null);
if (front == null)
front = p; // empty queue
else
rear.next = p; // nonempty queuerear = p;
}
-
8/8/2019 M6-Queue
43/53
Method remove()
public Object remove()
{
if (isEmpty())
return null;
Object frontElement = front.element;
front = front.next;
if (isEmpty())
rear = null; // enable garbage collectionreturn frontElement;
}
-
8/8/2019 M6-Queue
44/53
Method main()
public static void main(String [] args)
{
int x;
LinkedQueue q = new LinkedQueue(3);
q.put(new Integer(1));
q.put(new Integer(2));q.put(new Integer(3));
q.put(new Integer(4));
while (!q.isEmpty())
{
System.out.println("Rear element is " + q.getRearElement());
System.out.println("Front element is " + q.getFrontElement());
System.out.println("Removed the element " + q.remove());
}
}
}
-
8/8/2019 M6-Queue
45/53
Class CircularQueue
-
8/8/2019 M6-Queue
46/53
Inisialisasi Awal
class CircularQueue
{private int maxSize;
private int[] queArray;
private int front;
private int rear;private int nItems;
-
8/8/2019 M6-Queue
47/53
Constructor
public CircularQueue(int s)
{
maxSize = s;queArray = new int[maxSize];
front = 0;
rear = -1;
nItems = 0;
}
-
8/8/2019 M6-Queue
48/53
Method isEmpty()
public boolean isEmpty(){
return (nItems==0);
}
-
8/8/2019 M6-Queue
49/53
Method peekFront()
public int peekFront()
{
return queArray[front];
}
-
8/8/2019 M6-Queue
50/53
Method insert()
public void insert(int j)
{if(rear == maxSize-1)
rear = -1;
queArray[++rear] = j;
nItems++;}
-
8/8/2019 M6-Queue
51/53
Method remove()
public int remove()
{
int temp = queArray[front++];if(front == maxSize)
front = 0;
nItems--;
return temp;}
-
8/8/2019 M6-Queue
52/53
Method main()
public static void main(String[] args){
CircularQueue theQueue = new CircularQueue(5); // queue holds 5 items
System.out.println("front : " + theQueue.front + "rear : " + theQueue.rear);
theQueue.insert(10); theQueue.insert(20);
theQueue.insert(30); theQueue.insert(40);
theQueue.remove();System.out.println(remove 1x, front : " +theQueue.front +" rear : " +theQueue.rear);
theQueue.insert(50);
theQueue.insert(60);
System.out.println("add 2 elemen, front : " +theQueue.front+"rear:+theQueue.rear);
theQueue.remove();
System.out.println(remove 1x, front : " +theQueue.front+ rear : " +theQueue.rear);while( !theQueue.isEmpty() )
{
int n = theQueue.remove();
System.out.print(n);
System.out.print(" ");
}
-
8/8/2019 M6-Queue
53/53
Pustaka
Sartaj Sahni, Presentation L5 & L10
Jokonowo, Bambang S.Si, Pemrograman Berorientasi Obyek,
Pusat pengembangan bahan ajar UMB, 2006.
Noviyanto, P
emrograman Berorientasi Obyek (P
BO) Array,2005
Nugroho, Adi, Algoritma dan Struktur Data Dalam Bahasa
Java, ANDI Yogyakarta, 2008.
Michaell Waite, Data Structures and Algorithms in Java,
SAMS, 2001