| ADT Stack: Implementasi dengan Representasi Linked (Pointer) |
| Berikut ini adalah *sebuah contoh*
implementasi ADT Stack dengan representasi linked
(Pointer). Sekali lagi, ini hanyalah contoh, dan bukan
satu-satunya implementasi ADT Stack. Jadi kalau anda
memiliki suatu implementasi ADT Stack yang menurut anda
lebih baik, silahkan digunakan. Perhatikan bahwa implementasinya dibagi 2 file: StackTypes.h dan StackImplementation.c. File StackTypes.h mendefinisikan tipe data Stack, StackNode, dan ItemType yang dipakai oleh StackImplementation.c. Dua file ini, beserta dengan StackInterface.h membentuk suatu paket ADT Stack yang siap dipakai. /* Nama File: "StackTypes.h" -> representasi Linked */
typedef <masukkan tipe data di sini: char, float, dll.> ItemType;
typedef struct StackNodeType
{
ItemType Item;
struct StackNodeType *Next;
} StackNode;
typedef struct
{
StackNode *ItemList;
} Stack;
/* Nama File: "StackImplementation.c" -> representasi Linked */
#include<stdio.h>
#include<stdlib.h>
#include"StackInterface.h"
void InitializeStack(Stack *S)
{
S->ItemList=NULL;
}
int Empty(Stack *S)
{
return(S->ItemList == NULL);
}
int Full(Stack *S)
{
return 0;
}
void Push(ItemType X, Stack *S)
{
StackNode *Temp;
Temp=(StackNode *) malloc(sizeof(StackNode));
if(Temp==NULL)
{
printf("Maaf, pengalokasian memori gagal!\n");
}
else
{
Temp->Next=S->ItemList;
Temp->Item=X;
S->ItemList=Temp;
}
}
void Pop(Stack *S, ItemType *X)
{
StackNode *Temp;
if(S->ItemList==NULL)
{
printf("Maaf, anda mencoba mengambil item dari Stack yang kosong!\n");
}
else
{
Temp=S->ItemList;
*X=Temp->Item;
S->ItemList=Temp->Next;
free(Temp);
)
}
|