1
6.3 & 7.3
NESTED LOOP
Linked List
(
List yang di-Link
satu dengan
lainnya
)
3
apa itu
List
?
Contoh sebuah LIST
int A[5];
0 1 2 3 4
Array satu dimensi
Disebut juga :
Vector
5
int A[5];
0 1 2 3 4
biasa diilustrasikan sebagai berikut :
Kadang-kadang diilustrasikan
sebagai berikut :
0 1 2 3 40 1 2 3 4
int A[5];
A[0]
List dengan 5 elemen
7
0 1 2 3 4
int A[5];
List dengan 5 elemen, dengan alamat CONTIGUOUSH21D8 H21DA H21DC H21DE H21E0 #include<stdio.h> void main() { int A[5]; int I;
for (I=0; I<=4; I++ )
printf( “\n%X”, &A[I] ); } akan tercetak : 21D8 21DA 21DC 21DE 21E0
Tiap elemen 2 BYTE
9
Alamat atau Address
adalah nomor Byte
RAM 64 MB
0 1 2 3 4
dengan:
int A;
terbentuk sebuah variabel (Elemen) sebesar 2 Byte
2 BYTE
Nomor BYTE pertama (paling kiri) - sering disebut MSB -
11
0 1 2 3 4
int A[5];
List dengan 5 elemen
ini
bukan
Linked List
bukan List yang di-link satu dengan yang lainnya
tapi List yang bersisian atau bergandengan atau
berurutan (
contiguous
) satu dengan lainnya,
sedemikian rupa sehingga alamat tiap elemen
bersambung satu dengan yang lainnya
Linked List
List
yang di-link satu dengan lainnyaYang dimaksud dengan
List
disini adalah : sekumpulanelemen
yang digabungmenjadi satu kelompok yang
disebut :
structure,
atau
Vertex
, atauNode,
atauTitik,
setiap elemenmempunyai tipe data tersendiri
13
Linked List
Contoh sebuah Simpul yang dinyatakan dengan:
INFO LINK
typedef struct Node { int INFO;
struct Node *LINK; };
typedef struct Node Simpul;
Tipe : integer
untuk menyimpan data
tipe : pointer, pointer untuk menunjuk node atau Simpul
INFO LINK
typedef struct
Node
{
int
INFO
;
struct
Node
*
LINK
;
};
typedef struct
Node
Simpul
;
Tulisan dengan warna biru atau
merah, adalah nama yang kita karang sendiri.
Sedangkan tulisan dengan warna hitam adalah ketentauan dalam
15
Contoh 4 buah simpul Linked List dalam memory 25 12 17 10 (1) (2) (3) (4)
Proses pembuatan
Simpul
dan pembuatan
Link
sampai terbentuk
17
Perhatikan memory berikut ini :
Akan dibuat sebuah Simpul Awal
(simpul pertama)
19
Simpul pertama (1) sudah dibuat
misal alamatnya = H1000
H1000
INFO LINK
(1)
H1000
INFO LINK
Kemudian INFO akan diisi
dengan nilai 25
21
25
H1000
INFO LINK
INFO simpul pertama (1) sudah diisi dengan nilai 25
(1)
25
Misal akan dibuat
sebuah simpul baru (simpul kedua)
H1000
INFO LINK
23
25
H1000
INFO LINK
Sudah dibuat simpul kedua (2) Misal alamatnya = H0800
H0800
INFO LINK
(1)
(2)
Alamat simpul baru, tidak mesti lebih besar dari alamat simpul pertama
25
H1000
INFO LINK
H0800
INFO LINK
INFO simpul kedua (2) akan diisi dengan 12
(1)
25
25
H1000
INFO LINK
INFO simpul kedua (2)
sudah diisi dengan nilai 12
12
H0800
INFO LINK
(1)
25
H1000
INFO LINK
Akan di-
link
simpul pertama (1)
dengan simpul kedua (2)
12
H0800
INFO LINK
(1)
27
25
0800 H1000INFO LINK
Simpul pertama (1) sudah di-
link
dengan simpul kedua (2)
12
H0800
INFO LINK
LINK simpul pertama (1) diisi dengan alamat
simpul kedua (2)
(1)
(2)
Bagaimana mengisi LINK simpul pertama dengan alamat simpul kedua akan diterangkan kemudian
25
0800 H1000 INFO LINK12
H0800 INFO LINK (1) (2)Instruksi untuk meng-link
yaitu mengisi alamat simpul (2) kedalam LINK simpul (1)
29
25
0800 H1000 INFO LINK12
H0800 INFO LINK (1) (2)Kemudian : Akan dibuat simpul (3), dan
25
0800 H1000 INFO LINK12
H0800 INFO LINK (1) (2) Sudah dibuat simpul ketiga (3) Misal alamatnya = H140017
31
25
0800 H1000 INFO LINK12
H0800 INFO LINK (1) (2)Akan di-link simpul kedua (2) dengan simpul ketiga (3)
Kemudian :
17
H1400
INFO LINK
25
0800 H1000 INFO LINK12
1400 H0800 INFO LINK (1) (2) Simpul kedua (2) sudah di-linkdengan simpul ketiga (3)
17
33
25
0800 H1000 INFO LINK12
1400 H0800 INFO LINK (1) (2)17
1100 H1400 INFO LINK (3) Dan seterusnya dibuat simpul (4), INFO simpul (4) diisi 10dan simpul (3) di-link dengan simpul (4)
10
H1100
INFO LINK
25
0800 H1000 INFO LINK12
1400 H0800 INFO LINK (1) (2)17
1100 INFO LINK10
H1100 INFO LINK (4) Sekarang sudah tercipta 4 buah simpul,dan sudah ter-link satu dengan lainnya, sehingga membentuk sebuah Linked List
35
Untuk memudahkan melihat hubungan
(link) antara satu simpul dengan
simpul lainnya, maka semua isi
LINK
(yang berbentuk angka ) diganti atau
direpresentasikan
dengan
tanda
panah
sehingga ilustrasinya menjadi sebagai
berikut :
25
0800 H1000 INFO LINK12
1400 H0800 INFO LINK (1) (2)17
1100 INFO LINK10
H1100 INFO LINK (4)Link dalam bentuk angka alamat tidak diperlukan lagi
37
25
H1000 INFO LINK12
H0800 INFO LINK (1) (2)17
H1400 INFO LINK (3)10
H1100 INFO LINK (4)25
H1000 INFO LINK12
H0800 INFO LINK (1) (2)17
INFO LINK10
H1100 INFO LINK (4)Alamat sebuah simpul, sebenarnya, tidak perlu diketahui atau dinyatakan
39
25
INFO LINK12
INFO LINK (1) (2)17
INFO LINK (3)10
INFO LINK (4) Linked List empat buah simpuldapat dinyatakan demikian ini,
25
INF O LINK12
(1) (2)17
(3)10
(4) Linked List empat buah simpul inidapat disederhanakan gambarnya menjadi :
INF O LINK INF O LINK INF O LINK
41
3. 01
Linked List adalah List yang di link satu
dengan yang lainnya. Sedangkan list itu
sendiri
adalah
merupakan
gabungan
beberapa elemen yang dijadikan satu
structure
atau
record
yang dibentuk
dengan perintah
struct
Dalam buku ini akan dibicarakan 4 macam
linked list sebagai berikut :
3. 01
I.
LINEAR SINGLY LINKED LIST
II.LINEAR DOUBLY LINKED LIST
III.
CIRCULAR SINGLY LINKED LIST
43
3. 01
I. LINEAR SINGLY LINKED LIST
25 FIRST
12 17 10
LAST
II. LINEAR DOUBLY LINKED LIST
25 FIRST
12 17 10
3. 01
III. CIRCULAR SINGLY LINKED LIST
25 FIRST
12 17 10
LAST
IV. CIRCULAR DOUBLY LINKED LIST
45
3. 02
LINKED LIST LURUS
3. 02
1.1. ILUSTRASI
LINEAR SINGLY LINKED LIST
25 FIRST 12 17 10 LAST (1) (2) (3) (4) FIRST LAST atau
47 3. 02 25 FIRST 12 17 10 LAST (1) (2) (3) (4) 10 FIRST 17 12 25 LAST (4) (3) (2) (1) atau (1) (2) (3) (4) (1) (2) (3) (4) Urutan insert Urutan delete Urutan insert Urutan delete
3. 02
INSERT :
Masuk, Simpan, Tulis
49 25 FIRST 12 17 10 LAST (1) (2) (3) (4) 10 FIRST 17 12 25 LAST (4) (3) (2) (1) (1) (2) (3) (4) (1) (2) (3) (4) Urutan insert Urutan delete Urutan insert Urutan delete Ilustrasi-1 Ilustrasi-2
Pertanyaan : Mana yang mengikuti prinsip STACK, dan mana yang mengikuti prinsip QUEUE,
3. 02
1.1. ILUSTRASI
Keterangan :
Dari ilustrasi diatas, dapat diterangkan sebagai berikut: Ada 4 simpul, simpul no (1) sampai dengan no (4)
Setiap simpul (record) terdiri dari dua elemen (field) yaitu : Field INFO misal bertipe integer.
Field LINK bertipe pointer
25 FIRST
12 17 10
LAST
51 3. 02 25 FIRST 12 17 10 LAST (1) (2)
Dari nama pointer FIRST dan LAST
dapat diperkirakan bahwa record no (1) yang pertama kali dibuat dan record no (4) yang terakhir dibuat. Walaupun secra teknis dapat saja bukan demikian.
Simpul pertama no (1) ditunjuk oleh pointer FIRST
dan simpul terakhir no (4) ditunjuk oleh pointer LAST
1.2 PROSES
2a.
2b.
2c.
2d.
2e.
2f.
2g.
Pembuatan Record Awal (inisialisasi)
Insert Kanan (Insert Akhir)
Insert Kiri (Insert Awal)
Insert Tengah
Delete Kanan
Delete Kiri
53
3.03
Ilustrasi sebuah Simpul (Vertex, atau Node, atau Record)
Nama field Tipe Isi
: LINK
: pointer
: akan diisi dengan
alamat record berikutnya
Nama field Tipe Isi
: INFO
: integer
: akan diisi data
Tipe data tentunya disesuaikan dengan keperluan. Disini
diambil saja contoh yang sederhana dimana data yang akan disimpan adalah bernilai integer.
3.03
Struktur sebuah Simpul
Untuk „memberitahukan komputer „
bahwa kita memerlukan suatu Simpul atau record dengan tipe strukur demikian ini,
perlu ditulis intruksi-instruksi sebagai berikut :
typedef struct
Node
{
int
INFO
;
struct
Node
*
LINK
;
};
55
3.03
typedef struct
Node
{
int
INFO
;
struct
Node
*
LINK
;
};
typedef struct
Node
Simpul
;
Simpul
*
P
, *
FIRST
, *
LAST
;
Disiapkan 3 buah variabel pointer, yaitu : P, FIRST dan LAST
yang kesemuanya berkaitan dengan simpul atau record atau node
yang bertipe Simpul Masih banyak cara penulisan lain
untuk maksud yang sama.
Disini diambil suatu cara yang dianggap paling sederhana.
3.03 typedef struct Node {
int INFO;
struct Node *LINK; };
typedef struct Node Simpul; Simpul *P, *FIRST, *LAST;
Disini :
Simpul
Adalah nama tipe sebagaimana nama tipe yang telah disediakan oleh Bahasa C seperti : int, long int, float, dan sebagainya. Bila int adalah nama tipe suatu variable, maka Simpul disini adalah nama tipe dari suatustructure atau record, dimana structure tersebut terdiri dari dua field, yaitu :
57
3. 04
typedef struct Node {
int INFO;
struct Node *LINK;
};
typedef struct Node Simpul; Simpul *P, *FIRST, *LAST;
1.2.1. Pembuatan Simpul ( Baru )
Perhatikan kembali instruksi untuk menyiapkan tipe sebuah simpul sebagai berikut :
3. 04
1.2.1. Pembuatan Simpul ( Baru )
Instruksi untuk membuat sebuah record baru :
P = (Simpul *) malloc(sizeof(Simpul));
Terbentuk sebuah simpul yang alamatnya disimpan dalam pointer P atau disebut simpul yang ditunjuk oleh pointer P, yang dapat diilustrasikan sebagai berikut
59
3. 04
P = (Simpul *) malloc(sizeof(Simpul));
malloc :
Maksudnya : memory allocation yaitu mengalokasikan memory sebesar atau seukuran (sizeof) yang diperlukan
3. 04
P = (Simpul *) malloc(sizeof(Simpul));
21C8
INFO LINK
61 3. 04 21C8 P INFO LINK H21C8
P
Ilustrasi fisik dalam memory diatas, dapat digambarkan dengan ilustrasi diagram sebagai berikut :
3. 04
Contoh (sederhana) program selengkapnya untuk membuat sebuah record atau simpul
yang alamat simpul tersebut dicatat dalam pointer P.
#include <stdio.h> #include <stdlib.h> #include <ctype.h>
typedef struct Node { int INFO;
struct Node *LINK; };
typedef struct Node Simpul;
Simpul *P, *FIRST, *LAST; main()
{ int X;
63 3. 04 main() { int X; scanf(“%i”, &X); p = (Simpul *)alloc(sizeof(Simpul)); P->INFO = X; P->LINK = NULL; } Terbentuk sebuah simpul yang alamatnya disimpan dalam pointer P atau disebut simpul yang ditunjuk oleh pointer P
Nilai X
(misal 25 hasil input sebelumnya) disimpan dalam elemen INFO Field LINK berisi NULL
artinya pointer LINK tidak menunjuk kesuatu alamat tertentu
25
P
3. 04
P->INFO = X;
P
P->INFO
maksudnya : Field INFO suatu simpul, yang simpulnya sedang ditunjuk oleh pointerP
dalam bahasa C,
ditulis dengan dua karakter yaitu tanda - (minus)
65
3. 04
P->LINK = NULL;
25
\0P
P->LINK
field LINK suatu simpul, yang simpulnya sedang ditunjuk oleh pointerP
0 0 0 0 0 0 0 0
karakter NULL3. 04
25
\0P
Nilai pointer yang berisi NULL
sering diilustrasikan sebagai panah „ground‟ sebagai berikut :
25
P
67
3.05
Perhatikan kembali LINEAR SINGLY LINKED LIST
yang akan dibuat sebagai yang diilustrasikan berikut ini :
25
FIRST
12 17 10
LAST
3.05
1.2.2. Pembuatan Simpul Awal.
Simpul awal, maksudnya adalah simpul yang pertama kali dibuat. Setelah itu simpul baru
dapat ditambahkan baik disebelah kanan, maupun disebelah kiri simpul simpul yang sudah ada.
25
FIRST
12 17 10
LAST
69
3.05
Perhatikan kembali struktur sebuah simpul, dan variabel-variabel yang diperlukan
typedef struct Node { int INFO;
struct Node *LINK; };
typedef struct Node Simpul;
Simpul *P, *FIRST, *LAST; int X; Dalam memory P FIRST LAST X Menyatakan struktur Simpul dan menyiapkan variabel Perhatikan :
Ada 3 buah pointer : P ,
FIRST, dan LAST
3.05
void Awal (void) { int X; scanf(“%i”, &X); P=(Simpul*)malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LINK = NULL;
Fungsi untuk membuat simpul awal
1) 2) 3) 4) 5)
71 3.05 P=(Simpul*)malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LINK = NULL; 1) 2) 3) 4) 5)
P = (Simpul *) malloc(sizeof(Simpul));
Ada 5 instruksi pokok yang perlu kita perhatikan :
1)
Terbentuk sebuah simpul yang ditunjuk oleh pointer P yang dapat diilustrasikan dengan gambar sebagai
berikut :
3.05
P
1000
P FIRST LAST X
73
3.05
P
Sebuah simpul yang ditunjuk oleh pointer P ( alamatnya dicatat dalam pointer P )
P P P P P P Banyak cara menggambarkan ilustrasi pointer P menunjuk sebuah simpul
3.05
P
Sebuah simpul yang ditunjuk oleh pointer P ( alamatnya dicatat dalam pointer P )
75 3.05 P=(Simpul*)malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LINK = NULL; 1) 2) 3) 4) 5)
P->INFO = X;
2)
25
P
3.05
P
1000 P FIRST LAST X25
100077
3.05
25
P
Field ini namanya :
Field ini namanya : P->LINK
P->INFO
Dengan perintah : printf(“%i”, P->INFO); Akan tercetak : 25
25
FIRST
12 17 10
LAST
(1) (2) (3) (4)
Simpul pertama selalu ditunjuk Oleh pointer FIRST
79 3.05 P=(Simpul*)malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LINK = NULL; 1) 2) 3) 4) 5)
FIRST = P;
3)
25
P
FIRST 25P
FIRST 25P
FIRST3.05 P 1000 1000 P FIRST LAST X
25
1000 FIRST81
3.05
25
FIRST
Field ini namanya :
Field ini namanya : P->LINK atau FIRST->LINK P->INFO atau FIRST->INFO P
25 FIRST
12 17 10
LAST
(1) (2) (3) (4)
Simpul terakhir selalu ditunjuk Oleh pointer LAST
83 3.05 P=(Simpul*)malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LINK = NULL; 1) 2) 3) 4) 5)
LAST = P;
4)
25
P
FIRST LAST 25P
FIRST 25P
LAST LAST FIRST3.05 1000 1000 1000 P FIRST LAST X
25
1000 FIRST LAST85 3.05
25
FIRST Field ini namanya :Field ini namanya : P->LINK atau FIRST->LINK atau LAST->LINK P->INFO atau FIRST->INFO atau LAST->INFO P LAST
3.05 P=(Simpul*)malloc(sizeof(Simpul)); P->INFO = X; FIRST = P; LAST = P; P->LINK = NULL; 1) 2) 3) 4) 5)
P->LINK = NULL;
5)
P
FIRST LAST87 3.05
25
P 1000 1000 1000 P FIRST LAST X25
1000 FIRST LASTSudah terbentuk sebuah Simpul awal
3.05
LATIHAN
DI
89 3.05
25
P
FIRST LAST3.05
25
P
FIRST LAST
91 3.05
25
P
FIRST LASTPertanyaan : Ada berapa buah pointer yang terlihat - Apa nama masing-masing pointer - Apa isi masing-masing pointer
3.05
25
P
FIRST LAST 1 2 3 4Jawab : Ada 4 buah pointer
1 2
No Nama Isi Pointer Pointer pointer
P &(1) FIRST &(1)
93 3.05
25
P
FIRST LAST 1 2 3 4TRUE atau FALSE Kondisi berikut ini
if( P == FIRST )
if( FIRST == LAST )
if( FIRST->LINK == LAST->LINK ) if( FIRST->INFO = 25 )