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
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
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
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
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
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")
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
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
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;
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);
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);
} }
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;
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
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);
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.
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.
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.