m6-queue

Upload: abthal-tenore-al-fasna

Post on 10-Apr-2018

212 views

Category:

Documents


0 download

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