MODUL I Dini Fix Double Linked List
Transcript of MODUL I Dini Fix Double Linked List
-
8/18/2019 MODUL I Dini Fix Double Linked List
1/26
Modul 1 Linked List dan Array
MODUL I
LINKED LIST DAN ARRAY
A. TUJUAN
1. Mahasiswa dapat mengetahui bagaimana mengimplementasikan array
dalam program.
2. Mahasiswa memahami dan mampu membuat single Linked List.
3. Mahasiswa memahami dan mampu membuat double Linked List.
4. Mahasiswa dapat membuat dan menggunakan berbagai operasi – operasi
yang terdapat pada Linked List.
B. DASAR TEORI
1. Array
Array atau larik adalah suatu bentuk struktur data yang menampung
satu data yang sejenis (bertipe data sama yang diwakili oleh satu nama!ariabel."1#
1.1. Array $atu %imensi
Array satu dimensi yaitu array yang terdiri atas satu baris dan
banyak kolom.pendeklarasian suatu array harus diikuti oleh suatu
indeks yang menunjukan jumlah maksimum data yang disediakan."2#
%eklarasi array satu dimensi &
'ontoh &
Char huruf [9];
Tabel 1.1 ndeks Array
Praktikum Algoritma dan Struktur Data
tipe_data nama_var_array [ukuran];
-
8/18/2019 MODUL I Dini Fix Double Linked List
2/26
Modul 1 Linked List dan Array
)entuk umum pengaksesan array &
*ende+inisian inisialisasi array berdimensi satu, yaitu &
'ontoh &
Float nilai [5] = {56, 66, 8, 98, 8!
1.2. Array %ua %imensi
Array %ua %imensi yaitu array yang tersusun dari banyak baris dan
banyak kolom, dimana indeks pertama menunjukan baris dan indeks
kedua menunjukan kolom."3#
%eklarasi array dua dimensi &
'ontoh &
"nt # [$][%]= {{$,&,'!,{5,%,!!;
Tabel 1.2. Array dua dimensi
- 1 2
- 2 4 1
1 3 /
1.3. Array %inamis
Praktikum Algoritma dan Struktur Data
1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8
(ama_)rray ["ndek*];
+ipe_ata (ama_)rray [-ml elemen] = [nilai array];
+ipe_ata (ama_.ar_array [#ata*_#ari*]
-
8/18/2019 MODUL I Dini Fix Double Linked List
3/26
Modul 1 Linked List dan Array
Array dinamis adalah array yang jumlah pemesanan tempat di
memori dapat diubah sesuai dengan kebutuhan, sehingga lebih
optimal dalam peman+aatan ruang di memori."3#
'ontoh &
/tati0 int dataktp [$] [] [8] [5]
2. Single Linked List
$ebuah list yang elemennya hanya menyimpan in+ormasi elemen
setelahnya (next dan hanya memiliki pengait ke elemen berikutnya, 1
pengait. $ehingga jalannya pengaksesan list hanya dapat dilakukan
se0ara maju sebelumnya, maka hanya dapat mengakses elemen
berikutnya."4#
'ontoh &
Gambar 1.1 Single Linked List.
3. Double Linked List
Double Linked List adalah linked list biasa, hanya saja setiap elemen
list nya memuat 2 ma0am pointer yang satu menunjukan elemen
sebelumnya dan yang lainnya menunjuk ke elemen sesudahnya."#
'ontoh &
Praktikum Algoritma dan Struktur Data
next
a b c d head data tail
NULL
next
a b c d head data tail
NULL
-
8/18/2019 MODUL I Dini Fix Double Linked List
4/26
Modul 1 Linked List dan Array
Gambar 1.2 Double Linked List.
4. perasi – perasi yang Ada pada Linked List
4.1 *enyisipan simpul ke Linked list
1) Insert first (L,, operasi penyisipan sebagai simpul sebagai
simpul pertama di L.
2) Insert after (L, , Prev , operasi penyisipan simpul setelah
simpul tertentu Prev .
3) Insert last (L,, operasi penyisipan simpul sebagai simpul
terakhir.
) Insert before (L,, operasi penyisipan simpul sebelum
simpul tertentu aft .
.2 *enghapusan !ariabel dinamis (simpul suatu Linked list
1) Delete first (L, operasi penghapusan simpul pertama dari list L.
2) Delete last (L, operasi penghapusan simpul terakhir dari list L.
3) Delete after (L, Prev , operasi penghapusan setelah simpul
tertentu Prev di last L.
) *enghapusan simpul tertentu
• Delete !ode (L,, operasi penghapusan simpul dari list
L.
• Delete " !ode (L,, operasi penghapusan simpul dengan
key dari list ."#
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
5/26
Modul 1 Linked List dan Array
C. PERMASALAHAN
1. )uat single linked list dengan memuat minimal 1 buah data array
disertakan operasi &
a. Add front # add ba$k
b. Insert %after&before&bet'een)
$. Delete %front # ba$k)
d. Delete linked list
*enyelesaian &
a. Algoritma
1. Add (ront
a. )uat +ungsi add front yang mempunyai paramaeter tipe data
double.
b. 5ika si*e dari !ode tersebut adalah -, buat !ode baru yang
bernama t+p.
0. Data merupakan atribut dari t+p yang memiliki nilai dataIn.
d. !ext merupakan atribut dari t+p yang memiliki nilai !,LL.
!ext digunakan sebagai penghubung antara satu !ode dengan
!ode yang lainnya.
e. *roses Lingking. arena t+p adalah !ode baru, maka -ead
dan tail memiliki nilai sama dengan t+p.
+. Si*e6nya akan terus bertambah 1 jika kondisi tersebut
terpenuhi.
g. $ebaliknya, jika si*e tidak sama dengan -, maka buat !ode
baru yang bernama t+p.
h. Data merupakan atribut dari t+p yang memiliki nilai dataIn.
i. !ext merupakan atribut dari t+p yang memiliki nilai !,LL.
!ext digunakan sebagai penghubung antara satu !ode dengan
!ode yang lainnya.
j. *roses Lingking . !ode akan ditambahkan di depan !ode yang
sudah ada.
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
6/26
Modul 1 Linked List dan Array
k. !ext merupakan atribut dari t+p yang memiliki nilai -ead.
ode baru yang bernama t+p ditambahkan sebelum !ode
yang sudah ada, sehingga t+p/nextnya adalah -ead dari
!ode yang sudah ada tersebut.
l. arena t+p yang merupakan !ode baru tersebut sudah
terhubung dengan !ode yang sudah ada, maka -ead 6nya di
pindah ke !ode yang bernama t+p. 5adi, -ead sama dengan
t+p.
2. Insert !ode
a. )uat +ungsi insert node, dimana parameter dari +ungsi
tersebut adalah double key, dan double dataIn.
b. )uat !ariable yang bertipe data bool yang bernama ketemu
yang diberi nilai false.
0. 0+p merupakan atribut dari !ode yang memiliki nilai -ead.
d. )uat perulangan '-ile, dimana kondisinya adalah ketemu
sama dengan false and t+p tidak sama dengan !,LL.
e. jika data yang merupakan atribut dari t+p sama dengan key,
maka nilai ketemu sama dengan true.
+. $ebaliknya, jika data dari t+p tidak sama dengan key, maka
t+p6nya bernilai t+p/next.
g. 5ika insert 6nya ditemukan, maka akan membuat !ode baru
yang bernama n! . n! yang merupakan atribut dari !ode
sama dengan tipe dataIn. %an next yang merupakan atribut
dari n! sama dengan !,LL.
h. *roses lingking , next yang merupakan atribut dari n! sama
dengan next yang merupakan atribut dari t+p.
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
7/26
Modul 1 Linked List dan Array
i. Print $lass. jika si*e sama dengan -, maka tampilkan isi
linked list kosong.
j. 5ika t+p tidak sama dengan -, maka 0etak isi linked list .%imana isi dari linked list itu adalah data yang merupakan
atribut dari t+p, dan t+p bernilai next .yang merupakan
atribut dari t+p
k. 'etak add front.
l. 'etak insert !ode.
3. e+ove all a etika kondisi si*e tidak sama dengan -. Maka, jika si*e sama
dengan 1, -eadnya bernilai !,LL, kemudian hapus tail 6nya.
arena sudah di hapus, maka tail bernilai !,LL. 7kurannya
akan terus berkurang selama kondisi tersebut terpenuhi.
b $ebaliknya, jika si*e tidak sama dengan 1, t+p yang
merupakan atribut dari !ode sama dengan -ead. etika next
yang merupakan bagian dari t+p tidak sama dengan tail t+p
nya akan bernilai t+p/next. emudian t+p akan menjadi
tail. Artinya, !ode tersebut akan menge0ek semua !ode
selama !ode tersebut bernilai 1, dan t+p/next akan menjadi
tail 6nya..
0 etika !ode sudah berada pada posisi terakhir, maka tail
/next bernilai !,LL.
d 8apus t+p.
. e+ove ba$k
a 5ika si*e bernilai 1, maka -ead sama dengan !,LL. emudian
hapus tailnya. arena tail sudah dihapus, maka tail bernilai
!,LL. 7kurannya akan terus berkurang 1 selama kondisi
tersebut terpenuhi.
b $ebaliknya jika si*e tidak sama dengan 1,
0 $ebaliknya, jika si*e tidak sama dengan 1, t+p yang
merupakan atribut dari !ode sama dengan -ead. etika next
yang merupakan bagian dari t+p tidak sama dengan tail t+p
nya akan bernilai t+p/next. emudian t+p akan menjadi
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
8/26
Modul 1 Linked List dan Array
tail. Artinya, !ode tersebut akan menge0ek semua !ode
selama !ode tersebut bernilai 1, dan t+p/next akan menjadi
tail 6nya..
d etika !ode sudah berada pada posisi terakhir, maka tail
/next bernilai !,LL.
e 8apus t+p.
b. Sour$e $ode
1in0lude2io*tream31in0lude20onio4h31in0lude2*tdli#4h31in0lude2time4h3
0la** _'{
private*tru0t (ode{
dou#le data;(ode 7net;
!;(ode 7 head;(ode 7 tail;int *ie;
pu#li0 _':{
head=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
9/26
Modul 1 Linked List dan Array
tail=tmp;tmp=tmpA3net;tailA3net=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
10/26
Modul 1 Linked List dan Array
BB'40ara po*i*i#ool ketemu = fal*e;(ode 7tmp = head;?hile :ketemu==fal*eDD tmp@=( E22endl;el*e {
0out22Ei*i linked li*t E22endl;(ode 7 tmp=head;?hile:tmp@=(et/ie:22endl;0out22endl;
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
11/26
Modul 1 Linked List dan Array
0out22endl;
praktikum4addFront:%;praktikum4print:;
0out22Eukuran adalah E22praktikum4>et/ie:22endl;
0out22endl;0out22endl;
praktikum4hapu*_ekor:5;praktikum4print:;
0out22E ukuran #erkuran> E22praktikum4>et/ie:22endl;0out22endl;0out22endl;
praktikum4hapu*_*emua:5;praktikum4print:;
0out22Eukuran ko*on> E22praktikum4>et/ie:22endl;
>et0h:;return ;!
0. 8asil o+pile
Gambar 1.3 8asil o+pile pembahasan nomor 1.
D. ANALISA
0la** _'
{
0la** _' akan menampung suatu bentuk tipe data baru dalam
linked list . %imana class merupakan nama _'4
private*tru0t (ode{ dou#le data; (ode 7net;!;(ode 7 head;(ode 7 tail;
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
12/26
Modul 1 Linked List dan Array
int *ie;
private mengakses sour$e $ode yang ada di dalam kelas tersebut
saja. *tru0t (ode dimana node variable yang bertipe data *tru0t4
%imana variable data sebagai simpanan dalam membuat node bertipe
data dou#le4 (ode 7 net dimana net adalah artibut dari node,
dimana net ber+ungsi untuk menghubungkan node ke node yang lain.
(ode 7 head; dimana head merupakan artibut dari node4 (ode 7
tail; dimana tail adalah artibut dari node4 int *ie; dimana
*ie adalah variable yang bertipe data int ,dimana ber+ungsi untuk
membuat ukuran suatu node4
pu#li0 _':{ head=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
13/26
Modul 1 Linked List dan Array
*ieAA;!
.oid _' merupakan bagian dari +ungsi hapu*_*emua4 etika *ie
tidak sama dengan 4 5ika *ie bernilai ', maka head sama dengan (
-
8/18/2019 MODUL I Dini Fix Double Linked List
14/26
Modul 1 Linked List dan Array
tailA3net=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
15/26
Modul 1 Linked List dan Array
BBlinkin>
tmpA3net=head;head=tmp;*ie;
!5ika tidak, maka akan membuat (ode baru yang bernama tmp4 %imana
tmpA3data bernilai data"n4 arena (ode sebelumnya sudah ada maka,
tmpA3net bernilai head dari (ode yang sebelumnya. arena (ode baru
sudh ditambahkan, maka headnya akan dipindah ke (ode baru tersebut.
$elanjutnya *ie akan bertambah '4
void _'in*ertnode : dou#le key, dou#le data"n{BB'40ara po*i*i
#ool ketemu = fal*e;(ode 7tmp = head;?hile :ketemu==fal*eDD tmp@=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
16/26
Modul 1 Linked List dan Array
bernilai ( E22endl;el*e {
0out22Ei*i linked li*t E22endl;(ode 7 tmp=head;?hile:tmp@=(et/ie:22endl;0out22endl;0out22endl;
0out22Eaddfront E22endl22endl;praktikum4addFront:5;praktikum4addFront:';praktikum4addFront:'5;praktikum4addFront:$;praktikum4print:;0out22Eukuran adalah E22praktikum4>et/ie:22endl;0out22endl;0out22endl;0out22Ein*ert node E22endl22endl;praktikum4in*ertnode:$,5;0out22Eukuran adalah E22praktikum4>et/ie:22endl;
praktikum4print:; 0out22endl22endl;
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
17/26
Modul 1 Linked List dan Array
0out22Emenam#ahkan node di depan node *e#elumnya E22endl22endl;
praktikum4addFront:';praktikum4print:;0out22Eukuran adalah E22praktikum4>et/ie:22endl;
0out22endl;0out22endl;
0out22Emenam#ahkan node di depan node *e#elumnya E22endl22endl; praktikum4addFront:%;
praktikum4print:;0out22Eukuran adalah E22praktikum4>et/ie:22endl;0out22endl;0out22endl;
0out22Ehapu* tail E22endl22endl;praktikum4hapu*_ekor:;
praktikum4print:;0out22E ukuran #erkuran>
E22praktikum4>et/ie:22endl;0out22endl;0out22endl;
0out22Ehapu* *emua E22endl22endl;praktikum4hapu*_*emua:;praktikum4print:;0out22Eukuran ko*on> E22praktikum4>et/ie:22endl;
>et0h:;return ;
!int main merupkan sebuah +ungsi main4 %imana +ungsi ini harus ada
pada saat membuat program. %idalam +ungsi main, terdapat & _'
praktikum (praktikum adalah sebuah variable dari 0la** _'4
praktikum4addFront: % digunakan untuk menginput kan data
menggunakan +ungsi addfront4 praktikum4print:; (digunakan
untuk menampilkan data yang di input kan. 0out22Eukuran adalah G;
(untuk menampilkan state+ent ukuran adalah.
22praktikum4>et/ie:22endl4 (untuk mengambil setiap perubahan
ukuran (*ie menggunakan +et-od Assesor%get) .
praktiku+.insertnode%56)4 ( digunakan untuk menginput kan data
menggunakan +ungsi in*ertnode: . praktikum4hapu*_*emua:;
(digunakan untuk menghapus semua linked li*t yang ada.
praktikum4hapu*_ekor :; (digunakan untuk menghapus tail dari
linked li*t yang ada.
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
18/26
Modul 1 Linked List dan Array
E. KESIMPULAN
)erdasarkan praktikum yang telah dilaksanakan dapat disimpulkan
bahwa &
1. Array adalah struktur data yang menampung satu data yang sejenis
(bertipe data sama yang diwakili oleh satu nama !ariabel. Array dua
dimensi menyimpan data baik dalam bentuk baris maupun dalam bentuk
kolom. arena akan menyimpan data ke dalam baris dan kolom, maka
dibutuhkan dua buah nilai indeks. %alam membuat matriks array dua
dimensi kita dapat menggunakan perulangan yaitu +or dimana telah
diinputkan nilainya.
2. Single Linked List hanya memiliki satu penunjuk arah yaitu ne;t,
didalam Single Linked List langkah yang pertama yang wajib dibuat yaitu,
nama $lass dimana sebagai nama konstruktor yang menampung suatu
bentuk tipe data baru dalam Linked list . %imana terdiri dari private dan
publi$. %imana pri!ate ber+ungsi mengakses sour0e 0ode yang ada di
dalam kelas itu saja, dan pri!ate membuat suatu node yang didalam node
memiliki atribut berupa ne;t, dan publi0 ber+ungsi mengakses seluruh
program yang ditampung dalam stru0t node. %i dalam linked list terdapat
operasi yaitu penyisipan dan penghapusan.
3. Double Linked List sedikit berbeda dengan Single Linked List
yaitu tinggal menambahkan pointer pre! dan harus diawali dengan
pembuatan stru0t node. emudian, mendeklarasikan beberapa node yang
akan digunakan sebagai head, tail, node akti+ (0urr dan node sementara
(node. $ama seperti pada pembuatan Single Linked List dalam
pembuatan Double Linked List se0ara umum, kode yang dibuat hampir
sama dengan pembuatan Single Linked List. 8anya bedanya, pada Double
Linked List pointer kiri dan kanan dihubungkan dengan suatu node.
*ertama6tama, tentunya perlu diuji apakah head bernilai 7LL yang
artinya belum ada satu node pun yang ter0ipta. Apabila demikian, maka
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
19/26
Modul 1 Linked List dan Array
node yang dibuat akan menjadi head. ode akti+ (0urr pun diset sesuai
node yang dibuat. %an sebagai konsekuensi dari Double Linked List maka
diatur pointer pre! pada head menunjuk ke 7LL. 7ntuk membebaskan
memori teralokasi, dilakukan dengan pemanggilan +ungsi +ree(. perasi
pada linked list tidak hanya pembuatan dan pen0etakan. $uatu saat,
mungkin perlu untuk menghapus node yang terletak di tengah6tengah list.
Atau bahkan mungkin perlu menyelipkan node di tengah6tengah node.
. perasi linked list dibagi menjadi 2 yaitu, operasi penyisipan dan
penghapusan. %imana dalam menambahkan node kita dapat menggunakan
penyisipan dimana kita dapat menyisipkan node melalui Insert first ,
Insert after , Insert last , Insert before. $edangkan penghapusan kita dapat
melakukan penghapuasan node dari Delete after , Delete last , Delete first ,
%imana penghapusan simpul tertentu ada dua ma0am, yaitu Delete "
!ode, Delete !ode.
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
20/26
Modul 1 Linked List dan Array
DATAR PUSTAKA
"1# $urga.2--. Algorit+a Pe+rogra+an.
-
8/18/2019 MODUL I Dini Fix Double Linked List
21/26
Modul 1 Linked List dan Array
T!"a# 1
1. Membuat double linked list.
2. Membuat double linked list menggunakan array.
*enyelesaian &
1. Membuat double linked list.
1.1 sour$e $ode1in0lude 2io*tream3
1in0lude 20onio4h31in0lude 2*trin>3
u*in> name*pa0e *td;
0la** {private
*tru0t node {*trin> nama;*trin> nim;node 7 net;node 7 #efore;
!;
node 7head;node 7tail;int *ie;
pu#li0 : {
head=( nim;void in*ert#efore :*trin> nim, *trin> nama, *trin> nim;void tampil :;void hapu* :; BBhapu* #elakan>
!;
void hapu* : {node 7 tmp;tmp=tail;if :*ie== {
0out22EHana )da inked i*t E;!el*e {
tail=tmpA3#efore;tmpA3#efore=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
22/26
Modul 1 Linked List dan Array
void in*ert#efore :*trin> nim, *trin> nama, *trin> nim {node 7 tmp= ne? node;node 7 tmp';tmp'=head;
tmpA3nama=nama;tmpA3nim=nim;tmpA3net=(
-
8/18/2019 MODUL I Dini Fix Double Linked List
23/26
Modul 1 Linked List dan Array
a;a4addf:EJanulE,EF''&99E;a4addf:EKiya*E,EF''&'9E;a4addf:EaryaE,EF''&56E;a4addf:ErivalE,EF''&6E;
a4tampil:;0out22endl;0out22endl;0out22E"n*ert Kefore LnLnE;a4in*ert#efore:EF''&56E,EMidhoE,EF''&5$E;a4tampil:;0out22endl;0out22endl;0out22ENapu* Kelakan> LnLnE;a4hapu*:;a4tampil:;>et0h :;
!
1.2 hasil $o+pile
Gambar 1.$ 8asil $o+pile double linked list.
2. Membuat double linked list menggunakan array.2.1 sour$e $ode1in0lude 2io*tream31in0lude 20onio4h3
u*in> name*pa0e *td;BB)+ 0la**
{private
*tru0t node{
int data[%];node7net;
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
24/26
Modul 1 Linked List dan Array
!;node7head;node7tail;int *ie;
pu#li0
:{
head = (
-
8/18/2019 MODUL I Dini Fix Double Linked List
25/26
Modul 1 Linked List dan Array
{tmpA3net = tmp'A3net;tmp'A3net = tmp;*ie;
!
!void print:{
node7tmp;tmp = head;if :*ie == {
0out22Einked i*t ko*on>E;!el*e{
?hile :tmp @= tailA3net{
for :int i = ; i 2 %; i{
0out22Edata [E22i22E] = E22 tmpA3data[i]22E E;
!0out22endl;tmp=tmpA3net;
!!0out22endl22endl;
!void main:{
;int a[%] = { ', %, 5 !, #[%] = { $, &, 6 !, 0[%] = { , 8, 9 !;4)ddfront:a;4)ddfront:#;4in*ertKefore:0,a;4print:;*y*tem:Epau*eE;!
2.2 hasil $o+pile
Gambar 1.% 8asil $o+pile double linked list menggunakan arra
Praktikum Algoritma dan Struktur Data
-
8/18/2019 MODUL I Dini Fix Double Linked List
26/26
Modul 1 Linked List dan Array