• Tidak ada hasil yang ditemukan

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA ADT QUEUE

N/A
N/A
Protected

Academic year: 2022

Membagikan "LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA ADT QUEUE"

Copied!
20
0
0

Teks penuh

(1)

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA

ADT QUEUE

Disusun oleh :

Nama : Gustian Ri’pi

NIM : 135150201111060

Asisten 1 :

Az Zahra Rahma Putri Afifa

Asisten 2 :

Fitri Bibi Suryani

Dosen Pengampu :

Lailil Muflikhah

, S.Kom., M.Sc.

LABORATORIUM KOMPUTER DASAR

PROGRAM TEKNOLOGI INFORMASI DAN ILMU KOMPUTER UNIVERSITAS BRAWIJAYA

2014

Pengesahan Tanggal:

Asisten

(2)

A. Definisi Masalah

1. Membuat sebuah aplikasi antrian berprioritas dengan menggunakan ADT Queue priority. Dalam hal ini adalah aplikasi Rumah Sakit, dimana terdapat fitur untuk : Masuk antrian (user menginput nama pasien dan kondisi pasien), Melihat daftar antrian, serta memanggil pasien dalam antrian sesuai prioritas antrian yang telah ditetapkan.

B. Pseudocode

Pseudocode class Node.java Start

Var data : Object Var next : Node

Constructor Node(object: Object) start

this(object, null) end

Constructor Node(object : Object, node: Node) start

data  object next  node end

Function getObject() : Object start

return data end

Function getNext() : Node start

return next end

End

(3)

Pseudocode class List.java Start

Var nodeAwal : Node Var nodeAkhir : Node Var nama : String Constructor public List() Start

this("list") end

Constructor public List(namaList : String) Start

nama  namaList

nodeAwal  nodeAkhir  null end

Procedure sisipDiAwal(dt : Object) Start

if (kosong()) then

nodeAwal  nodeAkhir  new Node(dt) else

nodeAwal  new Node(dt, nodeAwal) endif

end

Procedure sisipDiAkhir(dt : Object) Start

if (kosong()) then

nodeAwal  nodeAkhir  new Node(dt) else

nodeAkhir  nodeAkhir.next  new Node(dt) endif

end

(4)

Function hapusDrDepan() : Object Start

Var itemDihapus : Object  null if (!kosong()) then

itemDihapus  nodeAwal.data if (nodeAwal = = nodeAkhir) then nodeAwal  nodeAkhir  null else

nodeAwal  nodeAwal.next endif

endif

return itemDihapus end

Function kosong() : boolean Start

return nodeAwal = = null end

Procedure cetak() Start

if (kosong()) then

print("%s telah kosong \n", nama) return

endif

print("Urutan %s sekarang : ", nama) Var kini : Node  nodeAwal

while (kini != null)

print("%s <-- ", kini.data) kini  kini.next

endwhile

endif

End

(5)

Pseudocode class Pasien.java Start

Var nama : String Var kondisi : boolean

Constructor Pasien(nama:String, kondisi:boolean) Start

this.nama  nama this.kondisi  kondisi end

Function getNama() : String Start

return nama end

Function getKondisi() : Boolean Start

return kondisi end

Function toString() : String Start

return String.format("%s%s", "", nama) end

End

Pseudocode class Queue.java Start

Var listAntrian : List Constructor Queue() start

listAntrian  new List("antrian")

end

(6)

Procedure enqueue(object : Object, priority : int) Start

if (priority = = 0) {

listAntrian.sisipDiAkhir(object) else

listAntrian.sisipDiAwal(object) endif

end

Function dequeue() : Object Start

return listAntrian.hapusDrDepan() end

Function kosong() : boolean Start

return listAntrian.kosong() end

Procedure cetak() Start

listAntrian.cetak() end

End

Pseudocode class QueueDemo.java Start

Var pilihan, x : int Var nama : String Var kondisi : boolean

Var in : Scanner  new Scanner(System.in) Var rs : Queue  new Queue()

doWhile !=0

print("Antrian Rumah Sakit")

print("Menu")

(7)

print("1. Masuk antrian") print("2. Lihat daftar antrian")

print("3. Panggil pasien dalam antrian") print("0. Keluar")

print("Masukkan pilihan menu : ") pilihan  in.nextInt()

switch (pilihan)

case 1: masukAntrian() break

case 2: daftarAntrian() break

case 3: keluarAntrian() break

default:

invalidMenu() endSwitch

endDo

Procedure masukAntrian() Start

print("\nMasuk Antrian")

print("Masukkan nama pasien : ") nama  in.next()

doWhile (x != 0 && x != 1)

print("Masukkan kondisi\n1->gawat darurat 0->bukan : ") x  in.nextInt()

if (x = = 0) then kondisi  false else

kondisi  true endif

Pasien pasien  new Pasien(nama, kondisi)

if (kondisi = = false) then

(8)

rs.enqueue(pasien, 0) else

rs.enqueue(pasien, 1) endif

end

Procedure daftarAntrian() Start

print("\nLihat Daftar Antrian") rs.cetak()

end

Procedure keluarAntrian() Start

print("\nPanggil Pasien dalam Antrian") if (rs.kosong() = = true) then

print("Antrian telah kosong") else

Var dtHapus : Object  rs.dequeue()

print("%s telah keluar dari antrian dan sedang dalam pemeriksaan dokter \n", dtHapus)

endif end

Procedure invalidMenu() Start

if (pilihan = = 0) then

print("\nKeluar dari Program") else

print("PILIHAN MENU TIDAK TERSEDIA") print("Silahkan Ulang Input Pilihan\n")

endif

end

End

(9)

C. Source Code

Node.java 1

2 3 4 5 6 7 8 910 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

public class Node { // atribut data Object data;

Node next;

// constructor node Node(Object object) { this(object, null);

}

// constructor node

Node(Object object, Node node) { data = object;

next = node;

}

// function getter data Object getObject() { return data;

}

// function getter pointer next Node getNext() {

return next;

} }

List.java 1

2 3 4 5 6 7 8 9 10 11 12 13

public class List { // atribut data

private Node nodeAwal;

private Node nodeAkhir;

private String nama;

// constructor SLL public List() { this("list");

}

// constructor SLL

public List(String namaList) { nama = namaList;

(10)

14 15 16 17 18 1920 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

nodeAwal = nodeAkhir = null;

}

// procedure menyisipkan data di awal SLL public void sisipDiAwal(Object dt) { if (kosong()) {

nodeAwal = nodeAkhir = new Node(dt);

} else {

nodeAwal = new Node(dt, nodeAwal);

} }

// procedure menyisipkan data di akhir SLL public void sisipDiAkhir(Object dt) { if (kosong()) {

nodeAwal = nodeAkhir = new Node(dt);

} else {

nodeAkhir = nodeAkhir.next = new Node(dt);

} }

// function menghapus data dari depan public Object hapusDrDepan() {

Object itemDihapus = null;

if (!kosong()) {

itemDihapus = nodeAwal.data;

if (nodeAwal == nodeAkhir) { nodeAwal = nodeAkhir = null;

} else {

nodeAwal = nodeAwal.next;

} }

return itemDihapus;

}

// function pengecekan apakah SLL kosong public boolean kosong() {

return nodeAwal == null;

}

// procedure mencetak data public void cetak() { if (kosong()) {

System.out.printf("%s telah kosong

\n", nama);

(11)

60 61 62 63 64 6566 67 68 69 70 71 72

return;

}

System.out.printf("Urutan %s sekarang :

", nama);

Node kini = nodeAwal;

while (kini != null) {

System.out.printf("%s <-- ", kini.data);

kini = kini.next;

}

System.out.println("\n");

} }

Pasien.java 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

public class Pasien { // atribut data

private final String nama;

private final boolean kondisi;

// constructor Pasien

public Pasien(String nama, boolean kondisi) { this.nama = nama;

this.kondisi = kondisi;

}

// function getter nama public String getNama() { return nama;

}

// function getter kondisi public boolean getKondisi() { return kondisi;

}

@Override

public String toString() {

return String.format("%s%s", "", nama);

} }

(12)

Queue.java 1

2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

public class Queue { // atribut data

private final List listAntrian;

// constructor Queue public Queue() {

listAntrian = new List("antrian");

}

// procedure menyisipkan data pada queue public void enqueue(Object object, int priority) {

if (priority == 0) {

listAntrian.sisipDiAkhir(object);

} else {

listAntrian.sisipDiAwal(object);

} }

// function mengambil data pada queue public Object dequeue() {

return listAntrian.hapusDrDepan();

}

// function pengecekan apakah queue kosong public boolean kosong() {

return listAntrian.kosong();

}

// procedure mencetak data pada queue public void cetak() {

listAntrian.cetak();

} }

QueueDemo.java 1

2 3 4 5 6 7

import java.util.Scanner;

public class QueueDemo { // atribut data

private static int pilihan, x;

private static String nama;

private static boolean kondisi;

(13)

8 9 10 11 12 1314 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

private static final Scanner in = new Scanner(System.in);

private static final Queue rs = new Queue();

// implementasi queue

public static void main(String[] args) { do {

System.out.println("\n***********************");

System.out.println(" Antrian Rumah Sakit");

System.out.println("---\n");

System.out.println("Menu");

System.out.println("---");

System.out.println("1. Masuk antrian");

System.out.println("2. Lihat daftar antrian");

System.out.println("3. Panggil pasien dalam antrian");

System.out.println("0. Keluar");

System.out.print("Masukkan pilihan menu : ");

pilihan = in.nextInt();

switch (pilihan) { case 1:

masukAntrian();

break;

case 2:

daftarAntrian();

break;

case 3:

keluarAntrian();

break;

default:

invalidMenu();

}

} while (pilihan != 0);

}

// procedure memasukkan data pada queue static void masukAntrian() {

System.out.println("\nMasuk Antrian");

System.out.println("---");

System.out.print("Masukkan nama pasien

(14)

54 55 56 57 58 5960 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

: ");

nama = in.next();

do {

System.out.print("Masukkan kondisi\n1->gawat darurat 0->bukan : ");

x = in.nextInt();

} while (x != 0 && x != 1);

if (x == 0) {

kondisi = false;

} else {

kondisi = true;

}

Pasien pasien = new Pasien(nama, kondisi);

if (kondisi == false) { rs.enqueue(pasien, 0);

} else {

rs.enqueue(pasien, 1);

} }

// procedure melihat isi data pada queue static void daftarAntrian() {

System.out.println("\nLihat Daftar Antrian");

System.out.println("---");

rs.cetak();

}

// procedure mengambil/menghapus data pada queue

static void keluarAntrian() {

System.out.println("\nPanggil Pasien dalam Antrian");

System.out.println("--- -");

if (rs.kosong() == true) {

System.out.println("Antrian telah kosong");

} else {

Object dtHapus = rs.dequeue();

System.out.printf("%s telah keluar dari antrian dan sedang dalam pemeriksaan dokter \n", dtHapus);

(15)

100 101 102 103 104 105106 107 108 109 110 111 112 113 114 115 116 117

} }

// procedure untuk input pilihan menu keluar atau tidak ada

static void invalidMenu() { if (pilihan == 0) {

System.out.println("\nKeluar dari Program");

System.out.println("---");

} else {

System.out.println("PILIHAN MENU TIDAK TERSEDIA");

System.out.println("Silahkan Ulang Input Pilihan\n");

} } }

D. Pembahasan

Node.java 1

3-5 7-10 12-16 18-21 23-26

Mendeklarasikan class dengan nama Node

Mendeklarasikan variabel bernama data dengan tipe Object; dan varibel bernama next dengan tipe Node.

Constructor class Node, dengan parameter object

Constructor class Node, dengan parameter object dan node Function untuk mendapatkan data; return variabel data

Function untuk mendapatkan pointer berikutnya; return variabel next

List.java 1

2-5 7-15 17-24 26-34

Mendeklarasikan class dengan nama List

Mendeklarasikan variabel bernama : nodeAwal, nodeAkhir dengan tipe Node; dan variabel nama dengan tipe String.

Constructor untuk SLL dengan parameter namaList; inisialisasi variabel nodeAwal dan nodeAkhir dengan nilai null.

Procedure untuk menyisipkan data di awal list; parameter variabel dt dengan tipe Object.

Procedure unutuk menyisipkan data di akhir list; parameter variabel dt dengan tipe Object.

(16)

36-48 50-53 55-72

Function untuk menghapus isi list dari depan; return variabel itemDihapus.

Function untuk mengecek apakah list dalam keadaan kosong;

return variabel nodeAwal dengan nilai null.

Procedure untuk mencetak data yg ada dalam list.

Pasien.java 1

3-5 7-11 13-16 18-21 23-26

Mendeklarasikan class dengan nama Pasien.

Mendeklarasikan variabel bernama nama dengan tipe String, dan variabel bernama kondisi dengan tipe boolean.

Constructor untuk class Pasien dengan parameter variabel nama dan kondisi.

Function untuk mendapatkan nama pasien; return variabel nama.

Function untuk mendapatkan kondisi pasien; return variabel kondisi

Override method toString();

Method untuk format penulisan obyek yang dibuat dari class Pasien.

Queue.java 1

3-4 6-9 11-19 21-24 26-29

31-34

Mendeklarasikan class dengan nama Queue.

Mendeklarasikan variabel bernama listAntrian dengan tipe List.

Constructor untuk class Queue; menyimpan data list ke variabel listAntrian

Procedure untuk menambahkan elemen pada antrian; parameter variabel object dan priority.

Function untuk mengambil elemen dalam antrian; return variabel listAntrian dengan mengakses data dari method hapusDrDepan.

Function untuk mengecek apakah antrian dalam keadaan kosong; return variabel listAntrian dengan mengakses data dari method kosong().

Procedure untuk mencetak elemen data yang ada dalam antrian.

(17)

QueueDemo.java 1

2 5 6 7 8-9 10 13 14 16-29 30-31 32 34-36 37-39 40-42 43-44 46 49-73

75-82 84-100 102-116

Mengimport data dari package Scanner

Mendeklarasikan class dengan nama QueueDemo.

Mendeklarasikan variabel integer dengan nama: pilihan, x Mendeklarasikan variabel String dengan nama: nama Mendeklarasikan variabel Boolean dengan nama: kondisi Mendeklarasikan variabel Scanner dengan nama in Membuat objek dari kelas Queue dengan nama rs Mendeklarasikan main method

Memulai perulangan

Mencetak header dan daftar menu program Meminta inputan pilihan menu dari user Menyimpan inputan ke variabel pilihan

Jika variabel pilihan bernilai 1, akan mengakses data dari method masukAntrian().

Jika variabel pilihan bernilai 2, akan mengakses data dari method daftarAntrian().

Jika variabel pilihan bernilai 3, akan mengakses data dari method keluarAntrian()

Jika variabel pilihan tidak valid, akan mengakses data dari method invalidMenu()

Kembali melakukan perulangan selama variabel pilihan tidak bernilai 0.

Procedure untuk menambahkan elemen pada antrian; meminta inputan nama dan kondisi pasien kepada user; Melakukan seleksi apakah pasien dalam kondisi gawat darurat atau bukan untuk memberikan prioritas antrian.

Procedure untuk menampilkan isi elemen dalam antrian;

mengakse data dari method cetak().

Procedure untuk menghapus elemen dalam antrian; mengakses data dari method dequeue().

Procedure untuk memberitahukan user bahwa input pilihan menu yang dimasukkan tidak valid.

(18)

E. Screenshoot Program

(19)
(20)

F. Kesimpulan

1. ADT Queue (antrian) adalah struktur data dimana proses pengambilan dan penambahan element dilakukan pada ujung yang berbeda dengan mengikuti konsep FIFO (First In First Out). Queue berguna untuk menyimpan pekerjaan yang tertunda.

2. Contoh penggunaan atau implementasi dari ADT Queue mis-

alnya aplikasi untuk antrian di rumah sakit, mailbox dalam

komunikasi antar proses, simulasi dan modeling (misalnya

simulasi sistem pengendali lalu lintas udara) dalam

memprediksi performansi, Waiting Line pada Sistem Operasi

Referensi

Dokumen terkait

Deklarasi method bernama sisipDataUrut yang tidak mengembalikan nilai dan bersifat public serta memiliki parameter data bertipe integer. Instansiasi objek bernama x dari kelas Node

Setelah itu saya memasukkan pilihan, disini saya memasukkan angka 1 maka selanjutnya program akan menyimpannya kemudian memanggil fungsi void pilih( )... Didalam fungsi

nama : saya menggunakan tipe data yang tergolong data string yaitu VARCHAR dengan panjang rekaman sebanyak 20 digit, karena saya gunakan untuk merekam nama barang.. Saya

Tipe ini merupakan tipe yang paling banyak dipakai dalam merepresentasikan angka dalam Java, dikarenakan dianggap paling efisien dibandingkan dengan tipe-tipe integer

Seperti yang telah kita pelajari pada praktikum 3, untuk menyimpan data yang umum, kita dapat memanfaatkan class Object yang dibuat dalam format generic.. Berikut

char nama[10][50]; berarti mendeklarasikan array of string yang berjumlah 10 data bertipe string (array of character), dimana masing-masing string mampu. menampung karakter

Hanya tiga tree pertama di bawah ini yang full: t x Implementasikan secara recursive method boolean isFullBinaryTreeNode n yang me-return true jika tree yang root-nya n adalah full,

Pada Gambar 3.1 dimisalkan membuat dua buah konstanta atau variabel dengan nama identifier nilai dan X yang masing-masing dapat digunakan untuk menyimpan suatu nilai dalam memori