You are on page 1of 8

MODUL PRAKTIKUM

STRUKTUR DATA
LINKED LIST (SENARAI BERKAIT)
Oleh :
Muhammad Riza Hilmi, ST.
rizahilmi@gmail.com
STMIK STIKOM BALI
2012
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
BAB IV
LINKED LIST (SENARAI BERKAIT)
1. PENGERTIAN
a. Pointer
Pointer adalah tipe data yang digunakan untuk menyimpan ALAMAT MEMORI
(bukan data!). Pointer merupakan variable yang berisi alamat memori sebagai nilainya
dan berbeda dengan variabel biasa yang berisi nilai tertentu.
Dengan kata lain, pointer berisi alamat dari variabel yang mempunyai nilai
tertentu. Pengalokasiannya bersifat dinamik : dapat dibangun atau dihapus selama
program berjalan (runtime).
Operator Pointer ada dua, yaitu :
1. Operator &
Operator & bersifat unary (hanya memerlukan satu operand saja).
Operator & menghasilkan alamat dari operandnya.
2. Operator *
Operator * bersifat unary (hanya memerlukan satu operand saja).
Operator * menghasilkan nilai yang berada pada sebuah alamat.
Adapun bentuk umum dari pernyataan variable pointer dalam C++ adalah :
type *variable_name;
Dengan :
type adalah tipe dasar pointer.
variable_name adalah nama variable pointer.
* adalah operator memori yang fungsinya untuk mengembalikan nilai variabel
pada alamatnya yang ditentukan oleh operand.
Contoh :
Int *int_pointer; // pointer to integer
Float *float_pointer; // pointer to float
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
b. Linked List
Linked list adalah sejumlah node yang dihubungkan secara linier dengan bantuan
pointer. Suatu senarai berkait (linked list) adalah suatu simpul (node) yang dikaitkan
dengan simpul yang lain dalam suatu urutan tertentu. Suatu simpul dapat berbentuk
suatu struktur atau class. Simpul harus mempunyai satu atau lebih elemen struktur atau
class yang berisi data.
Ciri khas suatu node dalam linked list adalah harus selalu terdapat field, paling
sedikit dua bagian, yaitu :
1) Data (info).
2) Pointer (next).
Secara umum linked list dibedakan atas 2 macam, yaitu :
1) Single Linked List
Satu simpul/node memiliki sebuah variabel pointer yang digunakan untuk menunjuk
pada simpul/node berikutnya.
2) Double Linked List
Satu simpul/node menyimpan dua variabel bertipe pointer.
a) Satu pointer menunjuk ke simpul/node berikutnya.
b) Pointer yang lain menunjuk ke simpul/node sebelumnya.
Gambar 4.1 ilustrasi singled linked list dan double linked list
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
Circular linked list
Pointer pada simpul/node terakhir menunjuk pada simpul/node pertama.
Varian :
Circular single linked list.
Circular double linked list.
Gambar 4.2 Ilustrasi Circular linked list
2. BENTUK UMUM
typedef struct elemenList
{ infotype info;
address next;
} elemenTlist;
Keterangan :
infotype sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list .
next address dari elemen berikutnya (suksesor) .
Contoh sebuah linked list yang terdiri dari 3 elemen:
Contoh list kosong:
Elemen pertama tidak memiliki pendahulu/predesor oleh sebab itu alamat elemen
pertama digambarkan dengan anak panah dari kotak yang namanya awal. Elemen terakhir
tidak memiliki penerus/suksesor oleh sebab itu field Next nya di-NULL-kan. Setiap elemen
menyimpan alamat elemen penerusnya sehingga elemen list saling berkait, maka list
seperti ini disebut dengan Linked List.
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
3. OPERASI-OPERASI
1) Buatlist(list)
Mendeklarasikan / mendefinisikan linked list kosong
2) Listkosong(list)
Mengecek apakah list dalam keadaan kosong atau tidak
3) Telusurlist(list) atau Cetaklist(list)
Menelusuri / mencetak semua node pada linked list.
4) Sisipnode(list)
Menambah/menyisipkan node baru bersisi info baru (IB) pada linked list sedemikian
sehingga linked list tetap terurut.
5) Hapusnode(list)
Menghapus node pada linked list yang sesuai dengan info yang dihapus.
4. LATIHAN
Latihan 1. Program Implemantasi Pointer (Pointer.cpp)
#include<iostream.h>
#include<conio.h>
void main()
{
int v = 7, *p;
p = &v;
cout<<"Nilai v = "<<v<<" dan *p = "<<*p<<endl;
cout<<"Alamatnya = "<<p;
getch();
}
Latihan 2. ProgramImplementasi Linked List dengan Pointer (Linkedlist.cpp)
#include <iostream>
#include <malloc.h>
#include <conio.h>
#define true 1
#define false 0
typedef int typeinfo;
typedef struct
typenode *typeptr;
struct typenode {typeinfo info;
typeptr next;};
typeptr awal,akhir;
void buatlistbaru();
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
void sisipnode(typeinfo IB);
void hapusnode(typeinfo IH);
void bacamaju();
void bacamundur();
int listkosong();
int main()
{ cout << "List Mula-mula :\n";
buatlistbaru();
sisipnode(50);
sisipnode(20);
sisipnode(5);
sisipnode(100);
sisipnode(70);
sisipnode(25);
bacamaju();
cout << "\n\nHapus node 50\n";
cout << "\nKodisi List setelah di hapus, dibaca dari belakang :\n\n";
hapusnode(50);
bacamundur();
getch();
return 0;
}
void buatlistbaru()
{ typeptr list;
list=NULL;
awal=list;
akhir=list;
}
int listkosong()
{ if(awal==NULL)
return(true);
else
return(false); }
void sisipnode(typeinfo IB)
{ typeptr NB, bantu;
NB=(typenode *) malloc(sizeof(typenode));
NB->info=IB;
NB->next=NULL;
if (listkosong())
{ awal=NB;
akhir=NB; }
else if (IB <= awal->info) // Sisip di depan
{ NB->next=awal;
awal=NB; }
else
{ bantu=awal;
while (bantu->next!=NULL && IB > bantu->next->info)
bantu=bantu->next;
NB->next=bantu->next; // Sisip di tengah atau di belakang
bantu->next=NB;
if (IB>akhir->info)
akhir=NB;
}
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
}
void hapusnode(typeinfo IH)
{ typeptr hapus, bantu;
if (listkosong())
cout << "List masih kosong";
else if (awal->info==IH)
{ hapus=awal; // Hapus di awal
awal=hapus->next;
free(hapus); }
else
{ bantu=awal;
while (bantu->next->next!=NULL && IH!=bantu->next->info)
bantu=bantu->next;
if (IH==bantu->next->info)
{ hapus=bantu->next;
if (hapus==akhir) // Hapus di akhir
{ akhir=bantu;
akhir->next=NULL; }
else
bantu->next=hapus->next; // Hapus di tengah
free(hapus);
}
else
cout << "Node tidak ditemukan!\n"; }
}
void bacamaju()
{
typeptr bantu;
bantu=awal;
while (bantu!=NULL)
{ cout << " " << bantu->info;
cout << " ";
bantu=bantu->next;
}
}
void bacamundur()
{ typeptr depan,bantu;
depan=awal;
awal=akhir;
do { bantu=depan;
while (bantu->next!=akhir)
bantu=bantu->next;
akhir->next=bantu;
akhir=bantu;
} while (akhir!=depan);
akhir->next=NULL;
bantu=awal;
while (bantu!=NULL)
{ cout << " " << bantu->info;
cout << " ";
bantu=bantu->next; }
}
Praktikum Struktur Data - STMIK STIKOM BALI
Muhammad Riza Hilmi, ST. - rizahilmi@gmail.com
5. TUGAS
Pelajari materi praktikum struktur data dari awal hingga akhir (linked list) minggu depan UTS!
Semoga mengerti dan bisa mengerjakannya! :-D

You might also like