BAB 8 Algoritma Struktur Data ADT AN

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB
NAMA
NIM
TANGGAL
ASISTEN

: ADT ANTRIAN
: MOH. ARIF ANDRIAN
: 156150600111002
: 19/11/2016
: HARITS ABDURROHMAN

A. DEFINISI MASALAH
1. 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
2. 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

B. SOURCE CODE
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

QueueCSLL.java
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++;
}

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

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

81
82
83
84
85
86
87
88
89
90
91

92
93
94
95
96

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();
}

}

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

RoundRobin.java
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) {

}

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

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 “
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.

1
2
3
4
5
6
7
8
9

RoundRobin.java
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

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

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.

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

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

98
100
102
105

Menampilkan “Dequeue B “.
Menampilkan ganti baris.
Objek data memanggil method cetak.
Akhir deklarasi class RoundRobin.

D. SCREENSHOT PROGRAM

Gambar. Studi kasus No. 1

Gambar. Studi kasus No. 2
E. KESIMPULAN
1. 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
a. Elemen a1 adalah elemen paling depan
b. Elemen ai adalah diatas elemen ai-1, di mana 1 < i < n.
c. Elemen an adalah elemen paling belakang
Karakteristik penting antrian sebagai berikut :
a. Elemen antrian yaitu item-item data yang terdapat di elemen antrian.
b. Head/front (elemen terdepan dari antrian ).
c. Tail/rear (elemen terakhirdari antrian ).
d. 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.
2. 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:
a. 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.
b. Dequeue : mengeluarkan data terdepan dari antrian, dengan cara mengurangi
counter Tail dan menggeser semua elemen antrian kedepan.
c. Clear : menghapus seluruh antrian, dengan cara mengeluarkan semua antrian
tersebut satu per satu hingga antrian kosong dengan memanfaatkan fungsi
dequeue.
d. IsEmpty : memeriksa apakah antrian kosong atau sudah berisi antrian lagi.
e. IsFull : memeriksa apakah antrian penuh atau masih bisa menampung antrian
dengan cara mengecek apakah nilai tail sudah sama dengan jumlah maksimal
Queue.