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); ) } |