| ADT Queue: Implementasi dengan Representasi Linked (Pointer) |
| Berikut ini adalah *sebuah contoh*
implementasi ADT Queue dengan representasi linked
(Pointer). Sekali lagi, ini hanyalah contoh, dan bukan
satu-satunya implementasi ADT Queue. Jadi kalau anda
memiliki suatu implementasi ADT Queue yang menurut anda
lebih baik, silahkan digunakan. Perhatikan bahwa implementasinya dibagi 2 file: QueueTypes.h dan QueueImplementation.c. File QueueTypes.h mendefinisikan tipe data Queue, QueueNode, dan ItemType yang dipakai oleh QueueImplementation.c. Dua file ini, beserta dengan QueueInterface.h membentuk suatu paket ADT Queue yang siap dipakai. /* Nama File: "QueueTypes.h" -> representasi Linked */
typedef <masukkan tipe data di sini: char, float, dll.> ItemType;
typedef struct QueueNodeType
{
ItemType Item;
struct QueueNodeType *Next;
} QueueNode;
typedef struct
{
QueueNode *Front;
QueueNode *Rear;
} Queue;
/* Nama File: "QueueImplementation.c" -> representasi Linked */
#include<stdio.h>
#include<stdlib.h>
#include"QueueInterface.h"
void InitializeQueue(Queue *Q)
{
Q->Front=NULL;
Q->Rear=NULL;
}
int Empty(Queue *Q)
{
return(Q->Front == NULL);
}
int Full(Queue *Q)
{
return 0;
}
void Insert(ItemType R, Queue *Q)
{
QueueNode *Temp;
Temp=(QueueNode *) malloc(sizeof(QueueNode));
if(Temp==NULL)
{
printf("Maaf, pengalokasian memori gagal!\n");
}
else
{
Temp->Item=R;
Temp->Link=NULL;
if(Q->Rear==NULL)
{
Q->Front=Temp;
Q->Rear=Temp;
}
else
{
Q->Rear->Link=Temp;
Q->Rear=Temp;
}
}
}
void Remove(Queue *Q, ItemType *F)
{
QueueNode *Temp;
if(Q->Front==NULL)
{
printf("Anda mencoba mengambil item dari Queue yang kosong!\n");
}
else
{
*F=Q->Front->Item;
Temp=Q->Front;
Q->Front=Temp->Link;
free(Temp);
if(Q->Front==NULL)Q->Rear=NULL;
)
}
|