Struktur Data MODUL 05 QUEUE KONTIGU

MODUL 5– QUEUE KONTIGU

I.

TUJUAN
1. Memahami konsep antrian secara sirkular / berputar.
2. Memahami penggunaan array dengan konsep antrian.
3. Dapat mengimplementasikan konsep antrian dalam bahasa C.

II. DASAR TEORI
Antrian atau Queue adalah kumpulan data yang penambahan dan penghapusannya
dilakukan melalui 2 ujung yang berbeda. Ciri khas konsep antrian ialah memiliki 2 penunjuk
posisi yang dikenal dengan Head dan Tail. Head di sini diasumsikan sebagai awal antrian dan
Tail sebagai akhir antrian. Cara mengakses antrian adalah dengan menggunakan Head dan Tail
dari antrian tersebut.
Penambahan dan penghapusan elemen pada antrian menggunakan prinsip FIFO (First In
First Out). Jadi, urutan penghapusan data akan sama dengan dengan urutan pemasukan data.
Karena merupakan kumpulan data, maka tipe data yang sesuai untuk menyajikan antrian
adalah larik atau senarai berantai. Karena menggunakan larik / array tersebut, maka panjang
antrian adalah tetap.
Ilustrasi:

1. 5 data pertama masuk, A masuk pertama kali

A

B

C

D

Head

E
Tail

2. Terjadi penghapusan data

B

C


D

Head

E
Tail

3. Masuk data baru lagi (F)

F

B

Tail

Head

C


D

E

1

Dari ilustrasi di atas diumpamakan data pertama masuk dari arah sebelah kanan sampai
full. Kemudian, terjadi penghapusan data, maka data yang terhapus adalah data yang pertama
kali masuk tadi. Dapat dilihat terjadinya perubahan pada ujung penunjuk posisi antrian, di
mana Head bergeser pada data ke-2. Apabila data berikutnya dimasukkan lagi, maka data
tersebut akan menempati ruang yang kosong dan data tersebut menempati posisi sebagai data
terakhir / Tail.

Operasi-operasi dasar dalam antrian:
1. Inisialisasi Head dan Tail dalam kondisi awal kosong / -1.
2. Memasukkan data menjadi Tail pada antrian.
3. Menghapus data pada Head antrian.
4. Pengecekan apakah antrian masih kosong.
5. Pengecekan apakah antrian sudah penuh.
6. Mencetak semua data dalam antrian.


III. LANGKAH KERJA
Demo
// File Header dengan nama header.h
#include
#include
#include
#define MaxEl 5
typedef int address;
typedef char infotype;
typedef struct
{
infotype T[MaxEl];
address Head;
address Tail;
} Queue;
void CreateEmpty(Queue *Q);
/*
IS: Q sembarang
FS: Q dalam keadaan kosong

*/
int isEmpty(Queue Q);
/*
IS: Q terdefinisi, mungkin kosong
FS: TRUE jika Q kosong
*/
int isFull(Queue Q);
/*
IS: Q terdefinisi, mungkin kosong
FS: TRUE jika Q penuh
*/

2

int isOneElmt(Queue Q);
/*
IS: Q terdefinisi, tidak kosong
FS: TRUE jika Q hanya berisi 1 elemen
*/
void Add(Queue *Q, infotype val);

/*
IS: Q dan val terdefinisi, mungkin kosong / penuh
FS: Jika Q tidak penuh maka val akan menjadi Tail dari Q
*/
void Del(Queue *Q);
/*
IS: Q terdefinisi, mungkin kosong
FS: Jika Q tidak kosong maka elemen pada Head akan terhapus
*/
void PrintQueue(Queue Q);
/*
IS: Q terdefinisi, mungkin kosong
FS: Tercetak elemen Q secara urut dari Head sampai Tail
*/

// QueueDefinition.c
#include "header.h"
void CreateEmpty(Queue *Q)
{
(*Q).Head = (*Q).Tail = -1;

}
int isEmpty(Queue Q)
{
return (Q.Head==-1 && Q.Tail==-1);
}
int isFull(Queue Q)
{
return ((Q.HeadQ.Tail && Q.Head-Q.Tail==1));
}
int isOneElmt(Queue Q)
{
return (Q.Head==Q.Tail && Q.Head!=-1);
}
void Add(Queue *Q, infotype val)
{
if(!isFull(*Q))
{
if(isEmpty(*Q))
{
(*Q).Head = (*Q).Tail = 0;

(*Q).T[(*Q).Tail] = val;
}
else
{
if((*Q).Tail==MaxEl-1)
(*Q).Tail = 0;
else
(*Q).Tail++;

3

(*Q).T[(*Q).Tail] = val;
}
}
}
void Del(Queue *Q)
{
infotype temp = (*Q).T[(*Q).Head];
if(!isEmpty(*Q))
{

if(isOneElmt(*Q))
CreateEmpty(&(*Q));
else
{
if((*Q).Head==MaxEl-1)
(*Q).Head = 0;
else
(*Q).Head++;
}
printf ("\nElemen yang dihapus : %c", temp);
}
else
printf ("\nAntriannya kosong\n");
}
void PrintQueue(Queue Q)
{
address i;
if(Q.Head