ADT List: Implementasi dengan Representasi Sekuensial (Array)
Berikut ini adalah *sebuah contoh* implementasi ADT List dengan representasi sekuensial (Array). 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!
#define MAX_LIST 100

/* DEFINISI IMPLEMENTASI STRUKTUR DATA */
typedef int Position;
typedef char DataType;
typedef struct
{
   DataType ListArray[MAX_LIST];
   Position Last;
}ListType;
typedef ListType * List;


/* IMPLEMENTASI DARI OPERASI-OPERASI YANG DITAWARKAN DI INTERFACE */

/*Menginisialisasi list baru yang dikembalikan melalui var bertipe List*/
List init()
{
   List NewList;
   Position P;
   NewList=(ListType *)malloc(sizeof(ListType));
   for(P=0;P<MAX_LIST;P++)
      NewList->ListArray[P]=0;
   NewList->Last=0;
   return NewList;
}

/* Mengembalikan 1 kalau L kosong, 0 kalau L tidak kosong */
int is_empty(List L)
{
   if(L->Last==0)
      return 1;
   else
      return 0;
}

/* Mengembalikan panjang (jumlah unsur) dari List L */
int length(List L)
{
   return L->Last;
}

/*Mengembalikan var bertipe Position yang menunjuk ke unsur ke-i dalam L*/
Position select(int i, List L)
{
   if(i>L->Last+1||i<1)
   {
      printf("Error: Posisi ke-%d tidak ada!\n",i);
      return -1;
   }
   else
      return i;
}

/* Menyisipkan unsur 'X' di posisi 'P' dalam list 'L' */
void insert(DataType X, Position P, List L)
{
   Position Q;
   if(L->Last==MAX_LIST)
      printf("Error: List sudah penuh!\n");
   else
   {
      for(Q=L->Last;Q>=P;Q--)
         L->ListArray[Q]=L->ListArray[Q-1];
      L->ListArray[P-1]=X;
      L->Last++;
   }
}

/* Menghapus unsur di posisi 'P' dalam list 'L' */
void delete(Position P, List L)
{
   Position Q;
   for(Q=P;P<L->Last;P++)
      L->ListArray[Q-1]=L->ListArray[Q];
   L->Last--;
}

/* Mengubah nilai unsur di posisi 'P' dalam list 'L' menjadi 'X' */
void replace(DataType X, Position P, List L)
{
   L->ListArray[P-1]=X;
}

/* Mengembalikan nilai data dari unsur di posisi 'P' dalam list 'L' */
DataType getData(Position P, List L)
{
   return L->ListArray[P-1];
}

klik di sini untuk kembali ke halaman utama...