Download - T910 List LinierDouble Linkedlist
-
8/18/2019 T910 List LinierDouble Linkedlist
1/72
List Linear :
Linked List (Double
Linkedlist)
Teknik Informatika
Universitas Muhammadiyah Malang20
PemrogrammanTerstruktur
-
8/18/2019 T910 List LinierDouble Linkedlist
2/72
Tu!uan Instruksional
• Mahasis"a mam#u :
– Memahami struktur data linked list
– Memahami $ara #engo#erasian strukturdata linked list
– Mengim#lementasikan struktur datalinked list
-
8/18/2019 T910 List LinierDouble Linkedlist
3/72
-
8/18/2019 T910 List LinierDouble Linkedlist
4/72
Double Linked List
• Double : artinya *eld #ointer+nya dua buahdan dua arah, yang menun!uk ke nodesebelum dan sesudahnya-
• %erguna bila #erlu melakukan #emba$aanlinkedlist dari dua arah-
• Double linked list memiliki 2 buah #ointeryaitu #ointer next dan prev-
• 'ointer ne.t : mengarah ke node belakang(tail)-
• 'ointer #rev : mengarah ke node de#an(head)-
-
8/18/2019 T910 List LinierDouble Linkedlist
5/72
Ilustrasi /ode Double1
• etika masih ada satu node maka kedua #ointer(ne.t dan #rev) akan menun!uk ke /ULL)
•Double linked list da#at diakses dari dua arah :- Dari de#an ke belakang (head ke tail)
2- Dari belakang ke de#an (tail ke head)
prev
DATA next
-
8/18/2019 T910 List LinierDouble Linkedlist
6/72
Double Linked List
• etika double linked list memiliki banyaknode maka node yang #aling de#an#ointer #rev+nya menun!uk ke /ULL-
3edangkan node yang #aling belakang#ointer ne.t+nya yang menun!uk ke /ULL-
a b c d e
null
firstNode
null
lastNode
-
8/18/2019 T910 List LinierDouble Linkedlist
7/72
'ointer &ead dan Tail
• 3ama se#erti single linked list, #adadouble linked dibutuhkan #ointer bantuyaitu head dan tail-
• &ead : menun!uk #ada node yang #alingde#an-
• Tail : menun!uk #ada node yang #alingbelakang-
-
8/18/2019 T910 List LinierDouble Linkedlist
8/72
Double Linked List
• 4ontoh ilustrasi double linked listyang memiliki node :
previous
next
-
8/18/2019 T910 List LinierDouble Linkedlist
9/72
Double1 5e#resentation
'en!elasan:
• 'embuatan $lass bernama /ode2', yang berisivariabel data berti#e 6b!e$t dan 2 variabel #ointerberti#e /ode2' yaitu : ne.t dan #rev-
• Field data : digunakan untuk menyim#an data7nilai#ada linked list- Field pointer : digunakan untukmenyim#an alamat node berikutnya-
$lass /ode2'8
int data9 77 data/ode2' ne.t9 77 #ointer ne.t/ode2' #rev9 77 #ointer #rev
Ilustrasi :
next
data
prev
-
8/18/2019 T910 List LinierDouble Linkedlist
10/72
4lass /ode
#ubli$ $lass /ode2' 8 int data9 /ode2' ne.t9 /ode2' #revious9
/ode2'() 8
/ode2'(int theData) 8 data ; theData9
/ode2'(int theData, /ode2' the'revious, /ode2'
the/e.t) 8 data; theData9 #rev ; the'revious9 ne.t ; the/e.t9
Constructor 1
Constructor 2
Constructor 3
null
null
null
null
data
null
next
data
prev
-
8/18/2019 T910 List LinierDouble Linkedlist
11/72
-
8/18/2019 T910 List LinierDouble Linkedlist
12/72
6#erasi Linked List
- inisialisasi
2- ise- 'enambahan
?- 'engha#usan
@- 'enyisi#anA- 'en$arian
B- 'engaksesan
-
8/18/2019 T910 List LinierDouble Linkedlist
13/72
=
() Inisialisasi "al 'ointer &ead C Tail
/ode2' head ; null9/ode2' tail; null9
head tailNULL
-
8/18/2019 T910 List LinierDouble Linkedlist
14/72
(2)ise ; 0 atau !ika head;tail;null-
boolean ise;;09
-
8/18/2019 T910 List LinierDouble Linkedlist
15/72
(=) si>e
• Digunakan untuk mengetahui banyaknode #ada linked list-
• 3i>e akan bertambah setia# adanode baru yang ditambahkan #adalinked list-
• 3i>e akan berkurang setia# ada#engha#usan node- int sie!"
#
return sie$
%
-
8/18/2019 T910 List LinierDouble Linkedlist
16/72
() 'enambahan
• Dibedakan men!adi :
-'enambahan dari de#an
2-'enambahan dari belakang=-'enambahan setelah node tertentu
-'enambahan sebelum node tertentu
-
8/18/2019 T910 List LinierDouble Linkedlist
17/72
Membentuk 3im#ul "al
• ika kondisi a"al linked list kosong, makahead dan tail sama+sama menun!uk nodebaru-
• head ; tail; %aru
A
-
8/18/2019 T910 List LinierDouble Linkedlist
18/72
'enambahan dari De#an
• ika linked list terda#at node, maka :
– 'enambahan node baru diletakkan dide#an node yang ditun!uk oleh head-
– 'ointer #rev dari node de#an diarahkanke node baru-
– Ter!adi #ergeseran #ointer head kearah
node baru-
-
8/18/2019 T910 List LinierDouble Linkedlist
19/72
'enambahan dari De#an
void addEirst(/ode2' in#ut)8 if (iseFF9
-
8/18/2019 T910 List LinierDouble Linkedlist
20/72
20
Insert Eirst
- %aru-ne.t ; head
-
8/18/2019 T910 List LinierDouble Linkedlist
21/72
-
8/18/2019 T910 List LinierDouble Linkedlist
22/72
22
Insert Eirst
=- head ; baru
-
8/18/2019 T910 List LinierDouble Linkedlist
23/72
'enambahan dari %elakang
• ika linked list terda#at node, maka :
– 'enambahan node baru diletakkan dibelakang node yang ditun!uk oleh tail-
– 'ointer ne.t dari node belakangdiarahkan ke node baru-
– Ter!adi #ergeseran #ointer tail kearah
node baru-
-
8/18/2019 T910 List LinierDouble Linkedlist
24/72
'enambahan dari %elakang
void addLast(/ode2' in#ut)8 if (iseFF9
-
8/18/2019 T910 List LinierDouble Linkedlist
25/72
2?
Insert Last
ondisi a"al linked list :
Terda#at 2 node
-
8/18/2019 T910 List LinierDouble Linkedlist
26/72
2@
Insert Last
- %aru-#rev ; tail
-
8/18/2019 T910 List LinierDouble Linkedlist
27/72
2A
Insert Last
2- tail-ne.t ; %aru
-
8/18/2019 T910 List LinierDouble Linkedlist
28/72
2B
Insert Last
=- tail; %aru
-
8/18/2019 T910 List LinierDouble Linkedlist
29/72
'enambahan 3etelah /ode.
• 'enambahan node baru dilakukandibelakang node . (node tertentu)-
• /ode . adalah node yang memilikidata yang sama dengan key-
• ika tidak ditemukan node yangdimaksud maka #enambahan tidakter!adi-
-
8/18/2019 T910 List LinierDouble Linkedlist
30/72
'enambahan setelah /ode .
void insertfter(6b!e$t key,/ode2' in#ut)8 /ode2' tem# ; head9 do8 if(tem#-data;;key)8
in#ut-#revious ; tem#9 in#ut-ne.t ; tem#-ne.t9 tem#-ne.t-#revious ; in#ut9 tem#-ne.t ; in#ut9 si>eFF9 3ystem-out-#rintln(GInsert data issu$$eed-G)9 break9 tem# ; tem#-ne.t9 "hile (tem#H;null)9
-
8/18/2019 T910 List LinierDouble Linkedlist
31/72
Insert fter /ode .
ondisi a"al linked list :
Terda#at = node #ada linked listmisalkan key ; 0
-
8/18/2019 T910 List LinierDouble Linkedlist
32/72
Insert fter /ode .Dibutuhkan #ointer bantu untuk men$ari node .- Misalkan #ointer bantu tersebut adalah after-
- /ode after ; head9
'ointer after akan bergeser men$ari node yang sesuai-
-
8/18/2019 T910 List LinierDouble Linkedlist
33/72
Insert fter /ode .
2- %aru-#rev ; after
-
8/18/2019 T910 List LinierDouble Linkedlist
34/72
=
Insert fter /ode .
=- %aru-ne.t ; after-ne.t
-
8/18/2019 T910 List LinierDouble Linkedlist
35/72
=?
Insert fter /ode .
- after-ne.t-#rev ; %aru
-
8/18/2019 T910 List LinierDouble Linkedlist
36/72
=@
Insert fter /ode .
?- after-ne.t ; %aru
-
8/18/2019 T910 List LinierDouble Linkedlist
37/72
=A
Insert fter /ode .
&asil akhir :
-
8/18/2019 T910 List LinierDouble Linkedlist
38/72
'enambahan 3ebelum /ode.
• 'enambahan node baru dilakukandide#an node . (node tertentu)-
• /ode . adalah node yang memilikidata yang sama dengan key-
• ika tidak ditemukan node yangdimaksud maka #enambahan tidakter!adi-
' b h b l / d
-
8/18/2019 T910 List LinierDouble Linkedlist
39/72
'enambahan sebelum /odetertentu
void insert%efore(6b!e$t key,/ode2' in#ut)8
/ode2' tem# ; head9 "hile (tem# H; null)8 if (tem#-data ;; key) 8 if(tem# ;; head) 8 this-addEirst(in#ut)9 3ystem-out-#rintln(GInsert data is su$$eed-G)9 si>eFF9 break9 else 8 in#ut-#revious ; tem#-#revious9 in#ut-ne.t ; tem#9
tem#-#revious-ne.t ; in#ut9 tem#-#revious ; in#ut9 3ystem-out-#rintln(GInsert data is su$$eed-G)9 si>eFF9 break9 tem# ; tem#-ne.t9
-
8/18/2019 T910 List LinierDouble Linkedlist
40/72
0
Insert %efore /ode .
ondisi a"al linked list :
Terda#at node #ada linked listmisalkan key ; ?
-
8/18/2019 T910 List LinierDouble Linkedlist
41/72
Insert %efore /ode .
- /ode before ; head9
#ointer before men$ari node yangsesuai-
-
8/18/2019 T910 List LinierDouble Linkedlist
42/72
2
Insert %efore /ode .
2- %aru-#rev ; before-#rev
-
8/18/2019 T910 List LinierDouble Linkedlist
43/72
=
Insert %efore /ode .
=- %aru-ne.t ; before
-
8/18/2019 T910 List LinierDouble Linkedlist
44/72
Insert %efore /ode .
- before-#rev-ne.t ; %aru
-
8/18/2019 T910 List LinierDouble Linkedlist
45/72
?
Insert %efore /ode .
?- before-#rev ; %aru
-
8/18/2019 T910 List LinierDouble Linkedlist
46/72
-
8/18/2019 T910 List LinierDouble Linkedlist
47/72
(?) 'engha#usan
• Dibedakan men!adi :
-&a#us node de#an
2-&a#us node belakang=-&a#us node tertentu
-
8/18/2019 T910 List LinierDouble Linkedlist
48/72
-
8/18/2019 T910 List LinierDouble Linkedlist
49/72
&a#us /ode De#an
• 'engha#usan dilakukan #ada node#aling de#an, yaitu node yangditun!uk oleh head-
• Ter!adi #ergeseran head ke belakang-
-
8/18/2019 T910 List LinierDouble Linkedlist
50/72
&a#us node de#an
void removeEirst()8/ode2' tem# ; head9
if (Hise++9
else 3ystem-out-#rintln(GData is em#tyHG)9
-
8/18/2019 T910 List LinierDouble Linkedlist
51/72
?
Delete Eirst
kondisi a"al linked list:
Terdiri dari ? node
-
8/18/2019 T910 List LinierDouble Linkedlist
52/72
?2
Delete Eirst
- /ode ha#us ; head9
-
8/18/2019 T910 List LinierDouble Linkedlist
53/72
?=
Delete Eirst
2- head-ne.t-#rev ; null
-
8/18/2019 T910 List LinierDouble Linkedlist
54/72
?
Delete Eirst
=- head ; ha#us-ne.t
-
8/18/2019 T910 List LinierDouble Linkedlist
55/72
Delete Eirst
??
Node & sudah terhapus
-
8/18/2019 T910 List LinierDouble Linkedlist
56/72
?@
Delete Eirst
&asil akhir :
-
8/18/2019 T910 List LinierDouble Linkedlist
57/72
&a#us /ode %elakang
• 'engha#usan dilakukan #ada node#aling belakang, yaitu node yangditun!uk oleh tail-
• Ter!adi #ergeseran tail ke de#an-
-
8/18/2019 T910 List LinierDouble Linkedlist
58/72
&a#us node belakang
void removeLast()8 /ode2' tem# ; tail9 if (Hise++9
else 3ystem-out-#rintln(GData isem#tyHG)9
-
8/18/2019 T910 List LinierDouble Linkedlist
59/72
?
Delete Last
ondisi a"al linked list :
Linked list terdiri dari node
-
8/18/2019 T910 List LinierDouble Linkedlist
60/72
@0
Delete Last
- /ode ha#us;tail9
-
8/18/2019 T910 List LinierDouble Linkedlist
61/72
-
8/18/2019 T910 List LinierDouble Linkedlist
62/72
@2
Delete Last
=- tail; ha#us-#rev
-
8/18/2019 T910 List LinierDouble Linkedlist
63/72
@=
Delete Last
Node ' sudah terhapus
-
8/18/2019 T910 List LinierDouble Linkedlist
64/72
@
Delete Last
&asil akhir :
-
8/18/2019 T910 List LinierDouble Linkedlist
65/72
&a#us /ode .
• 'engha#usan dilakukan #ada node .(node tertentu)-
• /ode . adalah node yang memiliki
data sama dengan key-
• ika tidak ditemukan node yangsesuai maka #engha#usan tidak
da#at dilakukan-
& d t t t
-
8/18/2019 T910 List LinierDouble Linkedlist
66/72
&a#us node tertentuvoid remove(6b!e$t key)8 /ode2' tem# ; head9 if (His
-
8/18/2019 T910 List LinierDouble Linkedlist
67/72
-
8/18/2019 T910 List LinierDouble Linkedlist
68/72
@B
Delete /ode .
- /ode ha#us;head9ha#us adalah #ointer bantu yang akanmen$ari node yang dimaksud (node .)-
-
8/18/2019 T910 List LinierDouble Linkedlist
69/72
@
Delete /ode .
2- ha#us-#rev-ne.t ; ha#us-ne.t9
-
8/18/2019 T910 List LinierDouble Linkedlist
70/72
A0
Delete /ode .
=- ha#us-ne.t-#rev ; ha#us-#rev9
-
8/18/2019 T910 List LinierDouble Linkedlist
71/72
A
Delete /ode .
Node 3 sudah terhapus
-
8/18/2019 T910 List LinierDouble Linkedlist
72/72
3umber
• rna Eari>a, lgoritma 3trukturData : Double Linked List1, '