Berikut ini adalah *sebuah contoh*
implementasi ADT List dengan representasi linked
(Pointer). Sekali lagi, ini hanyalah contoh. Janganlah
dibayangkan bahwa ini adalah satu-satunya implementasi
ADT List. Sama halnya dengan ADT sendiri yang merupakan
model matematis hasil 'imajinasi' kita -> dapat
berubah sesuai kebutuhan. Jadi kalau
asisten/mentor/teman/anda sendiri memiliki suatu
implementasi ADT List yang menurut anda lebih baik, by
all means, use it! /* DEFINISI IMPLEMENTASI STRUKTUR DATA */
typedef char DataType;
struct NodeStruct
{
DataType Data;
struct NodeStruct *Next;
};
typedef struct NodeStruct Node;
typedef Node * Position;
typedef Position List;
/* IMPLEMENTASI DARI OPERASI-OPERASI YANG DITAWARKAN DI INTERFACE */
/*Menginisialisasi list baru yang dikembalikan melalui var bertipe List*/
List init()
{
List NewList;
NewList=(Position)malloc(sizeof(Node));
NewList->Next=NULL;
return NewList;
}
/* Mengembalikan 1 kalau L kosong, 0 kalau L tidak kosong */
int is_empty(List L)
{
if(L->Next==NULL)
return 1;
else
return 0;
}
/* Mengembalikan panjang (jumlah unsur) dari List L */
int length(List L)
{
int i=0;
while(L->Next!=NULL)
{
L=L->Next;
i++;
}
return i;
}
/*Mengembalikan var bertipe Position yang menunjuk ke unsur ke-i dalam L*/
Position select(int i, List L)
{
Position Q;
Q=L;
while(i>1&&Q!=NULL)
{
Q=Q->Next;
i--;
}
if(i==1&&Q!=NULL)
return Q;
else
{
printf("Error: Posisi ke-%d tidak ada!\n",i);
return NULL;
}
}
/* Menyisipkan unsur 'X' di posisi 'P' dalam list 'L' */
void insert(DataType X, Position P, List L)
{
Position Q;
Q=P->Next;
P->Next=(Position)malloc(sizeof(Node));
P->Next->Data=X;
P->Next->Next=Q;
}
/* Menghapus unsur di posisi 'P' dalam list 'L' */
void delete(Position P, List L)
{
Position Q;
Q=P->Next;
P->Next=P->Next->Next;
free(Q);
}
/* Mengubah nilai unsur di posisi 'P' dalam list 'L' menjadi 'X' */
void replace(DataType X, Position P, List L)
{
P->Next->Data=X;
}
/* Mengembalikan nilai data dari unsur di posisi 'P' dalam list 'L' */
DataType getData(Position P, List L)
{
return P->Next->Data;
}
|