Anda di halaman 1dari 12

Bab 3 Pointer dan Single Linked List_________

11

BAB 3 POINTER DAN SINGLE LINKED LIST

TUJUAN PRAKTIKUM 1. Praktikan mengetahui tipe struktur data baru yaitu tipe data Pointer. 2. Praktikan menggunakan pointer didalam pembuatan program dan dapat menerapkannya dalam sebuah variabel dinamik (linked list). 3. Praktikan mengetahui perbedaan antara variabel Pointer, Variabel Statis dan Variabel Dinamis.

TEORI PENUNJANG Pada Bab sebelumnya telah dijelaskan mengenai variabel yang bertipe Array, suatu tipe data yang bersifat statis (ukuran dan urutannya sudah pasti). Selain itu ruang memori yang dipakai oleh variabel tersebut tidak dapat dihapus jika variabel tersebut tidak digunakan kembali. Untuk mengatasi masalah diatas maka pascal menawarkan suatu fasilitas yang dimungkinkan suatu pengubah/variabel bersifat dinamis. Variabel dinamis adalah suatu variabel yang akan dialokasikan hanya pada saat diperlukan, yaitu setelah program dieksekusi. Variabel-variabel ini juga dapat dihapus pada saat program dieksekusi, sehingga ukuran variabel akan selalu berubah.

3.1. Variabel Pointer Variabel dinamik tidak dapat dideklarasikan secara eksplisit seperti halnya mendeklarasikan variabel statik dan tidak dapat secara langsung ditunjukkan oleh suatu pengenal (identifier). Variabel dinamik hanya dapat ditunjukkan oleh variabel khusus yang berisi alamat memori yang digunakan oleh variabel dinamik tersebut. Variabel khusus ini disebut juga dengan variabel pointer. Variabel

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

12

Pointer adalah suatu variabel yang menunjuk ke alamat memori yang digunakan untuk menampung data yang akan diproses. Deklarasi Variabel Pointer : Var <Nama Variabel> : ^<Tipe Data> Contoh Pendeklarasian : Var JumlahData NamaSiswa NilaiSiswa : ^Integer; : ^String[25]; : ^Real;

Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian variabel biasa, hanya perlu ditambahkan simbol topi ( ^ ) biasa juga disebut ceret atau circumflex. Simbol topi tersebut menandakan bahwa variabel tersebut menunjuk ke lokasi tertentu di memori.

3.2. Operasi Pada Pointer Pada pointer ada dua operasi dasar yang dapat dilakukan yaitu : 1. Operasi mengkopi simpul 2. Operasi mengkopi isi simpul

Untuk memahami operasi di atas perhatikan contoh berikut. Pertama kali kita deklarasikan variabel pointernya, yaitu : Var P1, P2 : ^Byte;

Posisi P1 dan P2 di memory sekarang ini adalah P1 menunjuk ke tipe data Byte dan P2 juga menunjuk ke tipe data Byte. ? ?

P1

P2

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

13

Jika kita mengisi variabel P1 dengan 5 san P2 dengan 8 maka posisi P1 dan P2 sekarang adalah : P1:=5; P2:=8;

P1

P2

Jika kita memberikan statement : P1:=P2;

Maka gambar diatas berubah menjadi :

P1

5 8

P2

Dari gambar diatas dapat di perhatikan bahwa sekarang pointer P2 juga menunjuk ke simpul yang ditunjuk oleh pointer P1. Simpul yang tadinya ditunjuk oleh P2 menjadi terlepas. Dalam keadaan seperti ini, karena tidak ditunjuk oleh suatu pointer lain, maka simpul tersebut tidak bisa dimasuki lagi karena lokasi simpul tersebut dalam variabel tidak diketahui lagi (kecuali apabila simpul ini ditunjuk oleh pointer yang lain). Operasi inilah yang disebut dengan operasi mengkopi pointer.

Kita kembali lagi ke gambar sebelumnya. Jika statemen yang diberikan adalah : P1^:=P2^;

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

14

Maka hasil yang kita peroleh adalah : 5

P1

P2

Operasi inilah selanjutnya yang disebut dengan operasi mengkopi isi simpul.

3.3. Variabel Dinamik Variabel dinamik dibentuk dengan menggunakan variabel pointer yang telah dialokasikan. Pengalokasian variabel ini menggunakan statement New(). Jika kita tidak membutuhkan variabel dinamik yang telah kita bentuk maka kita dapat menghapusnya dari memory dengan menggunakan statemen Dispose(). Sampai saat ini kita baru membentuk satu buah variabel dinamik. Jika kita memakai banyak variabel dinamis maka kita akan membutuhkan banyak variabel pointer. Oleh karena itu ada baiknya jika kita hanya menggunakan satu variabel pointer saja untuk menyimpan banyak data dengan metode yang kita sebut dengan linked list.

3.4. Linked List Linked list merupakan suatu variabel yang bertipe pointer yang membentuk suatu untaian yang saling berhubungan. Tiap untaian tersebut diletakkan pada memory. Tempat yang disediakan pada suatu area memori tertentu untuk menyimpan data dikenal dengan sebutan Node/Simpul. Linked list juga disebut dengan seranai beranai merupakan suatu variabel pointer yang simpulnya bertipe Record.

Gambar 3.1 Simpul-simpul yang membentuk seranai beranai

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

15

Deklarasi Linked List di dalam Pascal : Type PSimpul Simpul = = ^Simpul Record Info : Tipe Data; Next : PSimpul; End; Var Head, Tail : PSimpul;

Variabel Head dan Tail selanjutnya dialokasikan dengan statement New(), yang dihasilnya nantinya merupakan linked list yang sudah terbentuk.

Ada beberapa hal yang harus diketahui mengenai linked list, diantaranya adalah : 1. Linked list selalu memiliki pointer petunjuk yang selalu menunjuk pada awal dari list yang disebut Head. 2. Linked list juga selalu memiliki pointer petunjuk menunjuk pada akhir dari list yang disebut Tail, kecuali untuk jenis circular. 3. Setiap simpul yang terbentuk selalu memiliki nilai NIL, kecuali jika simpul tersebut sudah ditunjuk oleh simpul yang lainnya (Linked list belum terhubung). 4. Posisi simpul terakhir pada linked list selalu bernilai NIL karena ia tidak menunjuk pada simpul yang lainnya, kecuali bentuk circular. 5. Operasi yang dapat dilakukan pada Linked List diantaranya adalah : a. b. c. Menambah Simpul (di Depan, Belakang dan Tengah). Menghapus Simpul (di Depan, Belakang dan Tengah). Membaca isi linked list (Membaca maju dan mundur).

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

16

Struktur umum Linked List dapat dilihat pada gambar 2.2 di bawah ini:

Info

next

NIL

Head

Tail

Gambar 3.2 Struktur Umum Linked List

3.5. Operasi Pada Linked List Ada tiga jenis operasi pada linked list, yaitu : 1. Menambah Simpul Menambah simpul pada linked list ada tiga macam yaitu menambah di depan, belakang dan tengah, tapi hanya penambahan yang umum dipakai saja oleh linked list yang akan dibahas yaitu penambahan simpul dibelakang. Selanjutnya penambahan yang lain akan dibahas pada pertemuan-pertemuan selanjutnya. Penambahan di belakang maksudnya menambahkan simpul-simpul baru pada posisi Tail. Gambar 2.3 ini merupakan ilustrasi penambahan simpul di belakang.
Head A B C

Tail D

Temp E a.

Head A Head A B C B C

Tail D

Temp E Temp D E c. b.

Tail

Gambar 3.3 Ilustrasi Penambahan Simpul di Posisi Tail

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

17

Berikut ini merupakan procedure Tambah simpul pada Pascal : Procedure Tambah(Var Head, Tail : PSimpul; Elemen : Char); Var Temp : PSimpul; Begin New(Temp); Temp^.Info := Elemen; If Head = NIL Then Head := Temp Else Tail^.Next := Temp; Tail := Temp; Tail^.Next := NIL; End; { Gambar 2.3.b. } { Gambar 2.3.c. } { Jika Linked List Masih Kosong }

2. Menghapus Simpul Operasi menghapus simpul juga ada tiga macam yaitu menghapus simpul di depan, belakang dan tengah. Untuk menghapus sebuah simpul diperlukan satu buah tambahan variabel pointer yaitu variabel bantu yang berguna untuk menunjukkan simpul manakah yang akan dihapus. Procedure Hapus selengkapnya adalah sebagai berikut :

Procedure Hapus(Var Head, Tail : PSimpul; Elemen : Char); Var Temp1, Temp2 : PSimpul; Begin If Head = NIL Then { Jika Linked List Masih Kosong } Writeln(Linked List Masih Kosong) Else If Head^.Info = Elemen Then } Begin Temp2:=Head; { Simpul Pertama dihapus

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

18

Head := Temp2^.Next; Dispose(Temp2); End Else {Menghapus simpul tengah / } Begin {Akhir }

Temp1 := Head { Memulai proses pencarian elemen yang akan dihapus } While (Elemen <> Temp1^.Info) And (Temp1^.Next <> NIL) Do Temp1 := Temp1^.Next; If Temp2 <> NIL Then Begin { Jika Simpul yang di cari ada di tengah } If Temp2 <> Tail Then Temp1^.Next := Temp2^.Next Else Begin Tail := Temp1; Tail^.Next := NIL; End; Dispose(Temp2); End Else { Simpul yang akan dihapus tidak ketemu } Writeln(Simpul Tidak di ketemukan !); End; End; { Jika simpul ketemu }

3. Membaca Isi Linked List Ada dua jenis untuk membaca isi linked list yaitu membaca maju dan membaca mundur.

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

19

a. Membaca Maju Membaca maju artinya membaca isi seranai beranai mulai posisi Head sampai ke posisi Tail. Berikut ilustrasi pembacaan isi simpul beserta prosedur pembacaannya :

Head A

Temp B C D

Tail E

Gambar 3.4 Ilustrasi Pembacaan dari Head ke Tail

Procedure Baca_Maju(Head : PSimpul); Var Temp : PSimpul; Begin Temp := Head; Repeat Write(Temp^.Info, ); Temp := Temp^.Next Until Temp <> NIL; End;

b. Membaca Mundur Membaca mundur artinya membaca isi seranai beranai mulai posisi Tail sampai ke posisi Head. Berikut ilustrasi pembacaan isi simpul beserta prosedur pembacaannya :
Head A B C D Tail E

Gambar 3.5 Ilustrasi pembacaan dari Tail ke Head

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

20

Procedure Baca_Mundur(Temp : PSimpul); Begin If Temp <> NIL Then Begin Baca_Mundur(Temp^.Next); Write(Temp^.Info, ); End; End;

Ada berbagai jenis linked list, contoh di atas merupakan seranai beranai tunggal (Single Linked List). Adapun jenis-jenis linked list antara lain adalah : 1. Single Linked List / Linked list satu arah (One Way List) Disebut demikian karena pada setiap simpul hanya memiliki satu buah field yang berhubungan dengan simpul berikutnya. Dalam pembuatan Single Linked List dapat menggunakan 2 metode, yaitu: LIFO (Last In First Out), aplikasinya : Stack (Tumpukan) LIFO adalah suatu metode pembuatan Linked List dimana data yang masuk paling akhir adalah data yang keluar paling awal. FIFO (First In First Out), aplikasinya : Queue (Antrian) LIFO adalah suatu metode pembuatan Linked List dimana data yang masuk paling awal adalah data yang keluar paling awal juga.

Linked list ini memiliki beberapa variasi lain diantaranya : a. Header Single Linked List : Jenis single linked list yang memiliki simpul tambahan pada awal simpul yang berguna untuk informasi tambahan. Contoh di bawah ini merupakan header single linked list yang pada simpul header-nya berisi informasi mengenai banyaknya simpul di dalam list.
Head B Tail 4 A C D

Gambar 3.6 Header Single Linked List

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

21

b. Circular Single Linked List : Jenis single linked list yang tidak pernah mempunyai tail atau tidak pernah NIL selalu berputar Head = Tail;
Head A B C D

Gambar 3.7 Circular Single Linked List

c. Header Circular Single Linked List : Jenis circular single linked list yang memiliki simpul tambahan di awal sebagai informasi tambahan. Contoh di bawah ini merupakan circular header single linked list yang pada simpul headernya berisi informasi mengenai banyaknya simpul di dalam list.
Head 4 A B C

Gambar 3.8 Header Circular Single Linked List

2. Double Linked List / Linked list dua arah (Two Way List) Linked List ini memiliki dua buah field yang digunakan untuk menunjuk ke simpul sebelumnya dan ke simpul sesudahnya. Banyak digunakan untuk mempermudah proses pencarian simpul dalam suatu seranai beranai. Linked list ini memiliki beberapa variasi lain diantaranya : a. Header Double Linked List : Jenis double linked list yang memiliki simpul tambahan pada awal simpul yang berguna untuk informasi tambahan. b. Circular Double Linked List : Jenis double linked list yang tidak pernah mempunyai tail atau tidak pernah NIL selalu berputar Head = Tail; c. Header Circular Double Linked List : Jenis circular double linked list yang memiliki simpul tambahan di awal sebagai informasi tambahan.

Modul Praktikum Struktur Data IT045329

Bab 3 Pointer dan Single Linked List_________

22

LAPORAN PENDAHULUAN 1. Jelaskan pengertian dari: a. Variabel Statis b. Variabel Dinamis c. Variabel Pointer. 2. Bagaimana cara pendefinisian Variabel Pointer & Variabel Dinamis. 3. Apa yang dimaksud dengan Head, Tail dan NIL. 4. Jelaskan mengenai operasi pada pointer. 5. Jenis-jenis Linked List dan operasi pada linked list.

LAPORAN AKHIR Buat Algoritma dan program sederhana dari Linked List.

Modul Praktikum Struktur Data IT045329