presentasi struktur data
TRANSCRIPT
-
8/17/2019 Presentasi Struktur Data
1/173
Linked List
-
8/17/2019 Presentasi Struktur Data
2/173
Malloc
• Memory Allocation (malloc) adalahsebuah fungsi fasilitas untukmemesan tempat secara berurutan
untuk tipe data dinamis(pointer)• Nilai balik dari memory allocation
adalah void *
-
8/17/2019 Presentasi Struktur Data
3/173
Problem
• Bagaimana ika kita pesan !""""alamat berurutan# – Akan selalu gagal$
– %ntuk itu kita lakukan memory allocationuntuk setiap satu data$
• Bagaimana agar data pertama tetapberhubungan dengan data kedua#
– &ita gunakan pointer untukmenghubungkan
-
8/17/2019 Presentasi Struktur Data
4/173
'he Linked List data struktur
[0] [1] [2]array
A B CArray
linked
A B CLinked list
Linked lists terbatas
(Jumlah maksimum item hanya dibatasi oleh memori)
node
-
8/17/2019 Presentasi Struktur Data
5/173
Array vs Linked List
Array : int A[3] Linked List : struct list *A;
A[2] A[1]
A[0]
A(data 3)
A(data 2)
A(data 1)
Linked lists terbatas
(Jumlah maksimum item hanya dibatasi oleh memori)
-
8/17/2019 Presentasi Struktur Data
6/173
eklarasi
struct simpul
char nama+!,-int nrp-
struct simpul *ne.t-
/-struct simpul *uung-
namanrp
net
simpul
data
p!inter y"
menun#uksimpul lain
-
8/17/2019 Presentasi Struktur Data
7/173
Membangun Linked List
Apa yang harus dilakukan#
0$ eklarasi
+$ Memory allocation1$ Mengisi data
2$ Menyiapkan untuk dihubungkan
dengan data baru berikutnya
-
8/17/2019 Presentasi Struktur Data
8/173
Bagaimana#
0$ struct simpul *uung-
+$ uung3(struct simpul*)malloc(si4eof(struct simpul))-
1$ printf(5Nama 65)-scanf(57s589uung:;nama)-
2$ printf(5N
-
8/17/2019 Presentasi Struktur Data
9/173
=elanutnya
0$ uung3(struct simpul*)malloc(si4eof(struct simpul))-
+$ printf(5Nama 65)-scanf(57s589uung:;nama)-
1$ printf(5N
;")
uung:;ne.t3tampung-
tampung3uung-
/
nama2
nrp2
net
u#un"
nama1
nrp1
net $%LL
tampun"
nama2
nrp2
net
u#un"
tampun"
-
8/17/2019 Presentasi Struktur Data
10/173
=elanutnya
0$ uung3(struct dtnilai*)malloc(si4eof(struct dtnilai))-
+$ printf(5Nama 65)-scanf(57s589uung:;nama)-
1$ printf(5N
;")
uung:;ne.t3tampung-
tampung3uung-
/
nama3
nrp3
net
u#un"
nama1
nrp1
net $%LL
tampun"
nama2
nrp2
net
nama3
nrp3
net
u#un" tampun"
-
8/17/2019 Presentasi Struktur Data
11/173
=ampai iterasi keempat
nama1
nrp1
net $%LL
tampun"
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
-
8/17/2019 Presentasi Struktur Data
12/173
Membaca (Menampilkan)
nama1
nrp1
net $%LL
tampil
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
tampil ' u#un";
ile (tampil+$%LL),, -un"si menampilkan
tampil ' tampil .+ net;
tampil tampil tampil tampil
-
8/17/2019 Presentasi Struktur Data
13/173
Mencari simpul ttt$
nama1
nrp1
net $%LL
cari
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un";
ile (cari.+nama/'nama2)
cari ' cari.+net;
cari cari
-
8/17/2019 Presentasi Struktur Data
14/173
Menyisipkan sebagai simpulterakhir
nama1
nrp1
net
cari
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un"
ile (cari.+net /'$%LL)
cari ' cari.+net;
cari.+net'aru;nama
nrp
net
aru
$%LL
cari cari cari
$%LL
-
8/17/2019 Presentasi Struktur Data
15/173
Menghapus simpul ttt$
nama1
nrp1
net $%LL
apus
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
apus ' u#un";
-
8/17/2019 Presentasi Struktur Data
16/173
Menghapus simpul ttt$
nama1
nrp1
net $%LL
apus
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
ile (apus.+nama /' nama2)
sl ' apus;
apus'apus.+net;
-
8/17/2019 Presentasi Struktur Data
17/173
Menghapus simpul ttt$
nama1
nrp1
net $%LL
apus
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
ile (apus.+nama /' nama2)
sl'apus;
apus'apus.+net;
sl
-
8/17/2019 Presentasi Struktur Data
18/173
Menghapus simpul ttt$
nama1
nrp1
net $%LL
apus
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
ile (apus.+nama /' nama2)
sl'apus;
apus'apus.+net;
sl
-
8/17/2019 Presentasi Struktur Data
19/173
Menghapus simpul ttt$
nama1
nrp1
net $%LL
apus
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
sl.+net'apus.+net;
sl
-
8/17/2019 Presentasi Struktur Data
20/173
Menghapus simpul ttt$
nama1
nrp1
net $%LL
nama3
nrp3
net
nama&
nrp&
net
u#un"
-ree(apus);
sl
-
8/17/2019 Presentasi Struktur Data
21/173
Menyisipkan setelah simpulttt$
nama1
nrp1
net $%LL
cari
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un"
namanrp
net
aru
-
8/17/2019 Presentasi Struktur Data
22/173
Menyisipkan setelah simpulttt$
nama1
nrp1
net $%LL
cari
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
ile (cari.+nama/'nama3)
cari ' cari.+net;aru.+net ' cari.+net;
namanrp
net
aru
-
8/17/2019 Presentasi Struktur Data
23/173
Menyisipkan setelah simpulttt$
nama1
nrp1
net $%LL
cari
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari.+net ' aru; namanrp
net
aru
-
8/17/2019 Presentasi Struktur Data
24/173
Menyisipkan sebelumsimpul ttt$
nama1
nrp1
net $%LL
cari
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un"
namanrp
net
aru
-
8/17/2019 Presentasi Struktur Data
25/173
Menyisipkan sebelumsimpul ttt$
nama1
nrp1
net $%LL
stl
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un";
ile (cari.+nama/'nama1) stl'cari;
cari'cari.+net;
namanrp
net
aru
cari
-
8/17/2019 Presentasi Struktur Data
26/173
Menyisipkan sebelumsimpul ttt$
nama1
nrp1
net $%LL
stl
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un";
ile (cari.+nama/'nama1) stl'cari;
cari'cari.+net;
namanrp
net
aru
cari
-
8/17/2019 Presentasi Struktur Data
27/173
Menyisipkan sebelumsimpul ttt$
nama1
nrp1
net $%LL
stl
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
cari ' u#un";
ile (cari.+nama/'nama1) stl'cari;
cari'cari.+net;
namanrp
net
aru
cari
-
8/17/2019 Presentasi Struktur Data
28/173
Menyisipkan sebelumsimpul ttt$
nama1
nrp1
net $%LL
stl
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
aru.+net ' cari;
namanrp
net
aru
cari
-
8/17/2019 Presentasi Struktur Data
29/173
Menyisipkan sebelumsimpul ttt$
nama1
nrp1
net $%LL
stl
nama2
nrp2
net
nama3
nrp3
net
nama&
nrp&
net
u#un"
stl.+net ' aru;
namanrp
net
aru
cari
-
8/17/2019 Presentasi Struktur Data
30/173
?include >iostream;
?include >stdlib$h;
?include >string;
?include >conio$h;
?include >fstream;
?include >time$h;
?include >cstdlib;
?include >iomanip; @@set()
using namespace std-
struct node
int data- node* ne.t- @@ untuk menghubungkan dengan node lain8 tipe data dibuat sama seperi aturanpenggunaan pointer$
/-
node* head-
node* tail-
node* curr-
node* entry-
node* del-
void inisialisasi()
head 3 N%LL-
tail 3 N%LL-
/
void input(int dt)
entry 3 (node* )malloc(si4eof(node))- @@alokasi memori
entry:;data 3 dt-
entry:;ne.t 3 N%LL-
if(head33N%LL)
head 3 entry-
tail 3 head-
/
else
tail:;ne.t 3 entry-
tail 3 entry-
/
/
void hapus()
int simpan-
if(head33N%LL)
cout>>5nlinked list kosong8 penghapusan tidak bisa dilakukan5>>endl-
/
else
simpan 3 head :;data-
cout>>5ndata yang dihapus adalah 5>>simpan>>endl-
@@hapus depan
del 3 head-
head 3 head:;ne.t-
delete del-
/
/
void cetak()
curr 3 head-
if(head 33 N%LL)
cout>>5ntidak ada data dalam linked list5>>endl-
else
cout>>5nata yang ada dalam linked list adalah5>>endl-
cout>>set(C)-
hile(currD3N%LL)
cout>>curr:;data>>5:;5-
curr 3 curr:;ne.t-
/
cout>>endl- /
/
void menu()
char pilih8 ulang-
int data-
do
system(5cls5)-
cout>>5=ENFLG LEN&G LE=' NHN IEendl-
cout>>5:::::::::::::::::::::::::::::::5>>endl-
cout>>5Menu 6 5>>endl-
cout>>50$ Enput data5>>endl-
cout>>5+$ Japus data5>>endl-
cout>>51$ Ietak ata5>>endl-
cout>>52$ G.it5>>endl-
cout>>5Masukkan pilihan Anda 6 5-
cin;;pilih-
sitch(pilih)
case K0K 6
cout>>5nMasukkan data 6 5-
cin;;data-
input(data)-
break-
case K+K 6
hapus()-
break-
case K1K 6
cetak()-
break-
case K2K 6
e.it(")-
break-
default 6
cout>>5nPilih ulang5>>endl-
/
cout>>5n&embali ke menu#(y@n)5-
cin;;ulang-
/hile(ulang33KyK ulang33KK)-
/
int main()
inisialisasi()-
menu()-
return GE'O=%IIG==-
/
-
8/17/2019 Presentasi Struktur Data
31/173
-
8/17/2019 Presentasi Struktur Data
32/173
-
8/17/2019 Presentasi Struktur Data
33/173
ouble Linked List
-
8/17/2019 Presentasi Struktur Data
34/173
Hperasi ouble Linked List
• Membangun ouble Linked List
• Membaca list8 dalam dua arah.
•Mencari simpul tertentu• Menghapus simpul tertentu
• Menyisipkan sebagai simpul pertama
• Menyisipkan simpul di tengah
-
8/17/2019 Presentasi Struktur Data
35/173
ouble Linked List
ead
0 1 2 3 &
tail
-
8/17/2019 Presentasi Struktur Data
36/173
eklarasi
struct simpul
char nama+!,-
int nrp-struct simpul *before-
struct simpul *ne.t-
/-
struct simpul *baru-
nama
nrp
e-!re
simpul
data
p!inter y" menun#uk simpul
seelumnyanetp!inter y" menun#uk simpul
erikutnya
-
8/17/2019 Presentasi Struktur Data
37/173
Membangun Linked List
Apa yang harus dilakukan#
0$ eklarasi
+$ Memory allocation1$ Mengisi data
2$ Menyiapkan untuk dihubungkan
dengan data baru berikutnya
-
8/17/2019 Presentasi Struktur Data
38/173
Bagaimana#
0$ struct simpul *baru-
+$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
1$ printf(5Nama 65)-scanf(57s589baru:;nama)-
2$ printf(5N
-
8/17/2019 Presentasi Struktur Data
39/173
Bagaimana#
0$ struct simpul *baru-
+$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
1$ printf(5Nama 65)-scanf(57s589baru:;nama)-
2$ printf(5N
-
8/17/2019 Presentasi Struktur Data
40/173
Bagaimana#
0$ struct simpul *baru-
+$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
1$ printf(5Nama 65)-scanf(57s589baru:;nama)-
2$ printf(5N
-
8/17/2019 Presentasi Struktur Data
41/173
Bagaimana#
0$ struct simpul *baru8 *head8 *tail-
+$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
1$ printf(5Nama 65)-scanf(57s589baru:;nama)-
2$ printf(5N
-
8/17/2019 Presentasi Struktur Data
42/173
=elanutnya0$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
+$ printf(5Nama 65)-scanf(57s589baru:;nama)-
1$ printf(5N
-
8/17/2019 Presentasi Struktur Data
43/173
=elanutnya0$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
+$ printf(5Nama 65)-scanf(57s589baru:;nama)-
1$ printf(5N
-
8/17/2019 Presentasi Struktur Data
44/173
=elanutnya0$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
+$ printf(5Nama 65)-scanf(57s589baru:;nama)-
1$ printf(5N
-
8/17/2019 Presentasi Struktur Data
45/173
=elanutnya0$ baru3(struct simpul*)malloc(si4eof(struct simpul))-
+$ printf(5Nama 65)-scanf(57s589baru:;nama)-
1$ printf(5N
;")
baru:;ne.t3N%LL-
tail:;ne.t3baru-
baru:;before3tail-
tail3baru-
/
nama2
nrp2
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
nama2
nrp2
e-!re
aru
net
net net
$%LL
-
8/17/2019 Presentasi Struktur Data
46/173
=ampai iterasi keempat
nama&
nrp&e-!re
$%L
tail
nama1
nrp1e-!re
ead
net net
nama2
nrp2e-!re
net
nama3
nrp3e-!re
net$%LL
-
8/17/2019 Presentasi Struktur Data
47/173
Membaca (EH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
aca45 ' ead;
aca45
-
8/17/2019 Presentasi Struktur Data
48/173
Membaca (EH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
ile (aca45/'$%LL)
,, -un"si menampilkan
aca45 ' aca45 .+ net;
aca45
-
8/17/2019 Presentasi Struktur Data
49/173
Membaca (EH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
ile (aca45+$%LL)
,, -un"si menampilkan
aca45 ' aca45 .+ net;
aca45
-
8/17/2019 Presentasi Struktur Data
50/173
Membaca (EH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
ile (aca45+$%LL)
,, -un"si menampilkan
aca45 ' aca45 .+ net;
aca45
-
8/17/2019 Presentasi Struktur Data
51/173
Membaca (EH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
ile (aca45+$%LL)
,, -un"si menampilkan
aca45 ' aca45 .+ net;
aca45
-
8/17/2019 Presentasi Struktur Data
52/173
Membaca (LEH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
acaL45 ' tail;
acaL45
-
8/17/2019 Presentasi Struktur Data
53/173
Membaca (LEH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
ile (acaL45+$%LL)
,, -un"si menampilkan
acaL45 ' acaL45 .+ e-!re;
acaL45
-
8/17/2019 Presentasi Struktur Data
54/173
Membaca (LEH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
ile (acaL45+$%LL)
,, -un"si menampilkan
acaL45 ' acaL45 .+ e-!re;
acaL45
-
8/17/2019 Presentasi Struktur Data
55/173
Membaca (LEH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
ile (acaL45+$%LL)
,, -un"si menampilkan
acaL45 ' acaL45 .+ e-!re;
acaL45
-
8/17/2019 Presentasi Struktur Data
56/173
Membaca (LEH)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
ile (acaL45+$%LL)
,, -un"si menampilkan
acaL45 ' acaL45 .+ e-!re;
acaL45
-
8/17/2019 Presentasi Struktur Data
57/173
Mencari =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
cari ' ead;
cari
-
8/17/2019 Presentasi Struktur Data
58/173
Mencari =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)
cari ' cari .+ net;
cari
-
8/17/2019 Presentasi Struktur Data
59/173
Mencari =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)
cari ' cari .+ net;
cari
-
8/17/2019 Presentasi Struktur Data
60/173
Mencari =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)
cari ' cari .+ net;
cari
-
8/17/2019 Presentasi Struktur Data
61/173
Menghapus =impul 'ertentu (=impul epan)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
cari ' ead;
cari
-
8/17/2019 Presentasi Struktur Data
62/173
Menghapus =impul 'ertentu (=impul epan)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
cari ' ead;
i-(cari.+nama''nama1)
ead'ead.+net;
cari
-
8/17/2019 Presentasi Struktur Data
63/173
-
8/17/2019 Presentasi Struktur Data
64/173
Menghapus =impul 'ertentu (=impul epan)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
cari ' ead;
i-(cari.+nama''nama)
ead'ead.+net;
ead.+e-!re'$%LL;
-ree(cari);
cari $%LL
-
8/17/2019 Presentasi Struktur Data
65/173
Menghapus =impul 'ertentu (=impul epan)
nama&
nrp&
e-!re
$%LL
tailead
net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet
cari ' ead;
i-(cari.+nama''nama)
ead'ead.+net;
ead.+e-!re'$%LL;
-ree(cari);
$%LL
-
8/17/2019 Presentasi Struktur Data
66/173
Menghapus =impul 'ertentu (=impul Akhir)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
cari'tail;
cari
-
8/17/2019 Presentasi Struktur Data
67/173
Menghapus =impul 'ertentu (=impul Akhir)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!renet$%LL
tail'tail.+e-!re;
cari
-
8/17/2019 Presentasi Struktur Data
68/173
Menghapus =impul 'ertentu (=impul Akhir)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
tail'tail.+e-!re;
tail.+net'$%LL;
cari
-
8/17/2019 Presentasi Struktur Data
69/173
Menghapus =impul 'ertentu (=impul Akhir)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
tail'tail.+e-!re;
tail.+net'$%LL;
-ree(cari);
cari
-
8/17/2019 Presentasi Struktur Data
70/173
Menghapus =impul 'ertentu (=impul Akhir)
$%LL
tail
nama1
nrp1
e-!re
ead
net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
71/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
cari'ead;
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
72/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)cari ' cari .+ net;
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
73/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)cari ' cari .+ net;
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
74/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)cari ' cari .+ net;
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
75/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
cari.+e-!re.+net'cari.+net;
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
76/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
cari.+net.+e-!re'cari.+e-!re;
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
77/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
-ree(cari);
cari
Menghapus =impul 'ertentu (i
-
8/17/2019 Presentasi Struktur Data
78/173
Menghapus =impul 'ertentu (i 'engah)
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet$%LL
-
8/17/2019 Presentasi Struktur Data
79/173
atau
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
ile (cari.+nama/'nama3)cari ' cari .+ net;
sl'cari.+e-!re;
stl'cari.+net;
carisl stl
M h =i l '
-
8/17/2019 Presentasi Struktur Data
80/173
Menghapus =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
sl.+net'stl;
carisl stl
M h =i l ' t t
-
8/17/2019 Presentasi Struktur Data
81/173
Menghapus =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet
nama3
nrp3
e-!renet$%LL
sl.+net'stl;stl.+e-!re'sl;
carisl stl
M h =i l ' t t
-
8/17/2019 Presentasi Struktur Data
82/173
Menghapus =impul 'ertentu
nama&
nrp&
e-!re
$%LL
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!renet$%LL
cari.+e-!re.+net ' cari.+net;cari.+net.+e-!re ' cari.+e-!re;
-ree(cari);
Menyisipkan sebagai simpul
-
8/17/2019 Presentasi Struktur Data
83/173
Menyisipkan sebagai simpulpertama
nama&
nrp&e-!re
$%L
tail
nama1
nrp1e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
Menyisipkan sebagai simpul
-
8/17/2019 Presentasi Struktur Data
84/173
Menyisipkan sebagai simpulpertama
nama&
nrp&
e-!re
$%L
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->before=NULL
$%LL
Menyisipkan sebagai simpul
-
8/17/2019 Presentasi Struktur Data
85/173
Menyisipkan sebagai simpulpertama
nama&
nrp&
e-!re
$%L
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->ne!t=head
$%LL
Menyisipkan sebagai simpul
-
8/17/2019 Presentasi Struktur Data
86/173
Menyisipkan sebagai simpulpertama
nama&
nrp&
e-!re
$%L
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net
nama
nrp
e-!re
sisip
net
head->before=sisip
$%LL
Menyisipkan sebagai simpul
-
8/17/2019 Presentasi Struktur Data
87/173
Menyisipkan sebagai simpulpertama
nama&
nrp&
e-!re
$%L
tail
nama1
nrp1
e-!re
ead
net net
nama2
nrp2
e-!re
net
nama3
nrp3
e-!re
net
nama
nrp
e-!re
sisip
net
head=sisip
$%LL
Menyisipkan stl$ simpul
-
8/17/2019 Presentasi Struktur Data
88/173
e y s p a s s putertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
Menyisipkan stl$ simpul
-
8/17/2019 Presentasi Struktur Data
89/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
stl=head
"hile(stl->nama#=nama$)
stl=stl->ne!t
stl
Menyisipkan stl$ simpul
-
8/17/2019 Presentasi Struktur Data
90/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->before=stl
stl
Menyisipkan stl$ simpul
-
8/17/2019 Presentasi Struktur Data
91/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->before=stl
sisip->ne!t=stl->ne!t
stl
Menyisipkan stl$ simpul
-
8/17/2019 Presentasi Struktur Data
92/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->before=stl
sisip->ne!t=stl->ne!t
stl->ne!t->before=sisip
stl
Menyisipkan stl$ simpul
-
8/17/2019 Presentasi Struktur Data
93/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->before=stl
sisip->ne!t=stl->ne!t
stl->ne!t->before=sisip
stl->ne!t=sisip
stl
Menyisipkan sbl$ simpul
-
8/17/2019 Presentasi Struktur Data
94/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
Menyisipkan sbl$ simpul
-
8/17/2019 Presentasi Struktur Data
95/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sbl=head
"hile(sbl->nama#=nama$)
sbl=sbl->ne!t
sl
Menyisipkan sbl$ simpul
-
8/17/2019 Presentasi Struktur Data
96/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->ne!t=sbl
sl
Menyisipkan sbl$ simpul
-
8/17/2019 Presentasi Struktur Data
97/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->ne!t=sbl
sisip->before=sbl->before
sl
Menyisipkan sbl$ simpul
-
8/17/2019 Presentasi Struktur Data
98/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->ne!t=sbl
sisip->before=sbl->before
sbl->before->ne!t=sisip
sl
Menyisipkan sbl$ simpul
-
8/17/2019 Presentasi Struktur Data
99/173
y p ptertentu
nama&nrp&
e-!re
$%LL
tail
nama1nrp1
e-!re
ead
net net
nama2nrp2
e-!re
net
nama3nrp3
e-!re
net$%LL
nama
nrp
e-!re
sisip
net
sisip->ne!t=sbl
sisip->before=sbl->before
sbl->before->ne!t=sisip
sbl->before=sisip
sl
?include >iostream;
?include >stdlib$h;
?include >string;
?include >conio$h;
?include >fstream;
?include >time$h;
?include >cstdlib;
i l d i i @@ ()
cout>>5nLinked List kosong penghapusan tidak dapat dilakukan5>>endl-
/
void cetak()
print 3 head-
-
8/17/2019 Presentasi Struktur Data
100/173
?include >iomanip; @@set()
using namespace std-
typedef struct node
long data-
node* ne.t- @@tipe data bertipe sama untuk menunuk ke node lain
node* prev-
/-
@@buat variabel node
node* head-
node* tail-
node* print-
node* del-
node* entry-
void inisialisasi()
head 3 N%LL-
tail 3 N%LL-
/
int isGmpty()
if(head 33 N%LL)
return 0-
else
return "-
/
void input(int *dta)
entry 3 ne node-
entry:;data 3 *dta-
entry:;ne.t 3 N%LL- entry:;prev 3 N%LL-
if(isGmpty()330)
head 3 entry-
head:;ne.t 3 N%LL-
head:;prev 3 N%LL-
tail3head-
/
else
tail:;ne.t 3 entry-
entry:;prev 3 tail-
tail 3 entry-
/
/
@@penghapusan data di belakang melalui head
void hapus()
int simpan-
if(headD3N%LL) @@ika hanya kondisi ini saa maka akan teradi error karena disana ada synta. head:;prev 3 N%LL
if(head:;ne.t D3 N%LL)
del3head-
simpan 3 head:;data-
cout>>5n5>>simpan>>5 telah dihapus5>>endl-
head 3 head:;ne.t-
head:;prev 3 N%LL-
delete del-
/
else
simpan 3 head:;data-
cout>>5n5>>simpan>>5 telah dihapus5>>endl-
head 3 N%LL-
/
/
else
p -
if(headD3N%LL)
hile(printD3N%LL)
cout>>5nt5>>print:;data-
print 3 print:;ne.t-
/
/
else
cout>>5n'idak ada data dalam linked list5>>endl-
/
void menu()
char pilih8 ulang-
int data-
do
system(5IL=5)-
menu 6
cout>>5H%BLG LEN&G LE=' NHN IEendl-
cout>>5:::::::::::::::::::::::::::::::5>>endl-
cout>>5Menu6 5-
cout>>5n0$ Gntry ata5-
cout>>5n+$ Japus ata5-
cout>>5n1$ Ietak ata5-
cout>>5n2$ &eluar5-
cout>>5nMasukkan pilihan Anda 6 5-
cin;;pilih-
sitch(pilih)
case K0K 6
cout>>5nMasukkan ata 6 5-
cin;;data-
input(9data)-
cout>>5n5>>dat a>>5 telah ditambahkan5>>endl-
break-
case K+K 6
hapus()-
break-
case K1K 6
cetak()-
break-
case K2K 6
cout>>5n'erima kasih telah menggunakan program ini5>>endl-
e.it(GE'O=%IIG==)-
break- default 6
cout>>5nPilih ulang5>>endl-
goto menu-
/
cout>>5n&embali ke menu# (y@n)5-
cin;;ulang-
/hile(ulang33KyK ulang 33KK)-
/
int main()
inisialisasi()-
menu()-
return GE'O=%IIG==-
/
-
8/17/2019 Presentasi Struktur Data
101/173
-
8/17/2019 Presentasi Struktur Data
102/173
-
8/17/2019 Presentasi Struktur Data
103/173
single linked list circular
Single Linked List
-
8/17/2019 Presentasi Struktur Data
104/173
Circular• =LLI adalah =ingle Linked List yang pointer ne.tnya
menunuk pada dirinya sendiri$ Qika =ingle Linked Listtersebut terdiri dari beberapa node8 maka pointer ne.tpada node terakhir akan menunuk ke node terdepannya$
• Pengertian:
– =ingle 6 artinya Reld pointer:nya hanya satu buah saadan satu arah$
– Linked List 6 artinya node:node tersebut salingterhubung satu sama lain$
– Iircular 6 artinya pointer ne.t:nya akan menunuk pada
dirinya sendiri sehingga berputar
Elustrasi =LLI
-
8/17/2019 Presentasi Struktur Data
105/173
Elustrasi =LLI
• =etiap node pada linked list mempunyai
Reld yang berisi pointer ke nodeberikutnya8 dan uga memiliki Reld yangberisi data$
• Pada akhir linked list8 node terakhir akan
menunuk ke node terdepan sehinggalinked list tersebut berputar$
Deklarasi dan node baru SLLC
-
8/17/2019 Presentasi Struktur Data
106/173
Deklarasi dan node baru SLLC
eklarasi node
ibuat dari struct berikut ini6
typedef struct TNode{
int data;
TNode *next;
};
Pembentukan node baru
igunakan keyord ne yang berarti mempersiapkan sebuah node baru
berserta alokasi memorinya$
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
107/173
=LLI dengan JGA
• ibutuhkan satu buah variabelpointer6 head
• Jead akan selalu menunuk pada
node pertama
SLLC dengan HEAD
-
8/17/2019 Presentasi Struktur Data
108/173
SLLC dengan HEAD
eklarasi Pointer Penunuk &epala =ingleLinked List• Manipulasi linked list tidak bisa dilakukan
langsung ke node yang dituu8 melainkan harus
melalui node pertama dalam linked list$eklarasinya sebagai berikut6
TNode *head;
ungsi Enisialisasi =ingle LinkedList Iircular
void init(){
head = NULL;
}
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
109/173
=LLI dengan JGA
unction untuk mengetahui kosong tidaknya =LLIint isEmpty(){
if(head == NULL) return 1;
else return 0;
}
Penambahan data di depan• Penambahan node baru akan dikaitan di node palingdepan, namun pada saat pertama kali (data masihkosong)8 maka penambahan data dilakukan pada head nya$
• Pada prinsipnya adalah mengkaitkan data baru denganhead8 kemudian head akan menunuk pada data barutersebut sehingga head akan tetap selalu menadi dataterdepan$ %ntuk menghubungkan node terakhir dengannode terdepan dibutuhkan pointer bantu$
=LLI menggunakan Jead
-
8/17/2019 Presentasi Struktur Data
110/173
=LLI menggunakan Jead
void insertDepan(int databaru){
TNode *baru,*bantu; baru = new TNode; baru->data = databaru;
baru->next = baru;
if(isEmpt()==!){
"ead=baru; "ead->next="ead;#
e$se { bantu = "ead;
w"i$e(bantu->next%="ead){
bantu=bantu->next;#
baru->next = "ead;"ead = baru;
bantu->next = "ead;#
printf(&Data masu'n);
#
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
111/173
=LLI dengan JGA
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
112/173
=LLI dengan JGA
Penambahan data di belakang• Penambahan data dilakukan di belakang8
namun pada saat pertama kali data langsungditunuk pada head:nya$
• Penambahan di belakang lebih sulit karena kitamembutuhkan pointer bantu untuk mengetahuidata terbelakang8 kemudian dikaitkan dengandata baru$ %ntuk mengetahui data terbelakang
perlu digunakan perulangan$
=LLI dengan Jead
-
8/17/2019 Presentasi Struktur Data
113/173
=LLI dengan Jead
void insertBelakang (int databaru) !"ode #baru,#bantu$baru % ne& !"ode$baru'data % databaru$baru'net % baru$i*(isE+pt()%%-) .ead%baru$ .ead'net%.ead$
/else
bantu % .ead$&.ile(bantu'net 0% .ead)
bantu%bantu'net$/bantu'net % baru$baru'net % .ead$
/print*(1Data +asuk2n3)$
/
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
114/173
=LLI dengan JGA
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
115/173
=LLI dengan JGA
unction untuk menampilkan isi single linked listvoid tampil(){
TNode *b;
b = head;
if(isEmpty()==0){
do{
printf(“%d “,b->data);
b=b->next;
}while(b!=head);
printf(“\n”);
} else printf("Masih kosong\n“);
}
=LLI dgn JGA
-
8/17/2019 Presentasi Struktur Data
116/173
=LLI dgn JGA
void hapusDepan (){TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
d = head->data;
if(head->next != head){
bantu = head;while(bantu->next!=head){
bantu=bantu->next;
}
head = head->next;
delete hapus;
bantu->next = head;
}else{
head=NULL;
}
printf(“%d terhapus\n“,d);
} else printf("Masih kosong\n“);
}
SLLC d HEAD
-
8/17/2019 Presentasi Struktur Data
117/173
SLLC dengan HEADvoid hapusBelakang(){
TNode *hapus,*bantu;if (isEmpty()==0){
int d;
hapus = head;
if(head->next == head){
head = NULL;
}else{
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = bantu->data;
bantu->next = head;delete hapus;
}
printf(“%d terhapus\n“,d);
} else printf("Masih kosong\n“);
}
SLLC dengan HEAD
-
8/17/2019 Presentasi Struktur Data
118/173
g
=LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
119/173
=LLI dengan JGA
unction untuk menghapus semua elemen LinkedList
void clear(){
TNode *bantu,*hapus;
bantu = head;
while(bantu->next!=head){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}head = NULL;
}
SLLC dengan HEAD dan !A4L
-
8/17/2019 Presentasi Struktur Data
120/173
SLLC dengan HEAD dan !A4L
• ibutuhkan dua buah variabel pointer6head dan tail
• Jead akan selalu menunuk pada nodepertama8 sedangkan tail akan selalu
menunuk pada node terakhir$
SLLC dengan HEAD dan !A4L
-
8/17/2019 Presentasi Struktur Data
121/173
SLLC dengan HEAD dan !A4L
Enisialisasi =LLI
TNode *head, *tail;
ungsi Enisialisasi =LLI
void init(){
head = NULL;
tail = NULL;
}
unction untuk mengetahui kosong tidaknya =LLI
int isEmpty(){if(tail == NULL) return 1;
else return 0;
}
SLLC dengan HEAD dan !A4L
-
8/17/2019 Presentasi Struktur Data
122/173
S C de ga da
Pengkaitan node baru ke linked list di depanPenambahan data baru di depan akan selalu menadi head$
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;if(isEmpty()==1){
head=baru;
tail=baru;
head->next=head;
tail->next=tail;
}
else {
baru->next = head;head = baru;
tail->next = head;
}
printf("Data masuk\n“);
}
=LLI dengan JGA dan 'AEL
-
8/17/2019 Presentasi Struktur Data
123/173
g
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
124/173
=LLI dengan JGA 9 'AEL
void tambahBelakang(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru; tail=baru;
head->next=head;
tail->next=tail;
}
else {
tail->next = baru;
tail = baru;tail->next = head;
}
cout
-
8/17/2019 Presentasi Struktur Data
125/173
=LLI dengan JGA 9 'AEL
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
126/173
= I de ga 9
unction untuk menampilkan isi linked list6void tampil(){
TNode *b;
b = head;
if(isEmpty()==0){
do{
printf(“%d”,b->data);
b=b->next;
}while(b!=tail->next);
printf(“\n”);
} else printf("Masih kosong\n“);
}
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
127/173
g
unction untuk menghapus data di depan
void hapusDepan(){
TNode *hapus;
if (isEmpty()==0){
int d;
hapus = head;
d = head->data;if(head != tail){
hapus = head;
head = head->next;
tail->next = head;
delete hapus;
}else{
head=NULL;tail=NULL;
}
printf(“%d terhapus\n“,d);
} else printf("Masih kosong\n“);
}
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
128/173
g
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
129/173
g
• unction di atas akan menghapus data terdepan(perta+a) yang ditunuk oleh head pada linkedlist
• Penghapusan node tidak boleh dilakukan ikakeadaan node sedang ditunuk oleh pointer8 makaharus dilakukan penunukkan terlebih dahuludengan variabel hapus pada head8 kemudiandilakukan pergeseran head ke node berikutnyasehingga data setelah head menadi head baru8kemudian menghapus variabel hapus denganmenggunakan perintah delete$
• Qika tail masih N%LL maka berarti data masihkosongD
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
130/173
gunction untuk menghapus data di belakang6
void hapusBelakang(){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
if(head == tail){
d = tail->data;
head = NULL;
tail = NULL;}else{
bantu = head;
while(bantu->next != tail){
bantu = bantu->next;
}
hapus = tail;
tail = bantu;
d = hapus->data;tail->next = head;
delete hapus;
}
printf(“%d terhapus\n“,d);
} else printf("Masih kosong\n“);
}
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
131/173
g
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
132/173
g
• unction di atas akan menghapus dataterbelakang (terak.ir) yang ditunuk oleh tailpada linked list
• Penghapusan node tidak boleh dilakukan ikakeadaan node sedang ditunuk oleh pointer8 maka
harus dilakukan penunukkan terlebih dahuludengan variabel hapus pada tail8 kemudiandibutuhkan pointer bantu untuk membantupergeseran dari head ke node berikutnya sampaisebelum tail8 sehingga tail dapat ditunukkan kebantu tersebut8 dan bantu tersebut akan menaditail yang baru$ =etelah itu hapus variabel hapusdengan menggunakan perintah delete$
• Qika tail masih N%LL maka berarti data masihkosongD
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
133/173
g
unction untuk menghapus semua elemen LinkedList
void clear(){
TNode *bantu,*hapus;
if(isEmpty() == 0){
bantu = head;
while(bantu->next!=head){hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;}
}
=LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
134/173
g
• Menggunakan pointer bantu yangdigunakan untuk bergerak sepanang list8dan menggunakan pointer hapus yangdigunakan untuk menunuk node:nodeyang akan dihapus$
• Pada saat pointer hapus menunuk padanode yang akan dihapus8 pointer bantuakan bergerak ke node selanutnya8 dankemudian pointer hapus akan didelete$
?include >iostream;
?include >stdlib$h;
?include >string;
?include >conio$h;
?include >fstream;
?include >time h;
void tambahataBelakang(int dataBaru)
ata *baru-
baru3(ata*) malloc(si4eof(ata))-
baru:;nilai3dataBaru-
baru:;ne.t3baru-
if (isGmpty())
head3baru-
-
8/17/2019 Presentasi Struktur Data
135/173
?include >time$h;
?include >cstdlib;
?include >iomanip; @@set()
using namespace std-struct ata
int nilai-
ata *ne.t-
/-
ata *head-
void aal()
head3N%LL-
/
bool isGmpty()
if (head33N%LL)
return true-
return false-
/
void tambahataepan(int dataBaru)
ata *baru-
baru3(ata*) malloc(si4eof(ata))-
baru:;nilai3dataBaru-
baru:;ne.t3baru-
if (isGmpty())
head3baru-
head:;ne.t3head-
/ else
ata *bantu- bantu3head-
hile (bantu:;ne.tD3head)
bantu3bantu:;ne.t-
/
baru:;ne.t3head-
head3baru-
bantu:;ne.t3head-
/
/
head:;ne.t3head-
/ else
ata *bantu-
bantu3head-
hile (bantu:;ne.tD3head)
bantu3bantu:;ne.t-/
bantu:;ne.t3baru- baru:;ne.t3head-
@@head3baru-
@@bantu:;ne.t3baru- //
void hapusepan()
if(DisGmpty())
if(head:;ne.tD3head)
ata *hapus-
hapus3head-
ata *bantu-
bantu3head-
hile (bantu:;ne.tD3head)
bantu3bantu:;ne.t-/
bantu:;ne.t3head:;ne.t-
head3head:;ne.t- delete hapus- /
else
aal()- ///
void hapusBelakang()@*
tambah kode program di sini$$$$
*@
/
void cetak()
if (DisGmpty())
ata *bantu-
bantu3head-
do
cout>>bantu:;nilai>>5 5-
bantu3bantu:;ne.t- / hile(bantuD3head)- //
int main()
aal()-
tambahataBelakang(!)-
tambahataepan(S)-
tambahataBelakang(0S)-
hapusepan()-
hapusepan()-
cetak()-
return "-
/
-
8/17/2019 Presentasi Struktur Data
136/173
-
8/17/2019 Presentasi Struktur Data
137/173
Double Linked List
Circular
Double Linked List Circular
-
8/17/2019 Presentasi Struktur Data
138/173
• ouble Linked List Iircular adalah linked list denganmenggunakan pointer8 dimana setiap node memiliki 1Reld8 yaitu 0 Reld pointer yang menunuk pointerberikutnya (ne.t)8 0 Reld menunuk pointersebelumnya (prev)8 serta sebuah Reld yang berisidata untuk node tersebut$
• ouble Linked List Iircular pointer ne.t dan prev nyamenunuk ke dirinya sendiri secara circular$
• Pengertian: – ouble6 artinya Reld pointer:nya terdiri dari dua
buah dan dua arah8 yaitu prev dan ne.t – Linked List6 artinya node:node tersebut saling
terhubung satu sama lain$ – Iircular6 artinya pointer ne.t dan prev:nya
menunuk ke dirinya sendiri
Elustrasi LLI
-
8/17/2019 Presentasi Struktur Data
139/173
• =etiap node pada linked list mempunyai Reldyang berisi data dan pointer ke nodeberikutnya 9 ke node sebelumnya
• %ntuk pembentukan node baru8 mulanyapointer ne.t dan prev akan menunuk kedirinya sendiri$
• Qika sudah lebih dari satu node8 maka pointer
prev akan menunuk ke node sebelumnya8dan pointer ne.t akan menunuk ke nodesesudahnya$
Deklarasi dan node baru DLLC
-
8/17/2019 Presentasi Struktur Data
140/173
eklarasi node• ibuat dari struct berikut ini6• typedef struct TNode{
• int data;
• TNode *next;
• TNode *prev;
};
• Pembentukan node baru
• igunakan keyord ne yang berarti mempersiapkansebuah node baru berserta alokasi memorinya$
• TNode *baru;
• baru = new TNode;
• baru->data = databaru;• baru->next = baru;
• baru->prev = baru;
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
141/173
• ibutuhkan satu buah variabelpointer6 head
• Jead akan selalu menunuk pada
node pertama
DLL"C dengan HEAD
-
8/17/2019 Presentasi Struktur Data
142/173
eklarasi Pointer Penunuk &epala LLI• Manipulasi linked list tidak bisa
dilakukan langsung ke node yangdituu8 melainkan harus melalui node
pertama dalam linked list$eklarasinya sebagai berikut6• TNode *head;• ungsi Enisialisasi =ingle LinkedList
Iircular• void init(){
– head = NULL;
• }
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
143/173
unction untuk mengetahui kosong tidaknya LLI• int isEmpty(){• if(head == NULL) return 1;• else return 0;• }
Penambahan data di depan
• Penambahan node baru akan dikaitan di node palingdepan, namun pada saat pertama kali (data masihkosong)8 maka penambahan data dilakukan pada headnya$
• Pada prinsipnya adalah mengkaitkan data baru denganhead8 kemudian head akan menunuk pada data baru
tersebut sehingga head akan tetap selalu menadi dataterdepan$ %ntuk menghubungkan node terakhirdengan node terdepan dibutuhkan pointer bantu$
LLI menggunakan Jead
-
8/17/2019 Presentasi Struktur Data
144/173
void insertDepan(int databaru){ TNode *baru *bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(is!"pty()==#){
$ead=baru;$ead->next = $ead;
$ead->prev = $ead;
}
e%se {
bantu = $ead->prev;
baru->next = $ead;
$ead->prev = baru;
$ead = baru;
$ead->prev = bantu;
bantu->next = $ead;
}
cout&&'Data "asun';
}
-
8/17/2019 Presentasi Struktur Data
145/173
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
146/173
Penambahan data di belakang• Penambahan data dilakukan di belakang8
namun pada saat pertama kali data langsungditunuk pada head:nya$
• Penambahan di belakang lebih sulit karenakita membutuhkan pointer bantu untukmengetahui data terbelakang8 kemudiandikaitkan dengan data baru$ %ntukmengetahui data terbelakang perludigunakan perulangan$
LLI dengan Jead
-
8/17/2019 Presentasi Struktur Data
147/173
void inserte%aan+ (int databaru){
TNode *baru*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(is!"pty()==#){
$ead=baru; $ead->next = $ead;
$ead->prev = $ead;
}
e%se {
bantu=$ead->prev;
bantu->next = baru;
baru->prev = bantu;
baru->next = $ead; $ead->prev = baru;
}
cout&&'Data "asun';
}
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
148/173
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
149/173
Function untuk menampilkan isi linked listvoid ta"pi%(){TNode *bantu;
bantu = $ead;
if(is!"pty()==,){
do{
cout&&bantu->data&&' ';
bantu=bantu->next;
}w$i%e(bantu=$ead);
cout&&end%;
} e%se cout&&'.asi$ oson+n';
}
LLI dgn JGA
-
8/17/2019 Presentasi Struktur Data
150/173
void $apusDepan (){
TNode *$apus*bantu;
int d;
if (is!"pty()==,){
if($ead->next = $ead){
$apus = $ead;
d = $apus->data;bantu = $ead->prev;
$ead = $ead->next;
bantu->next = $ead;
$ead->prev = bantu;
de%ete $apus;
} e%se {
d = $ead->data;$ead = N/00;
}
cout&&d&&' ter$apusn';
} e%se cout&&'.asi$ oson+n';
}
DLLC dengan HEAD
-
8/17/2019 Presentasi Struktur Data
151/173
g
uncti!n untuk men"apus n!de terelakan"void $apuse%aan+(){
TNode *$apus*bantu;
int d;
if (is!"pty()==,){
if($ead->next = $ead){
bantu = $ead;
w$i%e(bantu->next->next = $ead){bantu = bantu->next;
}
$apus = bantu->next;
d = $apus->data;
bantu->next = $ead;
de%ete $apus;
} e%se {
d = $ead->data;
$ead = N/00;
}
cout&&d&&' ter$apusn';
} e%se cout&&'.asi$ oson+n';
}
DLLC dengan HEAD
-
8/17/2019 Presentasi Struktur Data
152/173
• iperlukan pointer bantu yangmengikuti pointer hapus yangberguna untuk menunuk ke node
sebelum terakhir$• &emudian pointer hapus
ditunukkan ke node setelah
pointer bantu8 kemudian hapuspointer hapus dengan perintahdelete$
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
153/173
LLI dengan JGA
-
8/17/2019 Presentasi Struktur Data
154/173
uncti!n untuk men"apus semua elemenvoid c%ear(){
TNode *bantu*$apus;
if (is!"pty()==,){
bantu = $ead;
w$i%e(bantu->next=$ead){$apus = bantu;
bantu = bantu->next;
de%ete $apus;
}
$ead = N/00;
}}
DLLC dengan HEAD dan !A4L
-
8/17/2019 Presentasi Struktur Data
155/173
• ibutuhkan dua buah variabelpointer6 head dan tail
• Jead akan selalu menunuk pada
node pertama8 sedangkan tailakan selalu menunuk pada nodeterakhir$
DLLC dengan HEAD dan !A4L
-
8/17/2019 Presentasi Struktur Data
156/173
Enisialisasi LLNI• TNode *head, *tail;
ungsi Enisialisasi LLNI
• void init(){
– head = NULL;
– tail = NULL;
• }
unction untuk mengetahui kosong tidaknya LLNI
• int isEmpty(){
• if(tail == NULL) return 1;• else return 0;
• }
DLLC dengan HEAD dan !A4L
-
8/17/2019 Presentasi Struktur Data
157/173
void insertDepan (int databaru){
TNode *baru;baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(is!"pty()==#){
$ead=baru;
tai%=baru;
$ead->next = $ead;$ead->prev = $ead;
tai%->next = tai%;
tai%->prev = tai%;
}
e%se {
baru->next = $ead;
$ead->prev = baru;
$ead = baru;
$ead->prev = tai%;
tai%->next = $ead;
}
cout&&'Data "asun';
}
LLI dengan JGA dan 'AEL
-
8/17/2019 Presentasi Struktur Data
158/173
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
159/173
Penambahan node di belakangPenambahan node di belakang akan selalu dikaitkan dengan tail dan
kemudiannode baru tersebut akan menadi tailvoid inserte%aan+(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
baru->prev = baru;
if(is!"pty()==#){ $ead=baru;
tai%=baru;
$ead->next = $ead;
$ead->prev = $ead;
tai%->next = tai%;
tai%->prev = tai%;
}
e%se {
tai%->next = baru;
baru->prev = tai%;
tai% = baru;
tai%->next = $ead;
$ead->prev = tai%;
}
cout&&'Data "asun';
}
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
160/173
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
161/173
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
162/173
• unction untuk menampilkan isi linked listvoid tampil(){TNode *bantu;
bantu = head;
if(isEmpty()==0){
do{
cout
-
8/17/2019 Presentasi Struktur Data
163/173
uncti!n untuk men"apus data di data terdepan
void $apusDepan(){TNode *$apus;
int d;
if (is!"pty()==,){
if($ead = tai%){
$apus = $ead;
d = $apus->data;
$ead = $ead->next;
tai%->next = $ead;
$ead->prev = tai%;de%ete $apus;
} e%se {
d = $ead->data;
$ead = N/00;
tai% = N/00;
}
cout&&d&&' ter$apusn';
} e%se cout&&'.asi$ oson+n';
}
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
164/173
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
165/173
uncti!n untuk men"apus n!de terelakan"void $apuse%aan+(){TNode *$apus;
int d;
if (is!"pty()==,){
if($ead = tai%){
$apus = tai%;
d = $apus->data;
tai% = tai%->prev;
tai%->next = $ead;
$ead->prev = tai%;
de%ete $apus;
} e%se {
d = $ead->data;
$ead = N/00;
tai% = N/00;
}
cout&&d&&' ter$apusn';
} e%se cout&&'.asi$ oson+n';
}
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
166/173
• Pointer hapus tidak perlu di loopuntuk mencari node terakhir$Pointer hapus hanya perlumenunuk pada pointer tail saa$
• &arena pointer hapus sudah bisamenunuk ke pointer sebelumnyadengan menggunakan elemen
prev ke node sebelumnya$&emudian pointer tail akanberpindah ke node sebelumnya$
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
167/173
LLI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
168/173
•Function untuk menghapus semua elemen LinkedListvoid c%ear(){TNode *bantu*$apus;
if (is!"pty()==,){
bantu = $ead;
w$i%e(bantu->next=$ead){
$apus = bantu;bantu = bantu->next;
de%ete $apus;
}
$ead = N/00;
}}
LLNI dengan JGA 9 'AEL
-
8/17/2019 Presentasi Struktur Data
169/173
• Menggunakan pointer bantu yangdigunakan untuk bergerak sepananglist8 dan menggunakan pointer hapusyang digunakan untuk menunuk node:node yang akan dihapus$
• Pada saat pointer hapus menunukpada node yang akan dihapus8 pointerbantu akan bergerak ke nodeselanutnya8 dan kemudian pointer
hapus akan didelete$
-
8/17/2019 Presentasi Struktur Data
170/173
-
8/17/2019 Presentasi Struktur Data
171/173
-
8/17/2019 Presentasi Struktur Data
172/173
-
8/17/2019 Presentasi Struktur Data
173/173
• Antonius 5ac.+at C, S67o+• Adie Bondan