2. POINTER dan SINGLE LINK LIST - iLab
2. POINTER dan SINGLE LINK LIST - iLab
2. POINTER dan SINGLE LINK LIST - iLab
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>2.</strong> <strong>POINTER</strong> <strong>dan</strong> <strong>SINGLE</strong> <strong>LINK</strong> <strong>LIST</strong><br />
TUJUAN PRAKTIKUM<br />
1. Praktikan mengetahui tipe struktur data baru yaitu tipe data Pointer.<br />
<strong>2.</strong> Praktikan menggunakan pointer didalam pembuatan program <strong>dan</strong> dapat<br />
menerapkannya dalam sebuah variabel dinamik (Link List).<br />
3. Praktikan mengetahui perbedaan antara variabel Pointer, Variabel Statis <strong>dan</strong><br />
Variabel Dinamis.<br />
TEORI PENUNJANG<br />
Pada pertemuan sebelumnya telah dijelaskan mengenai variabel yang<br />
bertipe Array, suatu tipe data yang bersifat statis (ukuran <strong>dan</strong> urutannya sudah<br />
pasti). Selain itu ruang memori yang dipakai oleh variabel tersebut tidak dapat<br />
dihapus jika variabel tersebut tidak digunakan kembali.<br />
Untuk mengatasi masalah diatas maka pascal menawarkan suatu fasilitas<br />
yang di mungkinkan suatu pengubah/variabel bersifat dinamis. Variabel dinamis<br />
adalah suatu variabel yang akan dialokasikan hanya pada saat diperlukan, yaitu<br />
setelah program dieksekusi. Variabel-variabel ini juga dapat dihapus pada saat<br />
program dieksekusi, sehingga ukuran variabel akan selalu berubah.<br />
<strong>2.</strong>1. Variabel Pointer<br />
Variabel dinamik tidak dapat dideklarasikan secara eksplisit seperti halnya<br />
mendeklarasikan variabel statik <strong>dan</strong> tidak dapat secara langsung ditunjukkan oleh<br />
suatu pengenal (identifier). Variabel dinamik hanya dapat ditunjukkan oleh<br />
variabel khusus yang berisi alamat memori yang digunakan oleh variabel dinamik<br />
tersebut. Variabel khusus ini disebut juga dengan variabel pointer. Variabel<br />
Pointer adalah suatu variabel yang menunjuk ke alamat memori yang digunakan<br />
untuk menampung data yang akan diproses.<br />
Lab. Teknik Informatika – Struktur Data 1
Deklarasi Variabel Pointer :<br />
Var : ^<br />
Contoh Pendeklarasian :<br />
Var<br />
JumlahData : ^Integer;<br />
NamaSiswa : ^String[25];<br />
NilaiSiswa : ^Real;<br />
Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian<br />
variabel biasa, hanya perlu ditambahkan simbol topi ( ^ ) – biasa juga disebut<br />
ceret atau circumflex. Simbol topi tersebut menandakan bahwa variabel tersebut<br />
menunjuk ke lokasi tertentu di memori.<br />
<strong>2.</strong><strong>2.</strong> Operasi Pada Pointer<br />
Pada pointer ada dua operasi dasar yang dapat dilakukan yaitu :<br />
1. Operasi mengkopi simpul<br />
<strong>2.</strong> Operasi mengkopi isi simpul<br />
Untuk memahami operasi di atas perhatikan contoh berikut. Pertama kali kita<br />
deklarasikan variabel pointernya, yaitu :<br />
Var<br />
P1, P2 : ^Byte;<br />
Posisi P1 <strong>dan</strong> P2 di memory sekarang ini adalah P1 menunjuk ke tipe data Byte<br />
<strong>dan</strong> P2 juga menunjuk ke tipe data Byte.<br />
P1<br />
<br />
P2<br />
<br />
Lab. Teknik Informatika – Struktur Data 2
Jika kita mengisi variabel P1 dengan 5 san P2 dengan 8 maka posisi P1 <strong>dan</strong> P2<br />
sekarang adalah :<br />
P1:=5; P2:=8;<br />
P1<br />
5<br />
P2<br />
8<br />
Jika kita memberikan statement :<br />
P1:=P2;<br />
Maka gambar diatas berubah menjadi :<br />
P1<br />
5<br />
P2<br />
8<br />
Dari gambar diatas dapat di perhatikan bahwa sekarang pointer P2 juga<br />
menunjuk ke simpul yang ditunjuk oleh pointer P1. Simpul yang tadinya ditunjuk<br />
oleh P2 menjadi terlepas. Dalam keadaan seperti ini, karena tidak ditunjuk oleh<br />
suatu pointer lain, maka simpul tersebut tidak bisa dimasuki lagi karena lokasi<br />
simpul tersebut dalam variabel tidak diketahui lagi (kecuali apabila simpul ini<br />
ditunjuk oleh pointer yang lain). Operasi inilah yang disebut dengan operasi<br />
mengkopi pointer.<br />
adalah :<br />
Kita kembali lagi ke gambar sebelumnya. Jika statemen yang diberikan<br />
P1^:=P2^;<br />
Lab. Teknik Informatika – Struktur Data 3
Maka hasil yang kita peroleh adalah :<br />
P1<br />
5<br />
P2<br />
5<br />
Operasi inilah selanjutnya yang disebut dengan operasi mengkopi isi simpul.<br />
<strong>2.</strong>3. Variabel Dinamik<br />
Variabel dinamik dibentuk dengan menggunakan variabel pointer yang telah<br />
dialokasikan. Pengalokasian variabel ini menggunakan statement New(). Jika kita<br />
tidak membutuhkan variabel dinamik yang telah kita bentuk maka kita dapat<br />
menghapusnya dari memory dengan menggunakan statemen Dispose(). Sampai<br />
saat ini kita baru membentuk satu buah variabel dinamik.<br />
Jika kita memakai banyak variabel dinamis maka kita akan membutuhkan<br />
banyak variabel pointer. Oleh karena itu ada baiknya jika kita hanya<br />
menggunakan satu variabel pointer saja untuk menyimpan banyak data dengan<br />
metode yang kita sebut dengan link list.<br />
<strong>2.</strong>4. Linked List<br />
Link list merupakan suatu variabel yang bertipe pointer yang membentuk<br />
suatu untaian yang saling berhubungan. Tiap untaian tersebut diletakkan pada<br />
memory. Tempat yang disediakan pada suatu area memori tertentu untuk<br />
menyimpan data dikenal dengan sebutan Node/Simpul. Linked list juga disebut<br />
dengan seranai beranai merupakan suatu variabel pointer yang simpulnya bertipe<br />
Record.<br />
Gambar <strong>2.</strong>1 Simpul-simpul yang membentuk seranai beranai<br />
Lab. Teknik Informatika – Struktur Data 4
Deklarasi Linked List di dalam Pascal :<br />
Type<br />
PSimpul = ^Simpul<br />
Simpul = Record<br />
Info : Tipe Data;<br />
Next : PSimpul;<br />
End;<br />
Var<br />
Head, Tail : PSimpul;<br />
Variabel Head <strong>dan</strong> Tail selanjutnya dialokasikan dengan statement New(), yang<br />
dihasilnya nantinya merupakan link list yang sudah terbentuk.<br />
Ada beberapa hal yang harus diketahui mengenai link list, diantaranya adalah :<br />
1. Link list selalu memiliki pointer petunjuk yang selalu menunjuk pada awal<br />
dari list yang disebut Head.<br />
<strong>2.</strong> Link list juga selalu memiliki pointer petunjuk menunjuk pada akhir dari list<br />
yang disebut Tail, kecuali untuk jenis circular.<br />
3. Setiap simpul yang terbentuk selalu memiliki nilai NIL, kecuali jika simpul<br />
tersebut sudah ditunjuk oleh simpul yang lainnya (Link list belum<br />
terhubung).<br />
4. Posisi simpul terakhir pada link list selalu bernilai NIL karena ia tidak<br />
menunjuk pada simpul yang lainnya, kecuali bentuk circular.<br />
5. Operasi yang dapat dilakukan pada Link List diantaranya adalah :<br />
a. Menambah Simpul (di Depan, Belakang <strong>dan</strong> Tengah).<br />
b. Menghapus Simpul (di Depan, Belakang <strong>dan</strong> Tengah).<br />
c. Membaca isi link list (Membaca maju <strong>dan</strong> mundur).<br />
Struktur umum Link List dapat dilihat pada gambar <strong>2.</strong>2 dibawah ini:<br />
Lab. Teknik Informatika – Struktur Data 5
Info<br />
next<br />
NIL<br />
Head<br />
Tail<br />
Gambar <strong>2.</strong>2 Struktur Umum Link List<br />
<strong>2.</strong>5. Operasi Pada Link List<br />
Ada tiga jenis operasi pada link list, yaitu :<br />
1. Menambah Simpul<br />
Menambah simpul pada link list ada tiga macam yaitu menambah di depan,<br />
belakang <strong>dan</strong> tengah, tapi hanya penambahan yang umum dipakai saja oleh link<br />
list yang akan dibahas yaitu penambahan simpul dibelakang. Selanjutnya<br />
penambahan yang lain akan dibahas pada pertemuan-pertemuan selanjutnya.<br />
Penambahan di belakang maksudnya menambahkan simpul-simpul baru pada<br />
posisi Tail. Gambar <strong>2.</strong>3 ini merupakan ilustrasi penambahan simpul di<br />
belakang.<br />
Head<br />
Tail<br />
Temp<br />
A B C D E<br />
a.<br />
Head<br />
Tail<br />
Temp<br />
A B C D E<br />
b.<br />
Head<br />
Tail<br />
Temp<br />
A B C D E<br />
c.<br />
Gambar <strong>2.</strong>3 Ilustrasi Penambahan Simpul di Posisi Tail<br />
Lab. Teknik Informatika – Struktur Data 6
Berikut ini merupakan procedure Tambah simpul pada Pascal :<br />
Procedure Tambah(Var Head, Tail : PSimpul; Elemen : Char);<br />
Var Temp : PSimpul;<br />
Begin<br />
New(Temp);<br />
Temp^.Info := Elemen;<br />
If Head = NIL Then { Jika Link List Masih Kosong }<br />
Head := Temp<br />
Else<br />
Tail^.Next := Temp; { Gambar <strong>2.</strong>3.b. }<br />
Tail := Temp; { Gambar <strong>2.</strong>3.c. }<br />
Tail^.Next := NIL;<br />
End;<br />
<strong>2.</strong> Menghapus Simpul<br />
Operasi menghapus simpul juga ada tiga macam yaitu menghapus simpul di<br />
depan, belakang <strong>dan</strong> tengah. Untuk menghapus sebuah simpul diperlukan satu<br />
buah tambahan variabel pointer yaitu variabel bantu yang berguna untuk<br />
menunjukkan simpul manakah yang akan dihapus. Procedure Hapus<br />
selengkapnya adalah sebagai berikut :<br />
Procedure Hapus(Var Head, Tail : PSimpul; Elemen : Char);<br />
Var Temp1, Temp2 : PSimpul;<br />
Begin<br />
If Head = NIL Then { Jika Link List Masih Kosong }<br />
Writeln(‘Link List Masih Kosong’)<br />
Else If Head^.Info = Elemen Then { Simpul Pertama dihapus<br />
}<br />
Begin<br />
Temp2:=Head;<br />
Lab. Teknik Informatika – Struktur Data 7
Head := Temp2^.Next;<br />
Dispose(Temp2);<br />
End<br />
Else {Menghapus simpul tengah / }<br />
Begin {Akhir }<br />
Temp1 := Head<br />
{ Memulai proses pencarian elemen yang akan dihapus }<br />
While (Elemen Temp1^.Info) And (Temp1^.Next NIL)<br />
Do<br />
Temp1 := Temp1^.Next;<br />
If Temp2 NIL Then { Jika simpul ketemu }<br />
Begin<br />
{ Jika Simpul yang di cari ada di tengah }<br />
If Temp2 Tail Then<br />
Temp1^.Next := Temp2^.Next<br />
Else<br />
Begin<br />
Tail := Temp1;<br />
Tail^.Next := NIL;<br />
End;<br />
Dispose(Temp2);<br />
End<br />
Else<br />
{ Simpul yang akan dihapus tidak ketemu }<br />
Writeln(‘Simpul Tidak di ketemukan !’);<br />
End;<br />
End;<br />
3. Membaca Isi Link List<br />
Ada dua jenis untuk membaca isi link list yaitu membaca maju <strong>dan</strong> membaca<br />
mundur.<br />
Lab. Teknik Informatika – Struktur Data 8
a. Membaca Maju<br />
Membaca maju artinya membaca isi seranai beranai mulai posisi Head<br />
sampai ke posisi Tail. Berikut ilustrasi pembacaan isi simpul beserta<br />
prosedur pembacaannya :<br />
Head<br />
Temp<br />
Tail<br />
A B C D<br />
E<br />
Gambar <strong>2.</strong>4 Ilustrasi pembacaan dari Head ke Tail<br />
Procedure Baca_Maju(Head : PSimpul);<br />
Var Temp : PSimpul;<br />
Begin<br />
Temp := Head;<br />
Repeat<br />
Write(Temp^.Info,’ ‘);<br />
Temp := Temp^.Next<br />
Until Temp NIL;<br />
End;<br />
b. Membaca Mundur<br />
Membaca mundur artinya membaca isi seranai beranai mulai posisi Tail<br />
sampai ke posisi Head. Berikut ilustrasi pembacaan isi simpul beserta<br />
prosedur pembacaannya :<br />
Head<br />
Tail<br />
A B C D<br />
E<br />
Gambar <strong>2.</strong>5 Ilustrasi pembacaan dari Tail ke Head<br />
Procedure Baca_Mundur(Temp : PSimpul);<br />
Lab. Teknik Informatika – Struktur Data 9
Begin<br />
If Temp NIL Then<br />
Begin<br />
Baca_Mundur(Temp^.Next);<br />
Write(Temp^.Info,’ ‘);<br />
End;<br />
End;<br />
Ada berbagai jenis linked list, contoh diatas merupakan seranai beranai<br />
tunggal (Single Link List). Adapun jenis-jenis link list antara lain adalah :<br />
1. Single Link List / Link list satu arah (One Way List)<br />
Disebut demikian karena pada setiap simpul hanya memiliki satu buah field<br />
yang berhubungan dengan simpul berikutnya. Dalam pembuatan Single Link<br />
List dapat menggunakan 2 metode, yaitu:<br />
LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)<br />
LIFO adalah suatu metode pembuatan Link List dimana data yang masuk<br />
paling akhir adalah data yang keluar paling awal.<br />
FIFO (First In First Out), aplikasinya : Queue (Antrian)<br />
LIFO adalah suatu metode pembuatan Link List dimana data yang masuk<br />
paling awal adalah data yang keluar paling awal juga.<br />
Link list ini memiliki beberapa variasi lain diantaranya :<br />
a. Header Single Link List : Jenis single link list yang memiliki simpul<br />
tambahan pada awal simpul yang berguna untuk informasi tambahan.<br />
Contoh dibawah ini merupakan header single link list yang pada simpul<br />
header-nya berisi informasi mengenai banyaknya simpul di dalam list.<br />
Head<br />
Tail<br />
4<br />
A B C D<br />
Gambar <strong>2.</strong>6 Header Single Link List<br />
Lab. Teknik Informatika – Struktur Data 10
. Circular Single Link List : Jenis single link list yang tidak pernah<br />
mempunyai tail atau tidak pernah NIL selalu berputar Head = Tail;<br />
Head<br />
A B C D E<br />
Gambar <strong>2.</strong>7 Circular Single Link List<br />
c. Header Circular Single Link List : Jenis circular single link list yang<br />
memiliki simpul tambahan di awal sebagai informasi tambahan. Contoh<br />
dibawah ini merupakan circular header single link list yang pada simpul<br />
headernya berisi informasi mengenai banyaknya simpul di dalam list.<br />
Head<br />
4 A B C D<br />
Gambar <strong>2.</strong>8 Header Circular Single Link List<br />
<strong>2.</strong> Double Link List / Link list dua arah (Two Way List)<br />
Link List ini memiliki dua buah field yang digunakan untuk menunjuk ke<br />
simpul sebelumnya <strong>dan</strong> ke simpul sesudahnya. Banyak digunakan untuk<br />
mempermudah proses pencarian simpul dalam suatu seranai beranai. Link list<br />
ini memiliki beberapa variasi lain diantaranya :<br />
a. Header Double Link List : Jenis double link list yang memiliki simpul<br />
tambahan pada awal simpul yang berguna untuk informasi tambahan.<br />
b. Circular Double Link List : Jenis double link list yang tidak pernah<br />
mempunyai tail atau tidak pernah NIL selalu berputar Head = Tail;<br />
c. Header Circular Double Link List : Jenis circular double link list yang<br />
memiliki simpul tambahan di awal sebagai informasi tambahan.<br />
Lab. Teknik Informatika – Struktur Data 11
LAPORAN PENDAHULUAN<br />
1. Jelaskan pengertian dari:<br />
a. Variabel Statis<br />
b. Variabel Dinamis<br />
c. Variabel Pointer.<br />
<strong>2.</strong> Bagaimana cara pendefinisian Variabel Pointer & Variabel Dinamis.<br />
3. Apa yang dimaksud dengan Head, Tail <strong>dan</strong> NIL.<br />
4. Jelaskan mengenai operasi pada pointer.<br />
5. Jenis-jenis Link List <strong>dan</strong> operasi pada link list.<br />
MATERI PRAKTIKUM<br />
1. Mengetahui Variabel Statis, Dinamis <strong>dan</strong> Pointer terutama perbedaan<br />
diantara ketiganya.<br />
<strong>2.</strong> Mengetahui jenis-jenis link list (keseluruhan jenisnya) minimal dengan<br />
menggunakan bagan/gambar atau juga dapat dengan program sederhana.<br />
3. Membuat program-program sederhana berupa pendefinisan link list <strong>dan</strong><br />
operasi-operasi link list.<br />
4. Membuat program menu pulldown dengan menggunakan link list. Menu<br />
pulldown terdiri dari Create link list, insert link list, delete link list, search<br />
link list <strong>dan</strong> exit main menu. Menu-menunya diisi semua kecuali search<br />
link list.<br />
5. Nilai K (Keterampilan) didapat jika praktikan dapat mengisi menu<br />
pulldown search link list.<br />
LAPORAN AKHIR<br />
Buat Algoritma <strong>dan</strong> program sederhana dari Link List.<br />
Lab. Teknik Informatika – Struktur Data 12