Program Studi Teknik Informatika

Universitas Muhammadiyah Gresik

08620212 - Struktur Data
Pointer & Linked List (Senarai Berantai)

DATA STRUCTURES LECTURE NOTES

Pointer


Tipe data yang digunakan untuk menyimpan
ALAMAT MEMORI (bukan data!).
Pengalokasian bersifat dinamik : dapat
dibangun atau dihapus selama program
berjalan (runtime).

DATA STRUCTURES LECTURE NOTES

Pointer

Penugasan (Menyalin Alamat)

Penugasan (Menyalin isi ruang yang ditunjuk oleh
alamat pointer)

pointvar1^ := pointvar2^;

Perbandingan (operator logika)

pointvar1 := pointvar2;

Yang dapat digunakan hanya “=“ atau “<>”.

Menghapus pointer

Jika ruang yang ditunjuk oleh variabel pointer sudah tidak
diperlukan lagi, maka isi variabel pointer yang digunakan
sebaiknya dihapus untuk menghemat memori.
Tetapi, perlu berhati-hati. Karena jika sudah terlanjur
dihapus dan ternyata isi ruang yang ditunjuk oleh variabel
pointer masih digunakan, maka akan timbul dangling
pointer.
Fungsi yang digunakan –dalam pascal– adalah dispose.

DATA STRUCTURES LECTURE NOTES

Operasi-operasi terhadap variabel pointer

PROGRAM PointerExample(OUTPUT);
VAR
MyIntegerPointer :^INTEGER;
MyInteger :INTEGER;
BEGIN
MyInteger := 50;
new(MyIntegerPointer);
{mengalokasikan ruang untuk variabel
pointer}
MyIntegerPointer^ := 500; {mengisi nilai untuk ruang yang
ditunjuk variabel pointer}
MyInteger := MyIntegerPointer^; { ??? }
WRITELN('The value of MyInteger is: ', MyInteger);
WRITELN('The value pointed to by MyIntegerPointer is: '
, MyIntegerPointer^);
dispose(MyIntegerPointer); {mendealokasikan ruang untuk
variabel pointer}
WRITELN('Press any key to continue...');
READLN;
END.

DATA STRUCTURES LECTURE NOTES

Deklarasi pointer di pascal

PROGRAM contohPointer;
VAR
IntegerPointerku :^INTEGER;
Integerku : INTEGER;
BEGIN
Integerku := 50;
new(IntegerPointerku);
IntegerPointerku^ := 500;
Integerku := IntegerPointerku^;
WRITELN(‘Integerku = ', Integerku);
WRITELN(‘IntegerPointerku = '
, IntegerPointerku^);
dispose(IntegerPointerku);
WRITELN(‘Tekan ENTER untuk keluar...');
READLN;
END.

Layar Monitor :
> Integerku = 500
> IntegerPointerku = 500
> Tekan ENTER untuk keluar...

Memori :
IntegerPointer
9 (alamat)
ku
IntegerPointer
500
ku

Integerku
500
50

 char


*ptGrade;

Data type : The data type of the memory
address stored in the pointer.
Asterisk (*) : Tells the computer that you are
declaring a pointer.
Variable name : The name that uniquely
identifies the pointer and is used to reference
the pointer within your program.
Semicolon (;) : Tells the computer this is an
instruction (statement).

DATA STRUCTURES LECTURE NOTES

Declaring a Pointer (C)

PROGRAM PointersToRecords(OUTPUT);
TYPE
emprec = RECORD
ID:INTEGER;
Wage: REAL;
END;
empptr = ^emprec;
VAR
ptr1, ptr2 : empptr;
BEGIN
NEW(ptr1);
NEW(ptr2);
ptr1^.ID := 123;
ptr1^.Wage := 25.5;
ptr2^.ID := 456;
ptr2^.Wage := 33.25;
………….

DATA STRUCTURES LECTURE NOTES

Pointers to Records

DATA STRUCTURES LECTURE NOTES

Masih ada pertanyaan tentang
pointer ?

Linked List

Salah satu bentuk struktur data fundamental.


Dapat digunakan untuk membentuk struktur data yang lebih
kompleks.

Serangkaian simpul/node yang berisi data dan saling terkait.
Memanfaatkan kombinasi dari tipe data pointer dan tipe data
record/structure (pointer to records).
Setara dengan array of record, tetapi dengan kelebihan :

Alokasi memori lebih fleksibel (dinamis), karena :

Tidak perlu memindah-mindahkan data.
Tidak perlu menempatkan data secara berurut dalam ruang memori.

DATA STRUCTURES LECTURE NOTES

Linked List

TYPE
ListPointer = ^ListRecord;
ListRecord = RECORD
DataField :INTEGER;
NextField :ListPointer;
END;
VAR
FirstPointer, ToolPointer :ListPointer;

DATA STRUCTURES LECTURE NOTES

Deklarasi Linked List (Pascal)

PROGRAM tambahsimpuldepan;
......
VAR

Memori :
FirstPointer
17
9 (alamat)
(alamat)
Ø

17
ToolPointer
9 (alamat)
(alamat)

FirstPointer, ToolPointer :ListPointer;
BEGIN

DataField
DataField
ToolPointer
= 100; NextField
= 100

FirstPointer := NIL;
new(ToolPointer);
WRITELN(“Masukkan Data Baru : ”);

DataField
DataField=
ToolPointer
= 300; NextField
300
=9

READLN(ToolPointer^.DataField);
ToolPointer^.NextField := FirstPointer;
FirstPointer := ToolPointer;
new(ToolPointer);
WRITELN(“Masukkan Data Baru Lagi : ”);
READLN(ToolPointer^.DataField);
ToolPointer^.NextField := FirstPointer;
FirstPointer := ToolPointer;
END.

Layar Monitor
:
> Masukkan Data Baru : 100
> Masukkan Data Baru Lagi : 300

DATA STRUCTURES LECTURE NOTES

Bentuk-bentuk linked list

Satu simpul/node memiliki sebuah variabel
pointer yang digunakan untuk menunjuk pada
simpul/node berikutnya.

DATA STRUCTURES LECTURE NOTES

Singly-linked list

Satu simpul/node menyimpan dua variabel bertipe
pointer.

Satu pointer menunjuk ke simpul/node berikutnya.
Pointer yang lain menunjuk ke simpul/node sebelumnya.

Varian : Multiply-Linked List

Jumlah variabel pointer yang dimiliki masing-masing
simpul lebih dari dua.

DATA STRUCTURES LECTURE NOTES

Doubly-linked list


Pointer pada simpul/node terakhir menunjuk
pada simpul/node pertama.
Varian :

Circular singly linked list.
Circular doubly linked list.

DATA STRUCTURES LECTURE NOTES

Circular linked list

Simpul pertama tidak diisi dengan
data, tetapi diisi dengan informasi
yang berhubungan dengan metadata
linked list

DATA STRUCTURES LECTURE NOTES

Headed linked list

Menambah Simpul/Node Baru


Menghapus Simpul/Node


Menambah di depan.
Menambah di tengah.
Menambah di belakang.
Menghapus di depan.
Menghapus di tengah.
Menghapus di belakang.

Membaca isi simpul/node.

Membaca maju
Membaca mundur

DATA STRUCTURES LECTURE NOTES

Operasi-operasi terhadap linked list

DATA STRUCTURES LECTURE NOTES

Menambah (simpul) di depan

awal

bantu

baru

6

20

1

F

20

G

49
1

baru^.next := bantu^.next;
bantu^.next := baru;

H

49
Ø

I

Ø

DATA STRUCTURES LECTURE NOTES

Menambah (simpul) di tengah

awal

bantu

baru

6

20

1

F

20

G

baru^.next := NIL;
bantu^.next := baru;

Ø
1

H

Ø

DATA STRUCTURES LECTURE NOTES

Menambah (simpul) di belakang

awal

bantu

20
6

20
Ø

F

20
Ø

G

bantu := awal^.next;
awal^.next := NIL;
awal := bantu;
bantu := NIL

49

I

Ø

DATA STRUCTURES LECTURE NOTES

Menghapus (simpul) di depan

awal

bantu

baru

6

20

Ø

F

20

G

49
1

baru^.next := bantu^.next;
bantu^.next := baru;

I

Ø

DATA STRUCTURES LECTURE NOTES

Menghapus (simpul) di tengah

awal

bantu

baru

6

20

1

F

20

G

49
1

baru^.next := bantu^.next;
bantu^.next := baru;

H

49
Ø

I

Ø

DATA STRUCTURES LECTURE NOTES

Menghapus (simpul) di belakang

awal

bantu

6

6

CEK !!
1

Ø
49

F

20

20

G

49

bantu := awal;
while bantu <> NIL
begin
writeln (bantu^.data);
bantu := bantu^.next ;
end;

I

1

H

Ø

DATA STRUCTURES LECTURE NOTES

Membaca maju (linked list)



Dynamic Hash Table.
Struktur Pohon (Tree)
Heap

Lebih sering diimplementasikan dengan array

DATA STRUCTURES LECTURE NOTES

Struktur data yang dibangun dengan
Linked List

Arrays

Linked Lists

Memperbolehkan melakukan Hanya memperbolehkan
pengaksesan secara random pengaksesan secara sekuensial
terhadap elemen
Tidak memerlukan ruang
penyimpanan ekstra untuk
menyimpan alamat memori

Memerlukan ruang penyimpanan
ekstra untuk reference (penyimpan
alamat memori)

Tidak bisa dirubah ukuran
alokasi memorinya 

Ukuran alokasi memori dapat diubah
sesuai dengan kebutuhan

DATA STRUCTURES LECTURE NOTES

Linked Lists vs Arrays

DATA STRUCTURES LECTURE NOTES

Pertanyaan ?

Sign up to vote on this title
UsefulNot useful