LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB : ADT ANTRIAN
NAMA : MOH. ARIF ANDRIAN
NIM : 156150600111002
TANGGAL : 19/11/2016
ASISTEN : HARITS ABDURROHMAN
DEFINISI MASALAH
Kembangkan program antrian dengan menggunakan ADT Cicular Single Linked List yang telah dibuat pada praktikum 7. Perhatikan bahwa sifat antrian adalah FIFO : First In First Out
Susunlah program untuk simulasi Round Robin. Setiap proses deQueue() dilakukan pada suatu node maka isi suatu node berkurang 1, kalau nilainya sudah sama dengan 0 maka node tersebut dihapus dari List jika lebih besar dari 0 node tersebut diantrikan lagi untuk diperoses berikutnya
SOURCE CODE
QueueCSLL.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
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
60
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
package Praktikum8;
class NodeCSLL {
NodeCSLL next;
Object data;
}
public class QueueCsll {
String name;
private int size;
private NodeCSLL pAwal, pAkhir;
public QueueCsll(String dt) {
name = dt;
pAwal = null;
pAkhir = null;
size = -1;
}
public void enqueue(Object data) {
NodeCSLL baru = new NodeCSLL();
baru.data = data;
baru.next = null;
if (pAwal == null) {
pAkhir = pAwal = baru;
pAkhir.next = pAwal;
size = 0;
} else {
pAkhir.next = baru;
pAkhir = baru;
pAkhir.next = pAwal;
size++;
}
}
public Object dequeue() {
Object dataHapus = null;
if (!isEmpty()) {
dataHapus = pAwal.data;
if (pAwal == pAkhir) {
pAwal = pAkhir = null;
} else {
pAwal = pAwal.next;
pAkhir.next = pAwal;
size--;
}
}
return dataHapus;
}
public boolean isEmpty() {
return (pAwal == null);
}
public Object hapusDrDepan() {
Object itemDihapus = null;
if (!isEmpty()) {
itemDihapus = pAwal.data;
if (pAwal == pAkhir) {
pAwal = pAkhir = null;
} else {
pAwal = pAwal.next;
}
}
return itemDihapus;
}
public void cetak() {
NodeCSLL cetak;
cetak = pAwal;
int i = -1;
if (pAwal == null) {
System.out.print("HABIS");
} else {
System.out.print("DATA QUEUE : ");
while (!isEmpty() && i < size) {
System.out.print(cetak.data + " > ");
cetak = cetak.next;
i++;
}
}
System.out.println("\n");
}
public static void main(String[] args) {
QueueCsll data = new QueueCsll(" ==== ANTRIAN ===");
data.enqueue(4);
data.cetak();
data.enqueue(1);
data.cetak();
data.enqueue(14);
data.cetak();
data.enqueue(20);
data.cetak();
data.enqueue(16);
data.cetak();
Object menghapus = null;
while (!data.isEmpty()) {
System.out.print("HAPUS DATA -> ");
menghapus = data.dequeue();
System.out.printf("%s \n", menghapus);
data.cetak();
}
}
}
RoundRobin.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
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
60
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
100
101
102
103
104
105
package Praktikum8;
class Node {
Object data;
Node next;
public Node(Object data) {
this.data = data;
next = null;
}
public Object getData (){
return data;
}
public Node getNext(){
return next;
}
}
public class RoundRobin {
Node pAwal = null;
Node pAkhir = null;
int counter;
public void enqueue(Object dt) {
Node baru = new Node(dt);
if (pAwal == null) {
pAwal = pAkhir = baru;
counter = 0;
} else {
pAkhir.next = baru;
pAkhir = baru;
counter++;
}
}
Object dequeue() {
Object result = pAwal.data;
if (pAwal == null) {
return null;
} else if (pAwal == pAkhir) {
pAwal = pAkhir = null;
} else {
pAwal = pAwal.next;
}
counter--;
return result;
}
Object RoundRobin(){
int round = (int) dequeue();
round -= 1;
if (round != 0) {
enqueue(round);
}
return round;
}
boolean isEmpty() {
return pAwal == null;
}
public void cetak(String Komentar) {
System.out.print(Komentar);
Node newNode = pAwal;
int i = -1;
if (newNode != null) {
i = 0;
}
while ((i <= counter) && (i != -1)) {
if (!this.isEmpty()) {
System.out.print("");
} else {
System.out.print("null");
}
newNode = newNode.next;
i++;
}
}
public void cetak() {
cetak("Queue : ");
}
public static void main(String[] args) {
RoundRobin data = new RoundRobin();
int jmlDt = 2;
int A,B;
A = 4;
B = 6;
System.out.println("Jumlah data: "+jmlDt);
System.out.print("Panjang Antrian A: "+A+" " ");
data.enqueue(A);
System.out.println("Panjang Antrian B: "+B);
data.enqueue(B);
System.out.println();
System.out.print("Queue : ");
int counter = 0;
while (!data.isEmpty()) {
int data2 = (int) data.RoundRobin();
if (data2 != 0) {
System.out.println((data2 + 1) + " - 1 = " + data2+", Back to Queue");
counter++;
} else {
System.out.println((data2 + 1) + " - 1 = " + data2);
if (counter == (A+jmlDt)) {
System.out.print("Dequeue A");
} else if (counter == (B+jmlDt)){
System.out.print("Dequeue B");
}
System.out.println();
}
data.cetak();
}
}
}
PEMBAHASAN
QueueCSLL.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
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
60
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
Package diman file java disimpan.
Deklarasi class NodeCSLL
Inisialisasi NodeCSLL dengan variabel next
Mendeklaraiskan variabel data dengan tipe Object
Akhir deklarasi class.
Deklarasi kelas dengan nama QueueCSLL
Deklarsi name dengan tipe data String
Deklarasi size dengan tipe data int modifier private
Deklarasi pAwal , pAkhir dengan tipe class NodeCSLL modifier private
Membuat konstruktor dengan parameter dt modifier public.
Inisialisasi name dengan dt
Inisialisasi pAwal sama dengan null
Inisialisasi pAkhir sama dengan null
Inisialisasi size sama dengan -1.
Akhir deklarasi konstruktor.
Membuat method enqueuer dengan parameter Object data bertipe public modifier void
Mendklarasikan class NodeCSLL dengan nama baru atau dapat dipanggil dengan baru
Inisialisasi baru.data sama dengan nilai data
Inisialisasi baru.next sama dengan nilai null
Syarat if ini melakukan pAwal sama dengan null
Inisialisasi pAkhir sama dengan pAwal sama dengan baru
Inisialisasi pAkhir.next sama dengan pAwal
Size ini akan memulainya dari angka 0
Elses ini melakukan perintah lain apa bila tidak sama diatas
Inisialisasi pAkhir.next sama dengan baru
Inisialisasi pAkhir sama dengan baru
Inisialisasi pAkhir.next sama dengan pAwal
Akan menambah size (increment).
Akhir proses seleksi kondisi.
Akhir deklarasi methhod.
Membuat method Object dequeuer dengan bertipe public
Inisialisasi Object dataHapus dengan bernilai null
Syarat if ini melakukan apabila data tidak isEmpty atau kosong
Inisialisasi dataHapus sama dengan pAwal.data
Syarat if apabila pAwal sama dengan pAkhir maka akan melakukan perintah
Inisialisasi pAwal sama dengan pAkhir smaa dengan null
Else ini melakukan perintah lain apabila tidak sesuai dengan diatas
Mendeklaraiskan pAwal sama dengan pAwal.next
Inisialisasi pAkhir.next sama dengan pAwal
Akan melakukan penghapusan data size
Akhir kondisi else.
Akhir proses selksi kondisi.
Mengembalikan nilai dataHapus.
Akhir deklarasi method.
Membuat method isEmpty dengan tipe Boolean modifier public
Mengembalikan nilai return dengan data pAwal sama dengan null
Akhir deklarasi method.
Membuat method Object hapusDrDepan bermodifier public
Inisialisasi Object itemDiHapus sama dengan null
Syarat if ini akan melakukan apabila data tidak kosong
Inisialisasi itemDihapus sama dengan pAwal.data
Syarat if ini akan melakukan apabila pAwal sama dengan pAkhir
Inisialisasi pAwal sama dengan pAkhir sama dengan null
Else ini akan melakukan apabila tidak sesuai perintah diatas
Inisialisasi pAwal sama dengan pAwal.nent-
Akhir kondisi else.
Akhir proses seleksi kondisi.
Megembalikan nilai return itemDiHapus.
Akhir deklarasi method.
Membuat method cetak dengan tipe void modifier public
Inisialisasi class NodeCSLL cetak
Inisialisasi cetak sama dengan pAwal
Inisialisasi i sama dengan -1 bertipe data int
Syarat if ini pAwal sama dengan null
Akan mencetak system.out.print HABIS
Else ini bersyarat lain apabila tidak sesuai dengan yang lain
Mencetak system.out.print dengan tampilan DATA QUEUE :
While bersyarat ini apabila data tidak kosong dan I kurang dari size
Akan mencetak system.out.prilt dengan pemanggilan cetak.data
Inisialisasi cetak sama dengan cetak.next
Akan menambah data i++
Akhir proses perulangan while.
Akhir kondisi else.
Akan mecetak system.out.println dengan tampilan akan secara otomatis enter cetak.
Akhir deklarasi method.
Membuat method main, untuk menjalankan program.
Inisialisasi class QueueCSLL dengan nama baru "data"
Memanggil class data.enqueue dengan nilai 4
Memanggil class data.cetak
Memanggil class data.enqueue dengan nilai 1
Memanggil class data.cetak
Memanggil class data.enqueue dengan nilai 14
Memanggila class data.cetak
Memanggil class data.enqueue dengan nilai 20
Memanggila class data.cetak
Memanggil class data.enqueue dengan nilai 16
Memanggil class data.cetak
Inisialisasi Object menghapus sama dengan null
Syarat while ini jika data tidak kosong maka akan melakukan proses dibawah ini
Mencetak system.out.print dengan tampilan "HAPUS DATA -> "
Mendeklaraiskan menghapus sama dengan data.dequeue
Mencetak tampilan system.out.printf dengan memasukkan data menghapus
Memangil method data.cetak
Akhir proses erulangan while.
Akhir deklarasi method main.
Akhir deklarasi class QueueCSLL.
RoundRobin.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
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
60
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
100
102
105
Package dimana file java disimpan.
Membuat class dengan nama Node
Mendeklaraiskan variabel data dengan tipe Object
Mendeklarasikan NodeCSLL dengan variabel next
Membuat konstruktor kelass node dengan parameter Object data modifier public
Mendeklarasikan bahwa data sama dengan data
Mendeklarasikan bahwa next sama dengan null
Akhir deklarasi konstruktor.
Membuat method Object getData dengan modifier public
Mengembalikan nilai data
Akhir deklarasi method.
Membuat method Node getNext dengan modifier public
Mengembalikan nilai next
Akhir deklarasi method.
Akhir deklarasi class.
Membuat class dengan nama RoundRobin
Mendeklarasikan Node pAwal sama dengan null
Mendeklarasikan Node pAkhir sama dengan null
Mendeklarasikan variabel counter dengan tipe data int
Membuat method enqueuer dengan parameter Object data bertipe public modifier void
Mendklarasikan class Node dengan nama baru atau dapat dipanggil dengan baru
Syarat if ini melakukan pAwal sama dengan null
Mendeklarasikan pAkhir sama dengan pAwal sama dengan baru
Size ini akan memulainya dari angka 0
Elses ini melakukan perintah lain apa bila tidak sama diatas
Mendeklarasikan pAkhir.next sama dengan baru
Mendeklarasikan pAkhir sama dengan baru
Akan menambah size(increment).
Akhir seleksi kondisi.
Akhir deklarsi method.
Membuat method Object dequeue dengan bertipe public
Mendeklarasikan Object result dengan bernilai pAwal.data
Syarat if ini melakukan apabila data tidak isEmpty atau kosong
Mengembalikan nilai null
Syarat else if apabila pAwal sama dengan pAkhir maka akan melakukan perintah
Mendeklarasikan pAwal sama dengan pAkhir smaa dengan null
Else ini melakukan perintah lain apabila tidak sesuai dengan diatas
Mendeklaraiskan pAwal sama dengan pAwal.next
Akhir kondisi else.
Akan melakukan penghapusan data size(decrement).
Mengembalikan nilai result.
Akhir deklarasi method.
Membuat methd RoundRobin dengan tipe data Object
Mendeklarasikan round dengan tipe data int sama dengan method dequeuer tipe data integer.
Mendeklaraiskan round ini memulai dari angka – sama dengan 1
If bersyarat ini apabila round tidak sama 0
Maka akan memanggil method enqueuer(round)
Akhir seleksi kondisi.
Mengembalikan nilai round
Akhir deklarasi method.
Membuat method isEmpty dengan tipe databoolean
Mengembalikan nilai pAwal sama dengan null
Akhir deklarsi method.
Membuat metod cetak dengan parameter String Komentar tipe void modifier public
Mencetak system.out.print dengan parameter Komentar
Mendeklarasikan class node newNode sama dengan pAwal
Mendeklarasikan int i sama dengan nilai -1
If bersyarat ini apabila newNode tidak sama null
Maka i sama dengan 0
Akhir seleksi kondisi.
While berysarat ini apabila i kurang dari sama dengan counter dan i tidak sama dengan -1 maka akan melakukan perintah dibawah
If bersyarat ini apabila nilai tidak kosong
Maka akan mencetak system.out.print
Else ini apa bila tidak sesuai dengan perintah diatas
Akan mencetak system.out.print "null"
Akhir kondisi else.
Mendeklarasukan newNode sama dengan newNode.next
Melakukan penambahan nilai i++
Akhir proses perulangan.
Akhir deklarsi method.
Membuat method cetak dengan tipe void modifier public
Memanggil method cetak "Queue : "
Akhir deklarasi method.
Deklarasi class main, untuk menjalankan program.
Instansiasi objek dari class RoundRobin dengan nama data.
Deklarasi variabel integer bernama jmlDt.
Deklarasi dua variabel integer bernama A dan B.
Menampilkan jmlDt.
Inisialisasi variabel A samadengan 4.
Inisialisasi variabel B samadengan 6.
Menampilkan panjang antrian A.
Objek data memanggil method enqueue dengan argumen nilai A.
Menampilkan panjang antrian B.
Objek data memanggil method enqueue dengan argumen nilai B.
Menampilkan ganti baris.
Menampilkan "Queue : "
Deklarasi dan inisialisasi varibel bertipe integer dengan nilai 0 bernama counter.
Proses perulangan jika objek data.isEmty negasi true.
Deklarasi dan inisialisasi variabel bertipe integer bernama data2 dengan nilai samadengan objek data.RoundRobin.
Proses seleksi kondisi, jika data2 negasi 0, maka
Menampilkan proses algoritma RoundRobin.
Increment variabel counter.
Jika selain kondisi diatas, maka
Menampilkan proses algoritma RoundRobin.
Proses seleksei kondisi, jika counter samadengan A+jmlDt, maka
Menampilkan "Dequeue A ".
Jika kondisi counter samadengan B+jmlDt, maka
Menampilkan "Dequeue B ".
Menampilkan ganti baris.
Objek data memanggil method cetak.
Akhir deklarasi class RoundRobin.
SCREENSHOT PROGRAM
Gambar. Studi kasus No. 1
Gambar. Studi kasus No. 2
KESIMPULAN
Jelaskan apa yang dimaksud dengan struktur data Queue/antrian?
Queue merupakan kumpulan atau antrian data/benda dimana data/benda yang diproses pertama merupakan data/benda yang masuk pertama ke dalam antrian.Queue merupakan perintah pengumpulan data yang disebut First In First Out (FIFO).
Misalnya Queue Q= (a1,a2,a3…,an), maka
Elemen a1 adalah elemen paling depan
Elemen ai adalah diatas elemen ai-1, di mana 1 < i < n.
Elemen an adalah elemen paling belakang
Karakteristik penting antrian sebagai berikut :
Elemen antrian yaitu item-item data yang terdapat di elemen antrian.
Head/front (elemen terdepan dari antrian ).
Tail/rear (elemen terakhirdari antrian ).
Jumlah elemen pada antrian (count).
Queue merupakan kakas dasar penyelesaian masalah-masalah besar. penggunaan Queue yang utama adalah untuk simulasi fenomena antrian di dunia nyata, serta fenomena antrian di pengolahan data.
Sebutkan dan jelaskan penerapan dari struktur data Queue/antrian?
Contoh penerapan queue adalah pada saat kita masuk antrian masuk konser, saat mengantri untuk masuk konser,penonton akan membentuk sebuah antrian yang memanjang. Urutan orang yang masuk ke dalam antrian tersebut disebut enqueue. Dalam suatu antrian yang datang lebih dulu mengantri untuk masuk nonton konser akan dilayani lebih dahulu (First Come First Serve), istilah yang sering dipakai bila seseorang keluar dari antrian adalah dequeue.
Walaupun berbeda implementasi struktur data Queue setidaknya harus memiliki operasi operasi sebagai berikut:
Enqueue : memasukan data ke dalam antrian, penambahan elemen selalu ditambahkan di elemen paling belakang. Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter tail.
Dequeue : mengeluarkan data terdepan dari antrian, dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan.
Clear : menghapus seluruh antrian, dengan cara mengeluarkan semua antrian tersebut satu per satu hingga antrian kosong dengan memanfaatkan fungsi dequeue.
IsEmpty : memeriksa apakah antrian kosong atau sudah berisi antrian lagi.
IsFull : memeriksa apakah antrian penuh atau masih bisa menampung antrian dengan cara mengecek apakah nilai tail sudah sama dengan jumlah maksimal Queue.