Senarai [list]

June 5, 2007 at 1:11 pm | Posted in Informatic | Leave a comment

Senarai adalah sekumpulan nilai bertipe sama yang mempunyai keterurutan keanggotaan. Berdasarkan keterurutan keanggotaan tersebut, jika diketahui sebuah anggota/elemen senarai maka dapat diketahui elemen berikutnya.

Setiap elemen senarai terbagi menjadi 2 bagian, yaitu:
1.   Info: menyimpan informasi, bisa berupa satu elemen data atau beberapa elemen data.
2.   Berikut: menyimpan ‘alamat’ dari elemen berikutnya. Alamat dapat berupa sebuah alamat kosong / NIL.

Senarai berantai merupakan contoh struktur data sederhana yang menggunakan pemakaian memori secara dinamis. Secara rinci, programmer dapat menulis suatu struct yang berisi variabel yang memegang informasi yang ada di dalamnya, yang mempunyai pointer yang menunjuk ke suatu struct sesuai dengan tipe datanya.
Dibandingkan dengan struktur array, struktur ini lebih dinamis, karena banyaknya elemen dengan mudah ditambah dan dikurangi, berbeda dengan array yang ukurannya bersifat tetap (statis).

dalam senarai terdapat 6 operasi yaitu : sisip awal,tengah,akhir dan hapus awal,tengah,akhir

berikut contoh source code using C++ :

#include <stdlib.h>

#include “uSenarai.h”

 

bool senaraiKosong(Senarai L){

  return L.pertama==null;

}

 

void inisialisasi(Senarai* L){

  L->pertama = null;

}

 

alamat newAlamat(tInfo info) {

  alamat P = new Elemen;

  info(P) = info;

}

 

void sisipAwal(Senarai* L, tInfo info){

  alamat P = newAlamat(info);

 

  if (senaraiKosong(*L)) {

    berikut(P) = null;

  }

  else {

    berikut(P) = L->pertama;

  }

  L->pertama = P;

}

 

void sisipTengah(alamat* PSebelum, tInfo info){

  alamat P = newAlamat(info);

  alamat PS = *PSebelum;

  berikut(P) = berikut(PS);

  berikut(PS) = P;

}

 

void sisipAkhir(Senarai* L, tInfo info) {

  alamat P = newAlamat(info);

  alamat PTerakhir;

 

  berikut(P) = null;

 

  if (senaraiKosong(*L)){

    L->pertama = P;

  }

  else {

    PTerakhir = L->pertama;

   

    while (berikut(PTerakhir) != null){

      PTerakhir = berikut(PTerakhir);

    }

    berikut(PTerakhir) = P;

  }

}

 

void hapusAwal(Senarai* L, tInfo* info){

  alamat P = L->pertama;

  L->pertama = berikut(L->pertama);

 

  *info = info(P);

  free(P);

}

 

void hapusTengah(alamat* PSebelum, tInfo* info){

  alamat PS = *PSebelum;

  alamat P = berikut(PS);

 

  berikut(PS) = berikut(berikut(PS));

 

  *info = info(P);

  free(P);

}

 

void hapusAkhir(Senarai* L, tInfo* info){

  alamat PSebelumTerakhir;

  alamat PTerakhir;

 

  PSebelumTerakhir = null;

  PTerakhir = L->pertama;

 

  while (berikut(PTerakhir)!=null) {

    PSebelumTerakhir = PTerakhir;

    PTerakhir = berikut(PTerakhir);

  }

 

  if (PSebelumTerakhir == null){

    L->pertama = null;

  }

  else {

    berikut(PSebelumTerakhir) = null;

  }

 

  *info = info(PTerakhir);

  free(PTerakhir);

}

Leave a Comment »

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.
Entries and comments feeds.

%d bloggers like this: