Anda di halaman 1dari 11

LAPORAN PRAKTIKUM ALGORITMA DAN

STRUKTUR DATA
PROGRAM TEKNOLOGI INFORMASI DAN ILMU
KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB : ANTRIAN
NAMA : RIZKY MUHAMMAD
NIM : 145150200111085
TANGGAL : 18/11/2015
ASISTEN : - DWI NOVI SETIAWAN
-MUHAMMAD SYAFIQ

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.

CSLL.java
1 package Tugas_Bab8;
2 public class CSLL {
3 Node head,tail;
4 int counter;
5 public CSLL() {
6 // TODO Auto-generated constructor stub
7 head=null;
8 tail=null;
9 }
10 public void cetak(String komentar) {
11 // TODO Auto-generated method stub
12 System.out.println(komentar);
13 Node pCetak;
14 pCetak = head;
15 int i=0;
16 while((i <= counter) ){
17 //int sem = (int)pCetak.data;
18 System.out.print(pCetak.data+" ");
19 pCetak = pCetak.next;
20 i++;
21 }
22 if(isEmpty()){
23 System.out.println("ANTRIAN KOSONG");
24 }
25 System.out.println("");
26 }
27 public boolean isEmpty() {
28 // TODO Auto-generated method stub
29 return head==null;
30 }
31 public Object hapusDepan() {
32 // TODO Auto-generated method stub
33 Object hapus = null;
34 if(!isEmpty()){
35 hapus = head.data;
36 if(head==tail){
37 head=tail=null;
38 counter--;
39 }
40 else{
41 tail.next=head.next;
42 head=head.next;
43 counter--;
44 }
45 }
46 return hapus;
47 }
48 public void sisipDiAwal(Object data) {
49 // TODO Auto-generated method stub
50 Node pBaru = new Node(data);
51 pBaru.data = data;
52 pBaru.next = null;
53 if (head == null){
54 head = pBaru;
55 tail = pBaru;
56 pBaru.next = head;
57 counter = 0;
58 } else {
59 pBaru.next = head;
60 head = pBaru;
61 tail.next = head;
62 counter++;
63 }
64 }
65 public void sisipDiAkhir(Object data) {
66 Node pBaru = new Node(data);
67 pBaru.data= data;
68 pBaru.next=null;
69 if(head == null ){
70 head=pBaru;
71 tail=pBaru;
72 pBaru.next=head;
73 counter=0;
74 }
75 else{
76 pBaru.next=head;
77 tail.next=pBaru;
78 tail=pBaru;
79 counter++;
80 }
81 }
82 }

Node.java
1 package Tugas_Bab8;
2 public class Node {
3 Object data;
4 Node next;
5 public Node(Object data) {
6 // TODO Auto-generated constructor stub
7 this.data=data;
8 }
9 }

Class Queue.java
1 package Tugas_Bab8;
2 public class Queue {
3 CSLL queue;
4 public Queue() {
5 // TODO Auto-generated constructor stub
6 queue = new CSLL();
7 }
8 public void enqueue(Object data) {
9 queue.sisipDiAkhir(data);
10 }
11 public Object dequeue() {
12 return queue.hapusDepan();
13 }
14 public boolean isEmpty() {
15 return queue.isEmpty();
16 }
17 public void cetak(String komentar) {
18 queue.cetak(komentar);
19 }
20 public static void main(String[] args) {
21 Queue q = new Queue();
22 q.enqueue(10);
23 q.cetak("Mencetak setelah dienque");
24 q.enqueue(40);
25 q.cetak("Mencetak setelah dienque");
26 q.enqueue(25);
27 q.cetak("Mencetak setelah dienque");
28 q.enqueue(30);
29 q.cetak("Mencetak setelah dienque");
30 System.out.println();
31 Object hapus = null;
32 while(!q.isEmpty()){
33 hapus=q.dequeue();
34 System.out.printf("%s dihapus \n",
hapus);
35 q.cetak("Mencetak setelah dideque");
36 }
37 }
38 }
2.
Proses.java
1 package Tugas_Bab8;
2 public class Proses {
3 int id, timeX;
4 public Proses(int id, int time) {
5 // TODO Auto-generated constructor stub
6 this.id=id;
7 this.timeX=time;
8 }
9 }

Class RoundRobin.java
1 package Tugas_Bab8;
2 import java.util.Scanner;
3 public class RoundRobin {
4 public static void main(String[] args) {
5 Queue list = new Queue();
6 Scanner input= new Scanner(System.in);
7 System.out.println("INPUT BANYAKNYA PROSES :
");int N=input.nextInt();
8 System.out.println("INPUT QUANTUM : ");int t =
input.nextInt();
9 for(int i = 0 ;i<N;i++){
10 System.out.println("INPUT PROSES KE "+i);
11 System.out.println("Masukan Excecute time
");
12 int time = input.nextInt();
13 Proses baru = new Proses(i,time);
14 list.enqueue(baru);
15 }
16 //Proses SiMULASI
17 while (!list.isEmpty()) {
18 //mencetak
19 Node pCetak;
20 pCetak = list.queue.head;
21 int i=0;
22 while((i <= list.queue.counter) ){
23 //int sem = (int)pCetak.data;
24 Proses cetak = (Proses)
pCetak.data;
25 System.out.print(cetak.id+" ");
26 pCetak = pCetak.next;
27 i++;
28 }
29 if(list.queue.isEmpty()){
30 System.out.println("ANTRIAN
KOSONG");
31 }
32 System.out.println("");
33 //
34 Proses pros = (Proses) list.dequeue();
35 System.out.println("Proses "+pros.id+"
diproses");
36 pros.timeX=pros.timeX-t;
37 if(pros.timeX>0){
38 list.enqueue(pros);
39 }
40 }
41 }
42 }

C. PEMBAHASAN
CSLL.
CSLL.java
1 Deklarasi package
2 Deklarasi class CSLL
3 Deklarasi Node head dan tail sebagai pointer awal dan akhir
4 Deklarasi int counter sebagai penghitung jumlah node
5 Deklarasi constructor CSLL
6 Comment
7 Memberi nilai head dengan null
8 Memberi nilai tail dengan null
9 Penutup constructor
10 Deklarasi method void cetak dengan parameter String komentar
11 Comment
12 Mencetak komentar
13 Deklarasi Node pCetak
14 Memberi nilai pCetak sama dengan head
15 Inisialisasi int I dengan nilai 0
16 Membuat perulangan while dengan syarat I kurang dari sama dengan counter
17 Comment
18 Mencetak pCetak.data
19 Mengganti nilai pCetak dengan pCetak.data
20 Nilai I bertambah 1
21 Penutup while
22 Membuat seleksi if dengan syarat isEmpty() maka
23 Mencetak kalimat ANTRIAN KOSONG
24 Penutup if
25 Mencetak spasi
26 Penutup method cetak
27 Deklarasi method boolean isEmpty untuk mengecek CSLL kosong atau tidak
28 Comment
29 Mengembalikan nilai true jika head sama dengan null false jika sebaliknya
30 Penutup method
31 Deklarasi method Object hapusDepan untuk menghapus node di depan
32 Comment
33 Deklarasi Object hapus dengan nilai awal null
34 Membuat seleksi if dengan syarat tidak sama dengan isEmpty()
35 Memberi nilai hapus dengan head.data
36 Membuat seleksi if dengan syarat head sama dengan tail maka
37 Memberi nilai head dan tail dengan null
38 Nilai counter berkurang 1
39 Penutup seleksi
40 Jika tidak maka
41 Nilai tail.next sama dengan head.next
42 Nilai head sama dengan head.next
43 Nilai counter berkurang 1
44 Penutup else
45 Penutup if
46 Mengembalikan nilai hapus
47 Penutup method
48 Deklarasi method void sisipDiAwal dengan parameter Object data
49 Comment
50 Deklarasi Node pBaru dengan parameter data
51 Memberi nilai pBaru.data dengan data
52 Memberi nilai pBaru.next dengan null
53 Membuat seleksi if dengan syarat nilai head sama dengan null maka
54 Nilai head sama dengan pBaru
55 Nilai tail sama dengan pBaru
56 Nilai pBaru.next dengan head
57 Nilai counter sama dengan 0
58 Else maka
59 Nilai pBaru.next sama dengan head
60 Nilai head sama dengan pBaru
61 Nilai tail.next sama dengan head
62 Nilai counter bertambah 1
63 Penutup else
64 Penutup method
65 Deklarasi method void sisipDiAkhir dengan parameter Object data
66 Deklarasi Node pBaru dengan parameter data
67 Memberi nilai pBaru.data dengan data
68 Memberi nilai pBaru.next dengan null
69 Membuat seleksi if dengan syarat head sama dengan null
70 Memberi nilai head dengan pBaru
71 Memberi nilai tail dengan pBaru
72 Memberi nilai pBaru.next dengan head
73 Memberi nilai counter dengan 0
74 Penutup if
75 Else maka
76 Memberi nilai pBaru.next dengan head
77 Memberi nilai tail.next dengan pBaru
78 Memberi nilai tail dengan pBaru
79 Nilai counter bertambah 1
80 Penutup else
81 Penutup method
82 Penutup class

Class Node.java
1 Deklarasi package
2 Deklarasi class Node
3 Deklarasi Object data
4 Deklarasi Node next
5 Deklarasi constructor dengan parameter Object data
6 Comment
7 Memberi nilai this.data dengan parameter
8 Penutup constructor
9 Penutup class
Class Queue.java
1 Deklarasi package
2 Deklarasi class Queue
3 Instansiasi CSLL queue
4 Deklarasi constructor Queue
5 Comment
6 Instansisasi queue sebagai CSLL
7 Penutup constructor
8 Membuat method void enqueuer dengan parameter Object data
9 Memanggil method sisipDiAkhir dari queue dengan parameter data
10 Penutup method
11 Membuat method Object dequeuer
12 Mengembalikan nilai dari queue.hapusDepan()
13 Penutup method
14 Membuat method boolean isEmpty()
15 Mengembalikan queue.isEmpty
16 Penutup method
17 Membuat method void cetak dengan parameter String komentar
18 Memanggil method cetak dengan parameter komentar dari queue
19 Penutup method
20 Deklarasi method main
21 Deklarasi Queue q
22 Queue q memanggil method enqueuer dengan parameter 10
23 Queue q memanggil method cetak
24 Queue q memanggil method enqueuer dengan parameter 40
25 Queue q memanggil method cetak
26 Queue q memanggil method enqueuer dengan parameter 25
27 Queue q memanggil method cetak
28 Queue q memanggil method enqueuer dengan parameter 30
29 Queue q memanggil method cetak
30 Mencetak enter
31 Deklarasi Object hapus dengan nilai null
32 Membuat perulangan while dengan syarat tidak sama dengan q.isEmpty maka
33 Memberi nilai hapus dengan q.dequeue
34 Mencetak apa yang dihapus
35 Mencetak nilai setelah dideque
36 Penutup while
37 Penutup method main
38 Penutup class

Class Proses.java
1 Deklarasi package
2 Deklarasi class Proses
3 Deklarasi int id, timeX. Id sebagai id setiap proses dan timeX sebagai waktu
setiap proses
4 Deklarasi constructor Proses dengan parameter int id, dan int time
5 Comment
6 Memberi nilai id dengan parameter
7 Memberi nilai timeX dengan time
8 Penutup constructor
9 Penutup class

Class RoundRobin.java
1 Deklarasi package
2 Mengimport java.util.Scanner
3 Deklarasi class RoundRobin
4 Deklarasi method main
5 Instansiasi Queue list
6 Instansiasi Scanner input
7 Mencetak perintah masukan banyaknya proses , deklarasi int N yang nilai nya
dari inputan
8 Mencetak perintah masukan nilai quantum denga deklarasi int t yang nilai nya
dari inputan
9 Membuat perulangan for dimulai dari 0 sampai kurang dari N
10 Mencetak perintah menginputkan proses
11 Mencetak perintah menginputkan nilai execute tim tiap proses
12 Deklarasi int time dengan inputan
13 Membuat Proses baru dengan parameter I dan time
14 List memanggil method enqueuer dengan parameter baru
15 Penutup for
16 Comment
17 Membuat perulangan while dengan syarat list.isEmpty( ) bernilai false maka
18 Comment
19 Deklarasi Node pCetak
20 Memberi nilai pCetak dengan list.queue.head
21 Deklarasi int I dengan nilai 0
22 Membuat perulangan while dengan syarat I kurang dari list.queue.counter maka
23 Comment
24 Deklarasi Proses cetak dengan nilai sama dengan pCetak.data
25 Mencetak cetak.id
26 Memberi nilai pCetak dengan pCetak.next
27 Nilai I bertambah 1
28 Penutup while
29 Membuat seleksi if dengan syarat list.queue.isEmpty maka
30 Mencetak Antrian kosong
31 Penutup if
32 Mencetak enter
33 Comment
34 Deklarasi Proses pros dengan nilai list.dequeue
35 Mencetak Proses mana yang diproses
36 Nilai dari pros.timeX dikurangi nilai t atau quantum
37 Membuat seleksi if dengan syarat pros.timeX lebih besar dari 0 maka
38 List memanggil method enqueue dengan parameter pros
39 Penutup if
40 Penutup while
41 Penutup method main
42 Penutup class
D. SCREENSHOT PROGRAM

No. 1
No. 2
E. KESIMPULAN

Queue pada struktur data atau antrian adalah sekumpulan data yang mana
penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang
(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan
sisi depan atau front).
Queue atau antrian menggunakan prinsip FIFO (First In Forst Out). Queue atau
antrian terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung
satunya dimana membutuhkan variable head dan tail (depan/ front, belakang/ rear).
Queue atau antrian banyak kita jumpai dalam kehidupan sehari hari contoh antrian
Mobil diloket tol, Antrian mahasiswa mendaftar, dll. Contoh lain dalam bidang komputer
adalah pemakaian sister komputer berbagi waktu (time –sharing computer system) dimana
ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak.

Anda mungkin juga menyukai