Anda di halaman 1dari 20

BAB 3

ANTRIAN
• Antrian ( queue ) : Struktur data yang mempunyai
sifat, data yang masuk duluan akan diproses lebih
dulu juga.←mempunyai sifat FIFO.
• Di dalam antrian dikenal istilah depan dan belakang,
seperti gambar berikut :

Gambar 3.1.Pengertian depan dan belakang dlm antrian


3.2. OPERASI DASAR DALAM ANTRIAN
• Operasi dasar pada antrian berupa insert dan remove.
✓ Insert : Operasi untuk memasukkan data ke dalam
antrian← dinyatakan dengan : insert (A, d) atau
insert(d).
• A = antrian
• d = item data yang dimasukkan ke dalam antrian
A.
Ctt: enqueue : Kadang2 digunakan untuk menyatakan
operasi pemasukan data ke dalam antrian.
✓ Remove : Operasi untuk mengambil data dari antrian
← dinyatakan dengan : remove(A) atau remove()
Ctt: dequeue : Kadang2 digunakan untuk menyatakan
operasi pengeluaran data dari dalam antrian.
3.3. Aplikasi Antrian
• Aplikasi antrian, diantaranya :
a) Buffer ketikan pada keyboard

→Tombol yang diketik melalui keyboard akan ditampung dalam


suatu buffer dan akan dilayani berdasarkan urutan waktu ( tombol
yang masuk ke buffer lebih dahulu akan dilayani terlebih dahulu
dibanding yang masuk lebih belakangan )
b) Penanganan antrian dalam bank.

→ Pelayanan terhadap nasabah berdasarkan nomor urut antrian.


c) Daftar tunggu pesanan

3.4. Implementasi Antrian Dengan Array

• Salah satu cara mewujudkan antrian adalah dengan array.→ Array

data dipakai untuk menampung yang sedang antri.


• Gambar 3.2 berikut memperlihatkan jika banyak elemen yang
disediakan adalah 10.
Gambar 3.2.Objek daftar dan data anggota yg ada didlmnya

• Berarti data merujuk ke array berelemen string.


• Ketentuan : Jika nilai depan = nilai belakang, maka antrian kosong.
Gambar 3.3.Contoh Antrian Kosong

• Gambar 3.4 menunjukkan setelah 2 data disisipkan ke dalam antrian (


dgn keadaan awal spt gambar 3.3)

Gambar 3.4.Keadaan Setelah 2 data dimasukkan


• Contoh implementasi lengkap antrian :

Kode :antrian1.java
// -------------------------------------------
// Contoh Antrian Menggunakan array
// -------------------------------------------

public class antrian1 {


public static void main(String[] args) {
int ukuran = 8;
Antrian daftar = new Antrian(ukuran);

// Masukkan 9 nama
daftar.insert("Aminudin");
daftar.insert("Bahtiar Rivai");
daftar.insert("Cita Citata");
daftar.insert("Dul Sumbang");
daftar.insert("Engel Elga");
daftar.insert("Farah Nurlaela");
daftar.insert("Galih");
daftar.insert("Harwantyoko");
daftar.insert("Indah Kusuma");

// Kosongkan isi Antrian dan tampilkan


System.out.println("Isi Antrian:");
while (! daftar.empty()) {
String nama = daftar.remove();
System.out.println(nama);
}
}

class Antrian {
private String[] data;
private int depan, belakang;
private int maksElemen;

// Konstruktor
public Antrian(int ukuran) {
depan = 0;
belakang = 0;
maksElemen = ukuran;
data = new String[ukuran];
}

// Memasukkan data ke Antrian


// Nilai balik tidak ada
public void insert(String x) {
int posisiBelakang;

// Geser belakang ke posisi berikutnya


if (belakang == maksElemen - 1)
posisiBelakang = 0;
else
posisiBelakang = belakang + 1;

// Cek belakang apa sama dengan Depan

if (posisiBelakang == depan) {
System.out.println("Antrian penuh.");
System.out.println(x + " tidak dimasukkan.");
}
else {
belakang = posisiBelakang;

// Masukkan data
data[belakang] = x;
}
}

public String remove() {


if (empty()) {
System.out.println("Antrian kosong");
return "";
}

if (depan == maksElemen - 1)
depan = 0;
else
depan = depan + 1;

return data[depan];
}

public boolean empty() {


if (depan == belakang)
return true;
else
return false;
}
}

Outputnya:
(TUGAS 2 (Tugas Kelompok) NO.1 : Buat dengan Java/Python,
suatu program dinamis yang sejenis)
3.5. Antrian dengan kelasArrayQueue
• ArrayDeque : Kelas yang disediakan oleh java untuk menangani
antrian dengan banyak data tak terbatas.
• Penggunaan kelas ArrayDeque , harus menyertakan perintah :

import java.until.ArrayDeque;
• Deklarasi obyek dengan kelas ArrayDeque dilakukan dengan cara
sbb:
ArrayDeque<String> daftar = new ArrayDeque<String>();
• <String> : Tipe elemen yang disimpan di obyek, bisa juga <Int> dsb.
• Beberapa metode yang tersedia di kelas ArrayDeque :

Metode Keterangan
add(elemen) Menambahkan elemen di akhir antrian
addFirst(elemen) Menambahkan elemen di awal antrian
addLast(elemen) Menambahkan elemen di akhir antrian
clear() Menghapus semua elemen di antrian
contains(objek) Menghasilkan true, kalau antrian mengandung
objek
getFirst() Menghasilkan elemen yang berada di depan tanpa
menghapuskannya
getLast() Menghasilkan elemen yang berada di akhir tanpa
menghapuskannya
isEmpty() Menghasilkan true kalau antrian kosong
poll() Menghapus elemen di bagian depan dan elemen
tersebut menjadi nilai baliknya. Nilai balik=null
jika antrian kosong
pollLast() Menghapus elemen di bagian belakang dan elemen
tersebut menjadi nilai baliknya. Nilai balik=null
jika antrian kosong
remove() Menghapus elemen di bagian depan dan elemen
tersebut menjadi nilai baliknya.
removeLast() Menghapus elemen di bagian belakang dan elemen
tersebut menjadi nilai baliknya
size() Menghasilkan jumlah elemen di antrian ( bertipe
integer)

• Berikut ini contoh program yang menggunakan: ArrayDeque


• Kode :antrian2.java

// -------------------------------------------
// Contoh Antrian Menggunakan kelas ArrayDeque
// -------------------------------------------

import java.util.ArrayDeque;

public class antrian2 {

public static void main(String[] args) {


ArrayDeque<String> daftar = new ArrayDeque<String>();

// Masukkan 9 nama
daftar.add("Aminudin");
daftar.add("Bahtiar Rivai");
daftar.add("Cita Citata");
daftar.add("Dul Sumbang");
daftar.add("Engel Elga");
daftar.add("Farah Nurlaela");
daftar.add("Galih");
daftar.add("Harwantyoko");
daftar.add("Indah Kusuma");
// Kosongkan isi Antrian dan tampilkan
System.out.println("Isi Antrian:");
while (!daftar.isEmpty()) {
String nama = daftar.remove();
System.out.println(nama);
}
}

Outputnya :

Di output antrian2.java, tidak ada pembatasan jumlah elemen di antrian.

CONTOH PROGRAM-PROGRAM LAIN :


1. Program Menambah dan Menghapus Data
Kode :array1.java
// ----------------------------------------------
// Contoh operasi penghapusan dan penyisipan data
// pada array
// ----------------------------------------------

import java.util.Scanner;

public class array1 {


public static void main(String[] args) {
String kotaX = ""; // Kota yang akan dihapus
// atau ditambahkan

ArrayData kota = new ArrayData(); // Buat objek

// Sisipkan 3 kota. Pastikan kota dalam keadaan urut


kota.tambahData("Medan");
kota.tambahData("Pontianak");
kota.tambahData("Surabaya");
kota.tampilkanData();

// Proses interaksi dengan pemakai


Scanner kbd = new Scanner(System.in);
char pilihan;

do {
pilihan = kota.pilihMenu();
switch (pilihan) {
case '1':
System.out.print("Penambahan data.\nKota: ");
kotaX = kbd.nextLine();
if (!kota.tambahData(kotaX))
System.out.println(
"Gagal menambah data. Wadah penuh");

break;
case '2':
System.out.print("Penghapusan data.\nKota: ");
kotaX = kbd.nextLine();
if (!kota.hapusData(kotaX))
System.out.println(
"Data yang akan dihapus tidak ditemukan");
break;
case '3':
kota.tampilkanData();
break;
case '4':
System.out.println("*** Selesai");
}
}
while (pilihan != '4');

kbd.close(); // Akhiri pembacaan data


}

class ArrayData {
final int MAKSDATA = 10;

private String[] kota = new String[10];


private int jumKota;

// Konstruktor
public ArrayData() {
jumKota = 0;
}

// Pilih tindakan pada menu


public char pilihMenu() {
char pilihan;
Scanner kbd = new Scanner(System.in);
do {
System.out.println("Menu:" );;
System.out.println("1. Tambah data" );;
System.out.println("2. Hapus data" );;
System.out.println("3. Tampilkan data" );;
System.out.println("4. Selesai" );;
System.out.print(
"Pilihan (1, 2, 3, atau 4 dan tekan Enter): ");

String baris = kbd.nextLine();

if (baris.isEmpty())
pilihan = '0';
else
pilihan = baris.charAt(0);
} while (pilihan < '1' || pilihan > '4');

return pilihan;
}

// Menampilkan isi array


public void tampilkanData() {
System.out.println( "Isi array: ");

for (int j = 0; j <jumKota; j++) {


System.out.print( kota[j]);

if (j != (jumKota-1))
System.out.print(" - "); // Beri pemisah antarkota
}

System.out.println(); // Pindah baris


}

// Menambahkan data
public boolean tambahData(String kotaBaru) {
if (jumKota == MAKSDATA) {
System.out.println( "Array sudah penuh" );
return false; // Gagal menambahkan kota
}

// Cari posisi penyisipan


int posisi = -1;
for (int j = 0; j <jumKota; j++)
if (kotaBaru.compareTo(kota[j]) < 0) {
posisi = j;
break;
}

if (posisi == -1) {
// Sisipkan di belakang
kota[jumKota] = kotaBaru;
jumKota = jumKota + 1;
}
else { // Kalau posisi tidak sama dengan -1
// Sisipkan pada posisi
// a. Geser dulu
for (int j = jumKota-1; j >= posisi; j--)
kota[j + 1] = kota[j];

// b. Sisipkan
kota[posisi] = kotaBaru;
jumKota = jumKota + 1;
}

return true;
}

// Menghapus data
public boolean hapusData(String kotaX) {
// Cari posisi penghapusan
int posisi = -1;
for (int j = 0; j <jumKota; j++) {
if (kotaX.compareTo(kota[j]) == 0) { // kalau sama
posisi = j;
break;
}
}

// Kalau tidak ditemukan


if (posisi == -1) {
return false; // Gagal menghapus karena data tdk ada
}

// Penghapusan kota
if (posisi == (jumKota-1)) {
// Hapus di bagian akhir
jumKota = jumKota - 1;
}
else { // Kalau posisi tidak sama
// dengan yang terakhir

// Geser ke atas untuk menghapus


for (int j = posisi+1; j <jumKota; j++)
kota[j - 1] = kota[j];
jumKota = jumKota - 1;
}

return true;
}
}

Outputnya:
Isi array:
Medan - Pontianak - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 1
Penambahan data.
Kota: Depok
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Depok - Medan - Pontianak - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 1
Penambahan data.
Kota: Malang
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Depok - Malang - Medan - Pontianak - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 2
Penghapusan data.
Kota: Medan
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 1
Penambahan data.
Kota: Papua
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Depok - Malang - Papua - Pontianak - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 4
*** Selesai

( TUGAS 2 (Tugas Kelompok) NO.2:Buat dengan Java/Python


program dinamis yang sejenis spt ini )

2. Program Menggunakan perintah : ArrayList


• Kelemahan contoh program no.1 ( array1.java):
Ukuran maksimum elemen array yg harus ditulis.
• Perintah ArrayList→ dimungkinkan untuk
mendapatkan array yg bersifat dinamis ( ukurannya
dapat diatur sewaktu program berjalan ).

// ----------------------------------------------
// Contoh operasi penghapusan dan penyisipan data
// menggunakan ArrayList
// ----------------------------------------------

import java.util.Scanner;
import java.util.ArrayList;

public class arraydinamis {


public static void main(String[] args) {
String kotaX = ""; // Kota yang akan dihapus
// atau ditambahkan

ArrayData kota = new ArrayData(); // Buat objek

// Sisipkan 3 kota. Pastikan kota dalam keadaan urut


kota.tambahData("Medan");
kota.tambahData("Pontianak");
kota.tambahData("Surabaya");
kota.tampilkanData();

// Proses interaksi dengan pemakai


Scanner kbd = new Scanner(System.in);
char pilihan;

do {
pilihan = kota.pilihMenu();
switch (pilihan) {
case '1':
System.out.print("Penambahan data.\nKota: ");
kotaX = kbd.nextLine();
if (!kota.tambahData(kotaX))
System.out.println(
"Gagal menambah data. Wadah penuh");

break;
case '2':
System.out.print("Penghapusan data.\nKota: ");
kotaX = kbd.nextLine();
if (!kota.hapusData(kotaX))
System.out.println(
"Data yang akan dihapus tidak ditemukan");
break;
case '3':
kota.tampilkanData();
break;
case '4':
System.out.println("*** Selesai");
}
}
while (pilihan != '4');

kbd.close(); // Akhiri pembacaan data


}

class ArrayData {
private ArrayList<String> kota = new ArrayList<String>();
private int jumKota;

// Konstruktor
public ArrayData() {
jumKota = 0;
}

// Pilih tindakan pada menu


public char pilihMenu() {
char pilihan;
Scanner kbd = new Scanner(System.in);

do {
System.out.println("Menu:" );;
System.out.println("1. Tambah data" );;
System.out.println("2. Hapus data" );;
System.out.println("3. Tampilkan data" );;
System.out.println("4. Selesai" );;
System.out.print(
"Pilihan (1, 2, 3, atau 4 dan tekan Enter): ");

String baris = kbd.nextLine();

if (baris.isEmpty())
pilihan = '0';
else
pilihan = baris.charAt(0);
} while (pilihan < '1' || pilihan > '4');

return pilihan;
}

// Menampilkan isi array


public void tampilkanData() {
System.out.println( "Isi array: ");

for (int j = 0; j <jumKota; j++) {


System.out.print(kota.get(j));

if (j != (jumKota-1))
System.out.print(" - "); // Beri pemisah antarkota
}

System.out.println(); // Pindah baris


}

// Menambahkan data
public boolean tambahData(String kotaBaru) {
// Cari posisi penyisipan
int posisi = -1;
for (int j = 0; j <jumKota; j++)
if (kotaBaru.compareTo(kota.get(j)) < 0) {
posisi = j;
break;
}

if (posisi == -1) {
// Sisipkan di belakang
kota.add(kotaBaru);
jumKota = jumKota + 1;
}
else { // Kalau posisi tidak sama dengan -1
// Sisipkan pada posisi
kota.add(posisi, kotaBaru);
jumKota = jumKota + 1;
}

return true;
}

// Menghapus data
public boolean hapusData(String kotaX) {
// Cari posisi penghapusan
int posisi = -1;
for (int j = 0; j <jumKota; j++) {
if (kotaX.compareTo(kota.get(j)) == 0) {
// Kalau sama
posisi = j;
break;
}
}

// Kalau tidak ditemukan


if (posisi == -1) {
return false; // Gagal menghapus karena data tdk ada
}

kota.remove(posisi); // Hapus
jumKota = jumKota - 1;

return true;
}
}

Outputnya:
Isi array:
Medan - Pontianak - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 1
Penambahan data.
Kota: Samarida
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Medan - Pontianak - Samarida - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 1
Penambahan data.
Kota: Semarang
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Medan - Pontianak - Samarida - Semarang - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 2
Penghapusan data.
Kota: samarida
Data yang akan dihapus tidak ditemukan
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 2
Penghapusan data.
Kota: Samarinda
Data yang akan dihapus tidak ditemukan
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Medan - Pontianak - Samarida - Semarang - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 2
Penghapusan data.
Kota: samarida
Data yang akan dihapus tidak ditemukan
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 2
Penghapusan data.
Kota: Samarida
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 3
Isi array:
Medan - Pontianak - Semarang - Surabaya
Menu:
1. Tambah data
2. Hapus data
3. Tampilkan data
4. Selesai
Pilihan (1, 2, 3, atau 4 dan tekan Enter): 4
*** Selesai

( TUGAS 2 (Tugas Kelompok) NO.3 :Buat dengan Java/Python


program dinamis yang sejenis spt ini )

Anda mungkin juga menyukai