·
Penjelasandefinisi ADT
Tipe data abstrak (ADT) dapatdiartikansebagaifungsidariobjek
data yang menyempurnakantipe data dengancaramenghubungkandenganfungsi-fungsi
yang beroperasipada data yang bersangkutan. Sebagaicontoh, ADT himpunan jugadidefinisikansebagaikoleksi data yang
diaksesolehoperasi-operasihimpunansepertiUNION, INTERSECTION, dan SET
DIFFERENCE.
ImplementasidariADT menyediakancaratertentuuntukmerepresentasikanunsurtipe
data (seperti matrix). Secarailmiah, kitaakanmenggambarkanoperasi-operasipada
ADT dengancaraalgoritma (logikaberfikir) tertentu.
Algoritmainibiasanyaberupaurutaninstruksi yang mengimplementasikansecaratepatbagaimanaoperasi-operasiakandieksekusiolehkomputer.
·
Komponendanfungsiapasaja
yang terdapatpada ADT
typedefstruct
{
infotype *T;
//untukmenyimpansemuanilai
addres HEAD; //untukmenandakanposisinilaipertamadanapakah
list kosong
addres TAIL; //untukmenandakanposisinilaiterakhir
int MAX; //untukjumlah total nilai
}Queue; //tipebentukan data struct
·
Contohkodingnyadalambahasa
C
*MAIN C
#include "queue.h"
int main()
{
Queue Q;
int max;
intnilai;
int x;
printf("\t\tPROGRAM QUEUE DENGAN MEMORY DINAMIS,
ALTERNATIF 1");
printf("\t\t--------------------------------------------------------------------------------\n\n");
printf("MasukanJumlahElemennya =
");scanf("%d",&max);
CreateEmpty(&Q,max);
printf("I.S , Apakah Stack kosong? =
%d\n\n",IsEmpty(Q));
while (IsMax(Q)==false)
{
printf("Masukan Data =
");scanf("%d",&nilai);
Add(&Q,nilai);
}
printf("\nPosisidari Head = %d\n",HEAD(Q));
printf("Posisidari TAIL = %d\n\n",TAIL(Q));
printf("Stack SudahPenuh ? = %d\n\n",IsMax(Q));
x=1;
printf("================================================\n");
while (IsEmpty(Q)==false)
{
Del(&Q,&nilai);
printf("=>Penghapusanke %d , dannilaidari head = %d\n",x,nilai);
x++;
}
printf("================================================\n");
printf("\nApakah Queue Kosong? %d\n",IsEmpty(Q));
Dealokasi(&Q);
printf("Queue Telah di Dealokasi\n");
return 0;
}
*HEADER.H
//
#include "queue.h"
booleanIsMax (Queue Q)
{
return ((TAIL(Q)==MaxEl(Q))&&(HEAD(Q)==1));
}
booleanIsEmpty (Queue Q)
{
return ((TAIL(Q)==NIL)&&(HEAD(Q)==NIL));
}
voidCreateEmpty (Queue *Q, int max)
{
(*Q).T = (int *)
malloc((max+1) * sizeof(int));
HEAD(*Q) = NIL;
TAIL(*Q) = NIL;
MaxEl(*Q) = max;
}
intNbElmt (Queue Q)
{
return TAIL(Q);
}
void Add (Queue *Q,intval)
{
HEAD(*Q)=1;
TAIL(*Q)++;
InfoTail(*Q) = val;
}
void Del (Queue *Q, int *val)
{
inti=1;
*val =
InfoHead(*Q);
do
{
(*Q).T[i] = (*Q).T[i+1];
i++;
}
while (i!=NbElmt(*Q)+1);
TAIL(*Q)--;
if (TAIL(*Q)==NIL)
{
HEAD(*Q)=NIL;
}
}
voidDealokasi (Queue *Q)
{
MaxEl(*Q) = NIL;
free((*Q).T);
}
//
#ifndef QUEUE_H_INCLUDED
#define QUEUE_H_INCLUDED
#include "boolean.h"
#define NIL 0
#define HEAD(Q) (Q).HEAD
#define TAIL(Q) (Q).TAIL
#define InfoHead(Q) (Q).T[(Q).HEAD]
#define InfoTail(Q) (Q).T[(Q).TAIL]
#define MaxEl(Q) (Q).MAX
typedefintaddres;
typedefintinfotype;
typedefstruct
{
infotype *T;
addres HEAD;
addres TAIL;
int MAX;
}Queue;
booleanIsMax (Queue Q);
booleanIsEmpty (Queue Q);
voidCreateEmpty (Queue *Q, int max);
intNbElmt (Queue Q);
void Add (Queue *Q,intval);
void Del (Queue *Q, int *val);
voidDealokasi (Queue *Q);
#endif // QUEUE_H_INCLUDED
*FUNGSI.C
#include "queue.h"
booleanIsMax (Queue Q)
{
return ((TAIL(Q)==MaxEl(Q))&&(HEAD(Q)==1));
}
booleanIsEmpty (Queue Q)
{
return ((TAIL(Q)==NIL)&&(HEAD(Q)==NIL));
}
voidCreateEmpty (Queue *Q, int max)
{
(*Q).T = (int *)
malloc((max+1) * sizeof(int));
HEAD(*Q) = NIL;
TAIL(*Q) = NIL;
MaxEl(*Q) = max;
}
intNbElmt (Queue Q)
{
return TAIL(Q);
}
void Add (Queue *Q,intval)
{
HEAD(*Q)=1;
TAIL(*Q)++;
InfoTail(*Q) = val;
}
void Del (Queue *Q, int *val)
{
inti=1;
*val =
InfoHead(*Q);
do
{
(*Q).T[i] =
(*Q).T[i+1];
i++;
}
while (i!=NbElmt(*Q)+1);
TAIL(*Q)--;
if (TAIL(*Q)==NIL)
{
HEAD(*Q)=NIL;
}
}
voidDealokasi (Queue *Q)
{
MaxEl(*Q) = NIL;
free((*Q).T);
}
·
Penjelasandarikodingnya
booleanIsMax (Queue Q); //untukmengembalikan true jika list penuh,falsejika
list tidakpenuh
booleanIsEmpty (Queue Q);//untukmengembalikan true jika list
kosong,falsejika list tidakkosong
voidCreateEmpty (Queue *Q, int max);//untukmembuat queue
intNbElmt (Queue Q); //untukmengembalikan total nilai
void Add (Queue *Q,intval);//untukmenambahkannilaidalam
queue
void Del (Queue *Q, int *val);//untukmenghapusnilaidalam
queue
voidDealokasi (Queue *Q);//untukmembebaskanmemori
·
Contohbagaimanapenggunaannyauntukmenyelesaikansuatupermasalahtertentu
Queue
adalahsebuahkumpulanvariabel di manahanyavariabel yang terakhirdimasukkan yang
dapatdiakses. Queue ataudisebutjugaAntrianmerupakanperintahpengumpulan data
yang disebut “first-in, first-out”.
Aplikasiinimeliputijadwalpekerjaandalamsebuahoperasi
Misalnya:
a. Antrian printer job padasebuahjaringan
b. Antrianmahasiswa yang membayaruangkuliah di bank
c. Antrianloketbioskop, dll
Misalnya:
a. Antrian printer job padasebuahjaringan
b. Antrianmahasiswa yang membayaruangkuliah di bank
c. Antrianloketbioskop, dll
Tidak ada komentar:
Posting Komentar