• Tidak ada hasil yang ditemukan

Struktur Data MODUL 05 QUEUE KONTIGU

N/A
N/A
Protected

Academic year: 2018

Membagikan "Struktur Data MODUL 05 QUEUE KONTIGU"

Copied!
5
0
0

Teks penuh

(1)

1

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

E

Head

Tail

2. Terjadi penghapusan data

B

C

D

E

Head

Tail

3. Masuk data baru lagi (F)

F

B

C

D

E

(2)

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 <stdio.h>

#include <stdlib.h> #include <conio.h> #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

(3)

3

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.Head<Q.Tail && Q.Tail-Q.Head==MaxEl-1) || (Q.Head>Q.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)) {

} else {

(*Q).Head = (*Q).Tail = 0; (*Q).T[(*Q).Tail] = val;

if((*Q).Tail==MaxEl-1) (*Q).Tail = 0; else

(4)

(*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++;

} else

}

printf ("\nElemen yang dihapus : %c", temp);

printf ("\nAntriannya kosong\n");

void PrintQueue(Queue Q) {

address i;

if(Q.Head<=Q.Tail) {

} else {

} }

for(i=Q.Head; i<=Q.Tail; i++) printf ("%c", Q.T[i]);

for(i=Q.Head; i<=MaxEl-1; i++) printf ("%c", Q.T[i]); for(i=0; i<=Q.Tail; i++)

printf ("%c", Q.T[i]);

// QueueMain.c

#include "header.h"

void main() {

Queue Q; char val; int pil;

CreateEmpty(&Q); do

{

system ("cls"); puts ("\nMenu: \n");

printf ("1. Add Queue\n"); printf ("2. Del Queue\n"); printf ("3. Print All\n"); printf ("0. Keluar\n"); printf ("Pilihan: "); pil = getch();

(5)

5

case '1':

printf ("Masukkan data: "); scanf ("%s", &val);

Add(&Q, val); getch(); break; case '2':

Del(&Q); getch(); break; case '3':

printf ("Isi dari antrian : "); PrintQueue(Q);

getch(); break; }

Referensi

Dokumen terkait

• Berdasarkan hasil perhitungan diketahui bahwa nilai koefisien model regresi berganda pada Contoh Kasus 3.2 adalah β0=9.4401, β1=0.6426 dan β3=0.2190.. Seperti halnya

Dengan demikian X 2 hitung lebih besar dari pada X 2 tabel, sehingga dapat dikatakan bahwa luas lahan yang dikelola mempunyai hubungan nyata dengan tingkat

Data Kriteria Data Krtiteria Data SubKriteria Data Parameter Data Dayah Data Nilai Data Parameter 4.0 Proses Promethee Data Nilai 5.0 Proses Borda Data Dayah Rangking Dayah Pimpinan

Gangguan jiwa seringkali menyebabkan ODHA tidak patuh terhadap pengobatan ARV dan tidak adanya penurunan perilaku berisiko. Gangguan jiwa dapat.. mempengaruhi ketaatan dalam minum

Hasil simulasi dengan menggunakan Software OPPINET yang dibandingkan dengan software komersial menunjukkan hasil seperti pada tabel 1.Dari hasil yang diperoleh software OPPINET

0511 11.Sejauh mana program pengembangan profesional TVE telah berhasil dalam meningkatkan keterampilan guru Anda dalam pembelajaran siswa. 6 Sikap terhadap

Anda dapat menampilkan direktori­direktori tersebut dengan interpreter Ruby, sbb:

besarnya pengaruh antara Kemampuan verbal, Kemampuan berhitung dan Motivasi Belajar terhadap hasil belajar akuntansi siswa kelas XI SMA Negeri 7 Semarang 2010/2011 secara