Anda di halaman 1dari 22

Doubly Linked List

wijanarto

1
Doubly Linked List
• Idenya sama dengan SLL, hanya terdapat field 
b
baru yaitu
it left dan
l ft d right sebagai
i ht b i penggantiti
pointer (next) addres. 

Singly Linked List 

L A B C D
X

Doubly Linked List 

L X A B C

2
Notasi
↑ : Dereferensi (*) atau output
↓ : R f
Referensi
i (&)
( )
← : Penugasan (=)
⇒ : Hasil Balik (return)
→ : Akses Field Dinamis
• : Akses Field Statis

3
Makro
Nil
define Nil NULL
info
define Info(P)(P)->info
define Left(P)(P)->kiri
define Right(P)(P)->kanan
define First(L)((L) first)
First(L)((L).first)
first

4
Struktur Data
Type Structure tElmtlist Is ↑address @

Type Structure tElmtlist


infotype info
address kiri kiri@ info kanan@
address kanan
Is Elmtlist

Type Structure tList List


address first; first@
Is List;

5
Manajemen Memori
Alokasi (infotype X) ⇒ address
address P; //berbasis referensi lokal
PÅ(address)malloc(sizeof(struct tElmList))
if (P≠Nil) then P@
Info(P)ÅX
Left(P)=Nil; info

Right(P)=Nil;
g ( ) ;
⇒ P
Nil
else ⇒ Nil

6
Manajemen Memori
Fungsi dan Prosedur manajemen memori mengacu
pada materi list linear dengan
p g pointer.
p

Dealokasi(address↑P)
free(↑P)
P@
Nil

7
Konstruktor
CreateList(List↑L)

First(↑L)ÅNil

first@

Nil

8
Predikat
ListEmpty(List L) ⇒ boolean
if (First(L)=Nil) then ⇒true
else ⇒false
L List Kosong
first@

L Nil

first@ List dengan 3 elemen

info info info

9
Predikat
ListOneElmt(List L) ⇒ boolean
if ((Right(First(L))=Nil)And
(Left(First(L))=Nil))
then ⇒true else ⇒false

first@

info

10
Modifikasi List
InsVFirst(List ↑L, intotype X)
address P; 1
X
if ListEmpty(↑L) then
1 PÅAlokasi(X) L
P@
2 First(↑L)Å P first@
else X

PÅAlokasi(X)
2
3 I
InsertFirst(↓(↑L),P)
tFi t(↓(↑L) P)
P@

11
Modifikasi List
3 InsertFirst(List ↑L, address P)
address tÅFirst(↑L)
if (ListEmpty(↑L)) then //kasus kosong
First(↑L)ÅP;
else //kasus isi
Right(P)ÅFirst(↑L); 1
Left(First(↑L))ÅP; 2
Fi t(↑L)ÅP
First(↑L)ÅP; 3
L first@ 1
3 info info info
P@
X 2

12
Modifikasi List
InsVLast(List ↑L, intotype X)
address P;
if ListEmpty(↑L) then
PÅAlokasi(X)
3 InsertFirst(&(*L),p);
else
PÅAlokasi(X)
if P≠Nil then
th
InsertLast(↓(↑L),P) 4

13
Modifikasi List
4 InsertLast(List ↑L, address P)
address Last;
if (ListEmpty(↑L)) then //Kasus Kosong
First(↑L)ÅP
else LastÅFirst(↑L); 1
while(Right(Last)≠Nil)
2
LastÅRight(Last);
InsertAfter(↓(↑L),P,Last); 5
Last Last
1 2

L first@
info info info

14
Modifikasi List
5 InsertAfter(List ↑L, address P,address Prec)
if (Right(Prec)
(Right(Prec)=Nil)then
Nil)then //Prec di akhir
a Left(P)ÅPrec 2
Right(Prec) Å P b
else //Prec di tengah
1 Left(Right(Prec))ÅP
2 Right(P)ÅRight(Prec) P@
3 Ri ht(P
Right(Prec)ÅP
)ÅP P@ Prec
4 Left(P)ÅPrec X
L X
Prec
1 a
4 3 2
first@ b
info info info

15
Modifikasi List
DelVFirst(List ↑L, infotype ↑X)
address PÅFirst(↑L);
↑XÅInfo(P)
DelFirst(↑L,P) 6

16
Modifikasi List
L first@

6 DelFirst(List ↑L, address ↑P)


address t=First(*L); info
if (IsOneElmt(*L))then
Right(*P)=Nil; L first@
1
Left(*P)=Nil; 2 Nil
info
1
2 First(*L)=Nil; P@
Dealokasi(&(*P));
else
g
First(*L)=Right(First(*L));
a
Left(First(*L))=Nil; L
first@
b Right(*P)=Nil; a
c Left(*P)=Nil; d P
d Dealokasi(&(*P)); c
L first@ info info info

17
Modifikasi List
DelVLast(List ↑L,infotype ↑X){
address p;
pÅFirst(↑L);
↑XÅInfo(p);
7 DelLast(↓(↑L),↓p);

18
Modifikasi List
7 DelLast(List ↑L,address ↑P)
address precÅFirst(↑L); 1
if (IsOneElmt(↑L))then DelFirst(↓(↑L),↓(↑P)) 6
else
while(Right(Right(prec))≠Nil)
2 precÅRight(prec)
DelAfter(↓(↑L),(↑P),prec) 8

prec prec
L 1 2

first@
info info info

19
Modifikasi List
8 DelAfter(List ↑L,address ↑Pdel,address Prec))
(↑Pdel)ÅRight(Prec) 1
Right(Prec)ÅNil 2
Right(↑Pdel)ÅNil 3

Left(↑Pdel)ÅNil 4
Dealokasi(↓(↑Pdel)) 5

Prec Pdel
L 1
5
first@ 4 3
info info 2 info

20
Traversal 1
PrintLR(List L)
address p;
if (ListEmpty(L)) then Output("List Kosong\n")
else if(IsOneElmt((L))) then
Output("[%d]\n",Info(First(L)))
else
p=First(L);
Output("[");
while(Right(p) ≠ Nil)
Output("%d",Info(p))
p=Right(p)
if (Right(p)=Nil) then
Output(",%d",Info(p))
break
else Output(",")
Output("]\n")

21
Traversal 2
PrintRL(List L)
address p;
if (ListEmpty(L)) then Output("List Kosong\n")
else if(IsOneElmt((L))) then
Output("[%d]\n",Info(First(L)))
else
p=First(L);Output("[");
while(Right(p) ≠ Nil) p=Right(p);
while(Left(p) ≠ Nil)
Output("%d",Info(p))
p=Left(p)
if (Left(p)=Nil) then
Output(",%d",Info(p))
break
else Output(",")
Output("]\n")

22

Anda mungkin juga menyukai