Anda di halaman 1dari 29

Program Studi Teknik Informatika

Universitas Muhammadiyah Gresik

08620212 - Struktur Data

Pointer & Linked List (Senarai Berantai)


DATA STRUCTURES LECTURE NOTES
Pointer
Pointer

DATA STRUCTURES LECTURE NOTES


 Tipe data yang digunakan untuk menyimpan ALAMAT
MEMORI (bukan data!).
 Pengalokasian bersifat dinamik : dapat dibangun atau
dihapus selama program berjalan (runtime).
Operasi-operasi terhadap variabel pointer

DATA STRUCTURES LECTURE NOTES


 Penugasan (Menyalin Alamat)
 pointvar1 := pointvar2;
 Penugasan (Menyalin isi ruang yang ditunjuk oleh alamat
pointer)
 pointvar1^ := pointvar2^;
 Perbandingan (operator logika)
 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.
Deklarasi pointer di pascal

DATA STRUCTURES LECTURE NOTES


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.
PROGRAM contohPointer;
Memori :
VAR
IntegerPointerku :^INTEGER; IntegerPointerku
9 (alamat) Integerku
500
50
Integerku : INTEGER;
BEGIN
IntegerPointerku
500
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...
Declaring a Pointer (C)

DATA STRUCTURES LECTURE NOTES


 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).
Pointers to Records

DATA STRUCTURES LECTURE NOTES


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
Masih ada pertanyaan tentang pointer ?
Linked List
Linked List

DATA STRUCTURES LECTURE NOTES


 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.
Deklarasi Linked List (Pascal)

DATA STRUCTURES LECTURE NOTES


TYPE
ListPointer = ^ListRecord;
ListRecord = RECORD
DataField :INTEGER;
NextField :ListPointer;
END;

VAR
FirstPointer, ToolPointer :ListPointer;
PROGRAM tambahsimpuldepan;
Memori :
......
VAR FirstPointer
17
9 (alamat)
(alamat)
Ø ToolPointer
17
9 (alamat)
(alamat)
FirstPointer, ToolPointer :ListPointer;
BEGIN
DataField
DataField
ToolPointer
= 100; NextField
= 100 =Ø
FirstPointer := NIL;
new(ToolPointer);
DataField
DataField=
ToolPointer
= 300; NextField
300 =9
WRITELN(“Masukkan Data Baru : ”);
READLN(ToolPointer^.DataField);
ToolPointer^.NextField := FirstPointer;
FirstPointer := ToolPointer;
new(ToolPointer);
WRITELN(“Masukkan Data Baru Lagi : ”);
READLN(ToolPointer^.DataField);
ToolPointer^.NextField := FirstPointer;
FirstPointer := ToolPointer; Layar Monitor :
END.
> Masukkan Data Baru : 100
> Masukkan Data Baru Lagi : 300
DATA STRUCTURES LECTURE NOTES
Bentuk-bentuk linked list
Singly-linked list

DATA STRUCTURES LECTURE NOTES


 Satu simpul/node memiliki sebuah variabel pointer yang
digunakan untuk menunjuk pada simpul/node berikutnya.
Doubly-linked list

DATA STRUCTURES LECTURE NOTES


 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.
Circular linked list

DATA STRUCTURES LECTURE NOTES


 Pointer pada simpul/node terakhir menunjuk pada
simpul/node pertama.
 Varian :
 Circular singly linked list.
 Circular doubly linked list.
Headed linked list

DATA STRUCTURES LECTURE NOTES


 Simpul pertama tidak diisi dengan data, tetapi
diisi dengan informasi yang berhubungan dengan
metadata linked list
Operasi-operasi terhadap linked list

DATA STRUCTURES LECTURE NOTES


 Menambah Simpul/Node Baru
 Menambah di depan.
 Menambah di tengah.
 Menambah di belakang.
 Menghapus Simpul/Node
 Menghapus di depan.
 Menghapus di tengah.
 Menghapus di belakang.
 Membaca isi simpul/node.
 Membaca maju
 Membaca mundur
DATA STRUCTURES LECTURE NOTES
Menambah (simpul) di depan
Menambah (simpul) di tengah

DATA STRUCTURES LECTURE NOTES


awal bantu baru
6 20 1

H Ø
49

F 20 G 49
1 I Ø

baru^.next := bantu^.next;
bantu^.next := baru;
Menambah (simpul) di belakang

DATA STRUCTURES LECTURE NOTES


awal bantu baru
6 20 1

F 20 G 1
Ø H Ø

baru^.next := NIL;
bantu^.next := baru;
Menghapus (simpul) di depan

DATA STRUCTURES LECTURE NOTES


awal bantu
20
6 Ø
20

F Ø
20 G 49 I Ø

bantu := awal^.next;
awal^.next := NIL;
awal := bantu;
bantu := NIL
Menghapus (simpul) di tengah

DATA STRUCTURES LECTURE NOTES


awal bantu baru
6 20 Ø

F 20 G 49
1 I Ø

baru^.next := bantu^.next;
bantu^.next := baru;
Menghapus (simpul) di belakang

DATA STRUCTURES LECTURE NOTES


awal bantu baru
6 20 1

H Ø
49

F 20 G 49
1 I Ø

baru^.next := bantu^.next;
bantu^.next := baru;
Membaca maju (linked list)

DATA STRUCTURES LECTURE NOTES


awal bantu
6 6 CEK !!
1
Ø

49 20

F 20 G 49 I 1 H Ø

bantu := awal;
while bantu <> NIL
begin
writeln (bantu^.data);
bantu := bantu^.next ;
end;
Struktur data yang dibangun dengan
Linked List

DATA STRUCTURES LECTURE NOTES


 Dynamic Hash Table.
 Struktur Pohon (Tree)
 Heap
 Lebih sering diimplementasikan dengan array
Linked Lists vs Arrays

DATA STRUCTURES LECTURE NOTES


Arrays Linked Lists
Memperbolehkan melakukan Hanya memperbolehkan pengaksesan secara
pengaksesan secara random sekuensial terhadap elemen
Tidak memerlukan ruang Memerlukan ruang penyimpanan ekstra
penyimpanan ekstra untuk untuk reference (penyimpan alamat memori)
menyimpan alamat memori
Tidak bisa dirubah ukuran alokasi Ukuran alokasi memori dapat diubah sesuai
memorinya  dengan kebutuhan
DATA STRUCTURES LECTURE NOTES
Pertanyaan ?

Anda mungkin juga menyukai