Selasa, 01 November 2016

Project



·         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

·         Penjelasan definisi ADT

Tipe data abstrak (ADT) dapat diartikan sebagai fungsi dari objek data yang menyempurnakan tipe data dengan cara menghubungkan dengan fungsi-fungsi yang beroperasi pada data yang bersangkutan. Sebagai contoh, ADT himpunan juga didefinisikan sebagai koleksi data yang diakses oleh operasi-operasi himpunan seperti UNION, INTERSECTION, dan SET DIFFERENCE.
Implementasi dari ADT  menyediakan cara tertentu untuk merepresentasikan unsur tipe data (seperti matrix). Secara ilmiah, kita akan menggambarkan operasi-operasi pada ADT dengan cara algoritma (logika berfikir) tertentu. Algoritma ini biasanya berupa urutan instruksi yang mengimplementasikan secara tepat bagaimana operasi-operasi akan dieksekusi oleh komputer.


·         Komponen dan fungsi apa saja yang terdapat pada ADT
typedef struct
{
    infotype *T;  //untuk menyimpan semua nilai
    addres HEAD; //untuk menandakan posisi nilai  pertama dan apakah list kosong
    addres TAIL; //untuk menandakan posisi nilai terakhir
    int MAX; //untuk jumlah total nilai
}Queue; //tipe bentukan data struct

·         Contoh kodingnya dalam bahasa C


*MAIN C
#include "queue.h"

int main()
{
    Queue Q;
    int max;
    int nilai;
    int x;

    printf("\t\tPROGRAM QUEUE DENGAN MEMORY DINAMIS, ALTERNATIF 1");
    printf("\t\t--------------------------------------------------------------------------------\n\n");


    printf("Masukan Jumlah Elemennya = ");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("\nPosisi dari Head = %d\n",HEAD(Q));
    printf("Posisi dari TAIL = %d\n\n",TAIL(Q));

    printf("Stack Sudah Penuh ? = %d\n\n",IsMax(Q));

    x=1;
    printf("================================================\n");
    while (IsEmpty(Q)==false)
    {
        Del(&Q,&nilai);
        printf("=> Penghapusan ke %d , dan nilai dari 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"

boolean IsMax (Queue Q)
{
    return ((TAIL(Q)==MaxEl(Q))&&(HEAD(Q)==1));
}

boolean IsEmpty (Queue Q)
{
    return ((TAIL(Q)==NIL)&&(HEAD(Q)==NIL));
}

void CreateEmpty (Queue *Q, int max)
{
    (*Q).T = (int *) malloc((max+1) * sizeof(int));
        HEAD(*Q) = NIL;
        TAIL(*Q) = NIL;
        MaxEl(*Q) = max;
}

int NbElmt (Queue Q)
{
    return TAIL(Q);
}

void Add (Queue *Q,int val)
{
    HEAD(*Q)=1;
    TAIL(*Q)++;
    InfoTail(*Q) = val;
}

void Del (Queue *Q, int *val)
{
    int i=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;
    }
}

void Dealokasi (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

typedef int addres;
typedef int infotype;

typedef struct
{
    infotype *T;
    addres HEAD;
    addres TAIL;
    int MAX;
}Queue;

boolean IsMax (Queue Q);
boolean IsEmpty (Queue Q);
void CreateEmpty (Queue *Q, int max);
int NbElmt (Queue Q);
void Add (Queue *Q,int val);
void Del (Queue *Q, int *val);
void Dealokasi (Queue *Q);


#endif // QUEUE_H_INCLUDED


*FUNGSI.C
#include "queue.h"

boolean IsMax (Queue Q)
{
    return ((TAIL(Q)==MaxEl(Q))&&(HEAD(Q)==1));
}

boolean IsEmpty (Queue Q)
{
    return ((TAIL(Q)==NIL)&&(HEAD(Q)==NIL));
}

void CreateEmpty (Queue *Q, int max)
{
    (*Q).T = (int *) malloc((max+1) * sizeof(int));
        HEAD(*Q) = NIL;
        TAIL(*Q) = NIL;
        MaxEl(*Q) = max;
}

int NbElmt (Queue Q)
{
    return TAIL(Q);
}

void Add (Queue *Q,int val)
{
    HEAD(*Q)=1;
    TAIL(*Q)++;
    InfoTail(*Q) = val;
}

void Del (Queue *Q, int *val)
{
    int i=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;
    }
}

void Dealokasi (Queue *Q)
{
    MaxEl(*Q) = NIL;
    free((*Q).T);
}

·         Penjelasan dari kodingnya

boolean IsMax (Queue Q); //untuk mengembalikan true jika list penuh,false jika list tidak penuh
boolean IsEmpty (Queue Q);// untuk mengembalikan true jika list kosong,false jika list tidak kosong
void CreateEmpty (Queue *Q, int max);//untuk membuat queue
int NbElmt (Queue Q); //untuk mengembalikan total nilai
void Add (Queue *Q,int val);//untuk menambahkan nilai dalam queue
void Del (Queue *Q, int *val);//untuk menghapus nilai dalam queue
void Dealokasi (Queue *Q);//untuk membebaskan memori


·         Contoh bagaimana penggunaannya untuk menyelesaikan suatu permasalah tertentu


Queue adalah sebuah kumpulan variabel di mana hanya variabel yang terakhir dimasukkan yang dapat diakses. Queue atau disebut juga Antrian merupakan perintah pengumpulan data yang disebut “first-in, first-out”. Aplikasi ini meliputi jadwal pekerjaan dalam sebuah operasi
Misalnya:
a. Antrian printer job pada sebuah jaringan
b. Antrian mahasiswa yang membayar uang kuliah di bank
c. Antrian loket bioskop, dll