• Tidak ada hasil yang ditemukan

Praktikum Queue dan PriorityQueue

N/A
N/A
Protected

Academic year: 2021

Membagikan "Praktikum Queue dan PriorityQueue"

Copied!
11
0
0

Teks penuh

(1)

Praktikum Queue dan

PriorityQueue

A. Queue Collection

Percobaan 1 : LinkedList menerapkan interface Queue (1) import java.util.LinkedList;

import java.util.Queue;

public class MainDemo {

public void queueExample() { Queue queue = new LinkedList(); queue.add("Java"); queue.add("DotNet"); queue.offer("PHP"); queue.offer("HTML"); System.out.println("remove: " + queue.remove()); System.out.println("element: " + queue.element()); System.out.println("poll: " + queue.poll()); System.out.println("peek: " + queue.peek()); }

public static void main(String[] args) { new MainDemo().queueExample(); }

}

Percobaan 2 : LinkedList menerapkan interface Queue (2) import java.util.ArrayList;

import java.util.LinkedList; import java.util.List; import java.util.Queue;

public class Main {

public static void main(String[] args) {

Queue<String> myQueue = new LinkedList<String>(); myQueue.add("A");

myQueue.add("B"); myQueue.add("C"); myQueue.add("D");

List<String> myList = new ArrayList<String>(myQueue); for (Object theFruit : myList)

(2)

System.out.println(theFruit); }

}

B. Implementasikan Interface Queue menggunakan List Interface Queue

boolean isEmpty() Mengembalikan nilai true jika queue kosong dan false jika queue terdapat minimal satu elemen.

T peek() Mengembalikan elemen di depan queue. Jika queue kosong melempar exception yaitu: throws

NoSuchElementException.

T pop() Menghapus elemen di depan queue dan mengembalikan nilainya. Jika queue kosong maka melempar exception yaitu : NoSuchElementException.

void push(T item) Menyisipkan item di akhir queue

int size() Mengembalikan jumlah elemen dari queue.

import java.util.LinkedList;

public class LinkedQueue<T> implements Queue<T>{ private LinkedList<T> qlist = null;

public LinkedQueue () {

qlist = new LinkedList<T>(); }

@Override

public boolean isEmpty() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T peek() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T pop() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override

public void push(T item) {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public int size() {

(3)

throw new UnsupportedOperationException("Not supported yet."); }

}

C. Implementasikan Interface Bounded Queue menggunakan Array dan Circular Bounded Queue

Bounded Queue adalah queue yang berisi elemen dengan size tertentu.

Interface BQueue

boolean full() Mengembalikan nilai true jika queue penuh sesuai dengan size yang ditentukan dan false jika queue belum penuh.

Circular Bounded Queue

Cara mensimulasikan antrian secara circular dalam array linear menggunakan arithmetic modular. Arithmetic modular menggunakan ekspresi rumus (X % N) untuk menjaga besarnya nilai X pada range 0:N-1. Jika indeks telah sampai pada N dengan penambahan atau pengurangan tersebut, maka indeks akan diset pada angka 0.

Hal yang sama juga dilakukan pada Front jika dilakukan pengambilan item dari antrian. Setelah mengambil item dari antrian, kita melakukan increment terhadap Front untuk penunjukan pada posisi sesudahnya. Apabila indeks telah berada pada N, maka indeks diset juga pada angka 0.

(4)

Move qfront forward: qfront = (qfront + 1) % qcapacity;

public class ArrQueue<T> implements BQueue<T>{

private T Arr[] ;

private int qfront = 0 ; private int qback = 0 ; private int qcapacity = 0 ;

public ArrQueue() {

Arr = (T[]) new Object[50]; qcapacity = 50;

}

public ArrQueue(int size) { Arr = (T[]) new Object[size]; qcapacity = size;

}

@Override

public boolean isEmpty() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T peek() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T pop() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override

public void push(T item) {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public int size() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override

public boolean full() {

throw new UnsupportedOperationException("Not supported yet."); }

}

(5)

Dalam antrian berprioritas, setiap elemenn yang akan msuk dalam antrian sudah ditentukan lebih dahulu prioritasnya. Dalam hal ini berlaku dua ketentuan, yaitu: 1. Elemen-elemen yang mempunyai prioritas lebih tinggi akan diproses lebih

dahulu.

2. Dua elemen yang mempunyai prioritas sama akan dikerjakan sesuai dengan urutan pada saat kedua elemen ini masuk dalam antrian.

Percobaan 1 : Memahami Penggunaan dari class PriorityQueue import java.util.*;

public class PriorityQueueDemo {

public static void main(String[] args){ PriorityQueue<String> stringQueue;

stringQueue = new PriorityQueue<String>(); stringQueue.add("ab");

stringQueue.add("abcd"); stringQueue.add("abc"); stringQueue.add("a");

//don't use iterator which may or may not //show the PriorityQueue's order

while(stringQueue.size() > 0)

System.out.println(stringQueue.remove()); }

}

Percobaan 2 : Memahami Penggunaan dari class PriorityQueue dan data yang tersimpan dalam objek PriorityQueue mengimplementasikan interface Comparator.

import java.util.Comparator; import java.util.PriorityQueue;

public class PQueueTest {

public static void main(String[] args) {

PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>(10, new Comparator<Integer>() {

public int compare(Integer int1, Integer int2) { boolean flag1 = isPrime(int1);

boolean flag2 = isPrime(int2);

if (flag1 == flag2){

return int1.compareTo(int2); } else if (flag1) {

(6)

return -1; } else if(flag2) { return 1; } return 0; } }); pQueue.add(1); pQueue.add(5); pQueue.add(6); pQueue.add(4); pQueue.add(2); pQueue.add(9); pQueue.add(7); pQueue.add(8); pQueue.add(10); pQueue.add(3); while(true) {

Integer head = pQueue.poll(); if(head == null) { break; } System.out.print(head + " <-- "); } } /** * * @param n * @return */

public static boolean isPrime(int n) { if (n <= 1) { return false; } if (n == 2) { return true; } if (n % 2 == 0) { return false; }

long m = (long) Math.sqrt(n); for (long i = 3; i <= m; i += 2) { if (n % i == 0) { return false; } } return true; } }

(7)

Percobaan 3.

import java.util.Comparator; import java.util.PriorityQueue; enum ProductQuality {

High, Medium, Low }

class Product implements Comparable<Product> { String name;

ProductQuality priority;

Product(String str, ProductQuality pri) { name = str;

priority = pri; }

public int compareTo(Product msg2) { return priority.compareTo(msg2.priority); }

}

class MessageComparator implements Comparator<Product> { public int compare(Product msg1, Product msg2) {

return msg2.priority.compareTo(msg1.priority); }

}

public class Main {

public static void main(String args[]) {

PriorityQueue<Product> pq = new PriorityQueue<Product>(3); pq.add(new Product("A", ProductQuality.Low));

pq.add(new Product("B", ProductQuality.High)); pq.add(new Product("C", ProductQuality.Medium)); Product m;

while ((m = pq.poll()) != null)

System.out.println(m.name + " Priority: " + m.priority);

PriorityQueue<Product> pqRev = new PriorityQueue<Product>(3, new MessageComparator());

pqRev.add(new Product("D", ProductQuality.Low)); pqRev.add(new Product("E", ProductQuality.High)); pqRev.add(new Product("F", ProductQuality.Medium)); while ((m = pqRev.poll()) != null)

System.out.println(m.name + " Priority: " + m.priority); }

(8)

Percobaan 4 : The program processes job requests with different

employee statuses. Output lists the jobs by status along with their total time.

import java.io.*;

import java.util.Scanner; import ds.util.HeapPQueue;

public class Program15_3

{

public static void main(String[] args) throws IOException

{

// handle job requests

HeapPQueue<JobRequest> jobPool = new HeapPQueue<JobRequest>(); // job requests are read from file "job.dat" Scanner sc = new Scanner(new FileReader( "job.dat"));

// time spent working for each category // of employee

// initial time 0 for each category int[] jobServicesUse = {0,0,0,0}; JobRequest job = null;

// read file; insert each job into // priority queue

while ((job = JobRequest.readJob(sc)) != null) jobPool.push(job);

// delete jobs from priority queue // and output information

System.out.println("Category Job ID" + " Job Time");

while (!jobPool.isEmpty()) {

// remove a job from the priority // queue and output it

job = (JobRequest)jobPool.pop(); System.out.println(job);

// accumulate job time for the // category of employee jobServicesUse[job.getStatus().value()] += job.getJobTime(); } System.out.println(); writeJobSummary(jobServicesUse); }

private static void writeJobSummary( int[] jobServicesUse)

{

System.out.println("Total Pool Usage"); System.out.println(" President " + jobServicesUse[3]);

System.out.println(" Director " + jobServicesUse[2]);

(9)

System.out.println(" Manager " + jobServicesUse[1]); System.out.println(" Clerk " + jobServicesUse[0]); } } E. Mengimplementasikan PriorityQueue Interface PQueue boolean isEmpty()

Mengembalikan nilai true jika queue kosong dan false jika queue terdapat minimal satu elemen.

T peek() Mengembalikan elemen dengan prioritas tertinggi. Jika queue kosong melempar exception yaitu: throws

NoSuchElementException.

T pop() Menghapus elemen di depan queue dan mengembalikan nilai berdasarkan prioritas tertinggi. Jika queue kosong maka melempar exception yaitu : NoSuchElementException. void push(T

item)

Menyisipkan item di queue

int size() Mengembalikan jumlah elemen dari queue.

Membuat Class HeapPQueue , dengan mengurutkan data menggunakan Comparator

import java.util.Collections; import java.util.Comparator; import java.util.LinkedList;

public class HeapPQueue<T> implements PQueue<T> {

private LinkedList<T> qlist = null;

private Comparator<T> comparator = null ;

public HeapPQueue() {

qlist= new LinkedList<T>(); }

public HeapPQueue(Comparator comp) {

qlist= new LinkedList<T>(); comparator = comp ; }

@Override

public boolean isEmpty() {

throw new UnsupportedOperationException("Not supported yet."); }

(10)

@Override

public T peek() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T pop() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override

public void push(T item) {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public int size() {

throw new UnsupportedOperationException("Not supported yet."); }

}

Membuat Class HeapPQueue , dengan mengurutkan data menggunakan Comparable

public class HeapPQueueComparable<T extends Comparable<? super T>> implements PQueue<T> {

private LinkedList<T> qlist = null; public HeapPQueueComparable() { qlist= new LinkedList<T>(); }

@Override

public boolean isEmpty() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T peek() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override public T pop() {

throw new UnsupportedOperationException("Not supported yet."); }

@Override

public void push(T item) {

throw new UnsupportedOperationException("Not supported yet."); }

(11)

public int size() {

throw new UnsupportedOperationException("Not supported yet."); }

}

Selanjutnya lakukan pengujian terhadap Class class HeapPQueue dan

Referensi

Dokumen terkait

Merariq adalah suatu tradisi perkawinan yang unik dimana seorang laki- laki harus melarikan atau menculik si gadis sebelum melakukan ritual pernikahan. Merariq ini umum

Dalam hal ini CiWalk memiliki divisi pemeliharaan dan perawatan yang tugasnya secara umum adalah: menjaga kebersihan sarana, prasarana, dan peralatan pada bangunan

Adapun strategi kreatif yang digunakan pada perancangan informasi Museum Keraton Kesultanan Sambaliung ini menggunakan metode Adapun pada perancangan informasi menggunakan metode

signifikan telah mengkonservasi tumbuhan liar secara ex situ. Kehadiran kebun raya sebagai laboratorium pendidikan lingkungan secara tidak langsung mempunyai peran penting dalam

Hal ini menunjukkan bahwa untuk induksi kalus embriogenik pada kultur meristem jahe dibutuhkan kombinasi konsentrasi optimum 2,4-D dan BA, yang mampu meningkatkan sensitivitas sel

• Waktu istirahat diberikan untuk setiap anggota kelompok agar dapat memikirkan gagasan yang baru berdasarkan dari gagasan temannya dan menuliskannya pada kartu

Sementara anomali total relatif tinggi (notasi ungu) di bagian tengah dan selatan daerah penelitian diduga merupakan efek dari polarisasi batuan yang bersifat magnetik pada zona

Lembaga ini akan yang menjadi lembaga yang adil bagi perempuan, hanya bila laki-laki dan perempuan bekerja sama secara setara untuk mencapai apa yang mer- eka