Selasa, 01 November 2016

·         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

Tidak ada komentar:

Posting Komentar