ADT List: Implementasi dengan Representasi Linked (Pointer)
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;
}

klik di sini untuk kembali ke halaman utama...