Modul 3

Posted: Oktober 28, 2010 in Praktikum Implementasi Struktur Data

LAPORAN PRAKTIKUM
IMPLEMENTASI STRUKTUR DATA

Linked List/Senarai Berkait – Linked List dengan Pointer

Hasan Fadli
123090089
PLUG 9

Asisten Dosen : Widy Sulistianto

CoAss: Dian Andarini W

 

TEKNIK INFORMATIKA
FAKULTAS TEKNOLOGI INDUSTRI
UNIVERSITAS PEMBANGUNAN NASIONAL “VETERAN” YOGYAKARTA
2010

 


BAB I

PEMBAHASAN

Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat menyimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time).

Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yang sangat besar(misal 100). Hal ini tidak efektif karena seringkali yang dipakai tidak sebesar itu. Dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang besarnya statik. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.

Programmer membaca data menyerupai kondektur yang ingin memeriksa karcis penumpang. Programmer menyusuri linked list melalui kepalanya, dan kemudian berlanjut ke gerbong (data) berikutnya, dan seterusnya sampai gerbong terakhir (biasanya ditandai dengan pointer menunjukkan alamat kosong (NULL)). Penyusuran data dilakukan secara satu persatu sehingga penyusuran data bekerja dengan keefektifan ON. Dibandingkan array, ini merupakan kelemahan terbesar linked list. Pada array, apabilan programmer ingin mengakses data ke-n (index n), maka programmer dapat langsung mengaksesnya. Sedangkan dengan linked list programmer harus menyusuri data sebanyak n terlebih dahulu.

 


BAB II

TUGAS

Perhatikanlah beberapa program berikut :

Listing 3.2:

#include <iostream>

#include <malloc.h>

using std::cout;

typedef int typeinfo;

typedef struct typenode *typeptr;

typedef struct typenode{typeinfo info; typeptr next;};

typeptr awal,akhir;

void buatlistbaru();

void sisipdepan(typeinfo IB);

void sisipbelakang(typeinfo IB);

void sisiptengah(typeinfo IB);

void hapuslist(typeinfo IH);

void cetaklist();

int main()

{

buatlistbaru();

sisipdepan(10);

sisipbelakang(25);

sisipbelakang(100);

sisiptengah(50);

cetaklist();

hapuslist(50);

cetaklist();

return 0;

}

void buatlistbaru()

{

typeptr list;

list=(typenode *) malloc(sizeof(typenode));

list=NULL;

awal=list;

akhir=list;

}

void sisipdepan(typeinfo IB)

{

typeptr NB;

NB=(typenode *) malloc(sizeof(typenode));

NB->info=IB;

if(awal==NULL)

{  awal=NB;

akhir=NB;

}

else

{ NB->next=awal; }

awal=NB;

}

void sisipbelakang(typeinfo IB)

{

typeptr NB;

NB=(typenode *) malloc(sizeof(typenode));

NB->info=IB;

if (awal==NULL)

{ awal=NB;

akhir=NB;          }

else

{ akhir->next=NB; }

akhir=NB;

akhir->next=NULL;

}

void sisiptengah(typeinfo IB)

{

typeptr NB, bantu;

NB=(typenode *) malloc(sizeof(typenode));

NB->info=IB;

NB->next=NULL;

if (awal==NULL)

{ awal=NB;

akhir=NB;          }

else

{ bantu=awal;

while ((IB > bantu->next->info) && (bantu->next!=NULL))

bantu=bantu->next;

NB->next=bantu->next;

bantu->next=NB;

}

}

void hapuslist(typeinfo IH)

{ typeptr hapus,bantu;

if (awal==NULL)

{

cout << “List masih kosong!\n”;

}

else

{ if (awal->info==IH)

{ hapus=awal;

awal=hapus->next;

free(hapus); }

else

{ bantu=awal;

while ((bantu->next->info!=IH) && (bantu->next!=NULL))

{ bantu=bantu->next; }

hapus=bantu->next;

if (hapus==NULL)

{ cout << “List tidak ditemukan\n”;

}

else

{if (hapus==akhir)

{ akhir=bantu;

akhir->next=NULL; }

else

{ bantu->next=hapus->next; }

free(hapus); }

}

}

}

void cetaklist()

{   typeptr bantu;

bantu=awal;

while (bantu!=NULL)

{

cout << ” ” <<bantu->info;

cout << ” “;

bantu=bantu->next;

}

}

 

Penjelasan :

#include <iostream> dan #include <malloc.h> merupakan preprocessor directive.

using std::cout; berfungsi untuk menampilkan.

typedef int typeinfo; pendeklarasian typeinfo yang bertipe integer.

typedef struct typenode *typeptr; pendeklarasian pointer yang merupakan struct bertipe node.

typedef struct typenode {typeinfo info;typeptr next;}; pendeklarasian struct node.

typeptr awal,akhir; pendeklarasian variabel awal dan akhir yang bertipe pointer.

void buatlistbaru(); void sisipdepan (typeinfo IB); void sisipbelakang (typeinfo IB); void sisiptengah (typeinfo IB); void hapuslist(typeinfo IB); void cetaklist (); void pada masing-masing statement berfungsi untuk mendeklarasikan bahwa itu sebuah fungsi.

Statement di bawah ini merupakan pendeklarasian program utama :

int main()

{

//pendeklarasian fungsi

buatlistbaru();

sisipdepan(10);

sisipbelakang(25);

sisipbelakang(100);

sisiptengah(50);

cetaklist ();

hapuslist (50);

cetaklist ();

return 0;

}

tujuan dari program di bawah ialah untuk menetukan letak awal dan akhir dari list :

void buatlistbaru() perintah memanggil fungsi.

{typeptr list; pendeklarasian variabel list dengan tipe pointer.

list = (typenode *) malloc(sizeof(typenode)); pendeklarasian pointer list pada memory.

list=NULL; nilai dari pointer list NULL/kosong.

awal=list; pointer awal menunjuk ke pointer list.

akhir=list; pointer akhir menunjuk ke pointer list.

}

tujuan dari program di bawah ialah menyisipkan suatu node yang nantinya akan diletakkan di bagian depan list :

void sisipdepan(typeinfo IB) perintah untuk memanggil fungsi dan pemberian nilai IB.

{typeptr NB; pendekarasian variabel NB dengan tipe pointer.

NB=(typenode *) malloc(sizeof(typenode)); pendeklarasian pointer NB pada memory.

NB->info=IB; info dari pointer NB sama dengan IB.

if (awal == NULL) jika info awal sama dengan NULL, maka jalankan program dibawah.

{ awal = NB; pointer awal menunjuk ke pointer NB.

akhir =NB; } pointer akhir menunjuk ke pointer NB.

else jika prosedur pembanding tidak sesuai, maka mengerjakan perintah di bawah.

{ NB->next=awal;} alamat pointer NB menunjuk ke pointer awal.

awal=NB;} pointer awal menunjuk ke pointer list.

tujuan dari program di bawah ialah menyisipkan suatu node yang nantinya diletakkan di bagian belakang list.

void sisipbelakang(typeinfo IB) perintah memanggil fungsi dan pemberian nilai IB.

{typeptr NB; perintah pendekarasian variabel NB dengan tipe data pointer.

NB=(typenode *) malloc(sizeof(typenode)); pendeklarasian pointer NB pada memory.

NB->info=IB; info dari pointer NB sama dengan IB.

if (awal == NULL) jika info awal sama dengan NULL, maka jalankan program dibawah.

{ awal = NB; pointer awal menunjuk ke pointer NB.

akhir =NB; } pointer akhir menunjuk ke pointer NB.

else jika prosedur pembanding tidak sesuai, maka mengerjakan perintah di bawah.

{ akhir->next=NB;} alamat pointer akhir menunjuk ke pointer NB.

akhir=NB; pointer akhir menunjuk ke pointer list.

akhir->next=NULL;} alamat pointer “akhir” kosong/NULL.

tujuan dari program di bawah ialah menyisipkan suatu node yang nantinya akan diletakkan di bagian tengah list.

void sisiptengah(typeinfo IB) perintah memanggil fungsi dan pemberian nilai IB.

{typeptr NB, bantu; perintah pendekarasian variabel NB dan bantu dengan tipe pointer.

NB=(typenode *) malloc(sizeof(typenode)); pendeklarasian pointer NB pada memory.

NB->info=IB; info dari pointer NB sama dengan IB.

NB->next=NULL; alamat pointer NB kosong/NULL.

if (awal == NULL) jika info awal sama dengan NULL, maka jalankan program dibawah.

{ awal = NB; pointer awal menunjuk ke pointer NB.

akhir =NB; } pointer akhir menunjuk ke pointer NB.

else jika prosedur pembanding tidak sesuai, maka mengerjakan perintah di bawah.

{ bantu=awal; pointer bantu sama dengan awal.

while ((IB > bantu->next->info) && (bantu->next!=NULL)) jika IB lebih besar dari pada info dari bantu next, maka jalankan program dibawah.

bantu=bantu->next;} memindah alamat yang ditunjuk pointer bantu ke node selajutnya.

NB->next=bantu->next; memindah alamat yang dituju NB ke alamat yang dituju bantu.

bantu->next=NB;} memindah alamat bantu ke NB.

tujuan dari program di bawah ialah menghapus suatu list.

void hapuslist(typeinfo IH) perintah memanggil fungsi dan pemberian nilai IB.

{typeptr hapus, bantu; perintah pendekarasian variabel hapus dan bantu yang bertipe pointer.

if(awal==NULL) jika info awal sama dengan NULL, maka jalankan program dibawah.

cout << “List masih kosong”; untuk smenampilkan output.

else if (awal->info==IH) jika prosedur pembanding tidak sesuai, cek jika info awal sama dengan IH, maka mengerjakan perintah di bawah.

{ hapus=awal; memindah pointer hapus menunjuk ke pointer awal

awal=hapus->next; memindah pointer awal ke alamat yang ditunjuk hapus.

free(hapus); } node yang ditunjuk oleh pointer hapus akan dihapus.

else jika prosedur pembanding tidak sesuai, maka mengerjakan perintah di bawah.

{ bantu=awal; memindah pointer hapus menunjuk ke pointer awal.

while ((bantu->next->info!=IH) && (bantu->next=NULL)) jika info dari alamat yang dituju bantu adalah IH dan alamat yang dituju bantu adalah NULL, maka mengerjakan perintah di bawah.

{bantu=bantu->next;} memindah alamat bantu ke selanjutnya.

hapus=bantu->next; memindah pointer hapus ke alamat yang dituju bantu.

if (hapus==NULL) jika hapus sama dengan NULL, maka jalankan program di bawah.

{ cout<< “List tidak ditemukan \n”; } memunculkan output

else jika tidak, maka mengerjakan perintah di bawah.

{if (hapus==akhir) jika hapus nilai hapus sebanding dengan akhir, maka jalankan perintah di bawah.

{akhir=bantu; alamat akhir sama dengan bantu.

akhir->next=NULL; } alamat akhir kosong/NULL.

else jika tidak, jalankan perintah di bawah.

{bantu->next=hapus->next;} alamat bantu sama dengan hapus.

free(hapus);}}} node hapus akan dihapus.

void cetaklist() memanggil fungsi.

{typeptr bantu; pendeklarasian pointer bantu.

bantu=awal; bantu sama dengan awal.

while (bantu!=NULL) apabila bantu tidak sama dengan NULL

{cout << ” ” << bantu->info; tampilkan isi dari bantu

cout << ” ” ; menampilkan output.

bantu=bantu->next;}} bantu pindah ke node berikutnya.

 

Print Screen Output :


BAB III

KESIMPULAN

Secara umum linked list tersusun atas sejumlah bagian-bagian data yang lebih kecil yang terhubung (biasanya melalui pointer). Linked list dapat divisualisasikan seperti kereta, bagian kepala linked list adalah mesin kereta, data yang disimpan adalah gerbong, dan pengait antar gerbong adalah pointer.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s