Vous êtes sur la page 1sur 22

Implementasi Struktur Data Dinamis :

Operasi pada Linked List

Mata Kuliah :
ITF202, Algoritma Struktur Data
Dosen : Winarno Sugeng
Cek List Kosong/Isi

P P P P

Nil
Head (Pointer Awal) Tail (Pointer Akhir)

 Indikator List Kosong  Head To Nil

HEAD = NIL
Cek List Kosong/Isi (lanjutan)

 Contoh Fungsi dalam Pascal :


Function Kosong(VAR head: Simpul):Boolean;
begin
if head=NIL then
Kosong := true
Else
Kosong := false;
end;
Hitung Panjang List

P P1 P2 Pn

Intinya menghitung banyaknya data


 Dari head ( Head  Tail )

 Dari Pointer tertentu


Hitung Panjang List (lanjutan)
Contoh Fungsi dalam Pascal dengan Rekursif :

Function Panjang(VAR P: Simpul):byte;


begin
If P=Nil then
Panjang := 0
Else
Panjang := 1 + Panjang(Awal^.Berikut);
end;
Hitung Panjang List (lanjutan)
Contoh Fugsi dalam Pascal dengan tanpa Rekursif :

Function Panjang(VAR P: Simpul):byte;


begin
L:=0;
While P<>Nil do
begin
L:=L+1;
P:=P^.berikut;
end;
panjang := l;
end;
Menambah Data List

1. Belakang
2. Depan
3. Tengah ( harus ada penentuan dengan
Pencarian )
Ilustrasi untuk Tambah Data
Awal
Belakang Akhir Baru

A B C D E

Nil
(a)
Awal Akhir Baru

A B C D E

Nil
(b)
Awal Akhir Baru

A B C D E

Nil
(c)
Procedure Tambah_Belakang(VAR Awal: simpul);
var
Akhir,
Baru : simpul;
Jawaban : Char;
begin
ClrScr;
Repeat
NEW(Baru); { (a) }
Write('Karakter : '); ReadLn(Baru^.Info);
if Awal = nil then { Linked List masih Kosong }
Awal := Baru
else
Akhir^.Berikut := Baru; { ( b ) }
Akhir := Baru; { ( c ) }
Akhir^.Berikut := nil;
Write('Masukkan data lagi (Y/T)? ');
Repeat
Jawaban := UpCase(ReadKey)
Until Jawaban IN ['Y','y','T','t'];
WriteLn(Jawaban)
Until UpCase(Jawaban) ='T'
end;
Ilustrasi untuk Tambah Data Depan
Baru Awal Akhir

A B C D E

Nil
(a)
Baru Awal Akhir

A B C D E

Nil
(b)
Baru Awal Akhir

A B C D E

Nil
(c)
Procedure Tambah_Depan(VAR Awal: simpul);
var
Akhir,
Baru : simpul;
Jawaban : Char;
begin
ClrScr;
Repeat
NEW(Baru); { (a) }
Write('Karakter : '); ReadLn(Baru^.Info);
if Awal = nil then { Linked List masih Kosong }
Akhir := Baru
else
Baru^.Berikut := Awal; { ( b ) }
Awal := Baru; { (c) }
Write('Masukkan data lagi (Y/T)? ');
Repeat
Jawaban := UpCase(ReadKey)
Until Jawaban IN ['Y','y','T','t'];
WriteLn(Jawaban)
Until UpCase(Jawaban) ='T'
end;
Menghapus Data List

1. Depan
2. Belakang
3. Tengah ( harus ada penentuan dengan
Pencarian )
Ilustrasi Hapus Depan : ( hapus B )
Awal

A B C D E

Awal (a)

A B C D E

Awal Nil (b)

A B C D E

(c)
Procedure Hapus_Depan(VAR Awal: Simpul);
var
Bantu : Simpul;
begin
Bantu := Awal;
If Not (Kosong(Bantu)=True) then
begin
Awal:=Awal^.Berikut; { ( b ) }
Bantu^.Berikut:=nil; { ( c ) }
Dispose(Bantu);
end;
end;
Ilustrasi Hapus Belakang : ( hapus D )
Awal

A B C D E

Procedure Hapus_Belakang(VAR Awal: Simpul);


var
Bantu : Simpul;
begin
Bantu := Awal;
If Not (Kosong(Bantu)=True) then
begin
While Bantu^.Berikut<>nil do
Bantu:=Bantu^.Berikut;
Dispose(Bantu);
end;
Procedure Hapus_Belakang(VAR Awal: Simpul);
var
Bantu : Simpul;
begin
Bantu := Awal;
If Not (Kosong(Bantu)=True) then
begin
While Bantu^.Berikut<>nil do
Bantu:=Bantu^.Berikut;
Dispose(Bantu);
end;
Ilustrasi Hapus Tengah : ( hapus C )

 Cari / tentukan Pointer Penentu : ( B )


Awal penentu

A B C D E

Awal penentu Nil

A B C D E

Nil

Awal penentu C

A B D E
FlowChart Hapus Tengah
P1<- Head
P2 <- P1^.next

Ya Tidak
P1^.data=X

HAPUS Ya Tidak
DEPAN P2=NIL

Ya Tidak
P2^.data=X

SELESAI

P1^.next <- P2^.next


P1 <- P1^.next
P2^.next <- NIL
P2 <- P2^.next
Dispose(P2)
Baca Data List

1. Maju
2. Mundur

Awal Bantu

A B C D E
Procedure Baca_Maju(Awal: Simpul);
var
Bantu : Simpul;
begin
Bantu := Awal;
If Not (Kosong(Bantu)=True) then
begin
Repeat
begin
Write(Bantu^.Info);
Bantu := Bantu^.Berikut
end;
Until Bantu = nil;
end
end;
Tugas

 Buatlah fungsi untuk pencarian pointer Penentu


guna operasi delete atau edit pointer pada linked
list
Lanjut ke materi Tree
(Struktur Pohon)

Jurusan Teknik Informatika


INSTITUT TEKNOLOGI NASIONAL
BANDUNG – JAWA BARAT - INDONESIA

Vous aimerez peut-être aussi