Anda di halaman 1dari 31

Linked List

Apakah itu ?
Sejumlah Obyek yang di Link satu dengan lain hingga
membentuk list
Obyek merupakan gabungan beberapa elemen data
yang dikelompokkan (structure atau record)
Tiap elemen dapat memiliki tipe data sendiri-sendiri
Dibutuhkan pointer untuk menghubungkan obyek
satu dan yang lain
Contiguous dan Linked List
Contiguous List : Static
Kumpulan obyek yang bersambung atau bersisian
hingga membentuk sebuah list.
Alamat dalam memori saling bersambung
(contiguous)
Tipe data tiap elemen SAMA.
Contoh : Array satu dimensi

0 1 2 3 4 5 6
Contiguous dan Linked List
Linked List : Dynamic
Obyek yang terdapat dalam linked list : SIMPUL
Tiap SIMPUL terdiri dari 2 elemen
Elemen pertama berisi data, misal nilai numerik
Elemen kedua bertime pointer, berisi alamat simpul
berikut nya yang diilustrasikan dengan garis panah
Alamat simpul tidak saling bersambung
Alokasi dalam memori bersifat dinamis, artinya
SIMPUL dapat ditambah atau dihapus ketika proses
berlangsung
Ilustrasi
12

H800

25 10

H1000 H1100
17

H1400
Beberapa jenis struktur Linked List
Beberapa jenis struktur linked list adalah sebagai
berikut:
LINEAR SINGLY-LINKED LIST
LINEAR DOUBLY-LINKED LIST
CIRCULAR SINGLY-LINKED LIST
CIRCULAR DOUBLY-LINKED LIST
Jenis Struktur Linked List
1. LINEAR SINGLY-LINKED LIST

FIRST LAST
LIN

LIN

LIN

LIN
INF

INF

INF

INF
O

O
K

K
25 12 17 10
Jenis Struktur Linked List
2. LINEAR DOUBLY-LINKED LIST

FIRST LAST

RIGH
RIGH

RIGH

RIGH
LEF

LEF

LEF

LEF
INF

INF

INF

INF
O

O
T

T
25 25
12 25
17 25
10
Jenis Struktur Linked List
1. CIRCULAR SINGLY-LINKED LIST

FIRST LAST
LIN

LIN

LIN

LIN
INF

INF

INF

INF
O

O
K

K
25 12 17 10
Jenis Struktur Linked List
2. CIRCULAR DOUBLY-LINKED LIST

FIRST LAST

RIGH
RIGH

RIGH

RIGH
LEF

LEF

LEF

LEF
INF

INF

INF

INF
O

O
T

T
25 25
12 25
17 25
10
LINEAR SINGLY-LINKED LIST
FIRST LAST

LIN

LIN

LIN

LIN
INF

INF
INF

INF
O

O
K

K
25 12 17 10

Adalah linked list lurus dengan pointer tunggal. Jadi


dalam satu struktur simpul, hanya ada satu elemen
atau variabel yang bertipe pointer, yang isinyga
adalah alamat simpul berikutnya atau next node
(simpul)
LINEAR SINGLY-LINKED LIST
FIRST LAST

LIN

LIN

LIN

LIN
INF

INF
INF

INF
O

O
K

K
25 12 17 10

(1) (2) (3) (4)

Keterangan :
 Ada 4 simpul, yaitu Simpul no (1) sampai dengan no (4)
 Setiap simpul (record) terdiri dari dua elemen (field) yaitu :
 Field INFO misal bertipe int untuk data/informasi
 Field LINK bertipe pointer untuk alamat simpul berikutnya
 Simpul no (1) ditunjuk oleh pointer FIRST
 Simpul no (4) ditunjuk oleh pointer LAST
Mendeklarasikan struktur Simpul
typedef struct Node{
int INFO;
struct Node *LINK;
};
typedef struct Node Simpul;

Keterangan
Simpul adalah tipe data buatan kita yang berbentuk
structure atau record yang terdiri dari 2 elemen yaitu :
INFO yang bertipe int
LINK yang bertipe pointer
Inisialisasi Linked List
typedef struct Node{
Dengan FIRST = NULL
int INFO;
artinya pointer FIRST
struct Node *LINK;
};
akan berisi NULL
typedef struct Node Simpul;
Simpul *P, *FIRST, *LAST ; FIRST
\0
void initialize()
{
FIRST = NULL;
}
Membuat Simpul
Linked List adalah kumpulan simpul-simpul
Dibuat satu persatu
Jumlahnya tidak terbatas (tergantung memori)
Keberhasilan membuat simpul tergantung dari
pemeriksaan pointer P:
Jika pointer P berisi BUKAN NULL : berhasil
Jika pointer P berisi NULL : gagal
Membuat Simpul
void BUAT_SIMPUL(int x)
/*Kemudian dipanggil pada
{
program main misal seperti
P= (Simpul*)
ini :*/
malloc(sizeof(Simpul));
int main()
if(P!=Null)
{
 {
 P->INFO = X; -
 } -
else scanf("%i", &x);
 { printf("pembuatan simpul  BUAT_SIMPUL(x);
gagal"); -
 } -
} }
Membuat Simpul (awal)
Sebuah program mungkin menggunakan lebih daru satu
Linked List dengan struktur record yang sama, misal struktur
Simpul tapi tetap hanya ada satu yang simpul awalnyanya
ditunjuk oleh pointer FIRST karena sebuah pointer tidak bisa
menunjuk lebih dari satu buah simpul
Secara sederhana, instruksi pembuatan simpul Awal dapat
diperlihatkan sebagai berikut
scanf(“%i”, &x)
P=(Simpul *……….)
P->INFO = x;

FIRST = P;
LAST = P;
P->LINK = NULL
Membuat Simpul (awal)
 void BUAT_SIMPUL(int x)
 void AWAL()
{ {
 if(FIRST == NULL)
 P= (Simpul*) malloc(sizeof(Simpul));  {
 if(P!=NULL)  FIRST = P;
 {  LAST = P;
 P->INFO = x;  P->LINK = NULL;
 }  }
 else  else
 { printf("pembuatan simpul gagal");  { printf("Linked LIST sudah
 } ada");}
}
}

Fungsi Pertama Fungsi kedua


Ilustrasi
FIRST
P

INFO

LINK
25

Pada INFO :
Simpul ini ditunjuk oleh dua pointer yaitu P dan FIRST, maka elemen ini namanya ada dua:
P->INFO atau FIRST->INFO
Pada LINK juga ditunjuk oleh dua pointer P dan FIRST (atau P dan LAST) maka elemen ini
namanya :
P->LINK
FIRST-> LINK
 Atau
LAST->LINK
Membuat Simpul (INSERT KANAN)
FIRST LAST

LIN

LIN

LIN

LIN
INF

INF
INF

INF
O

O
K

K
25 12 17 10

 void InsertKanan()
void InsertKanan()  {
 if(LAST!=NULL)
{
 {LAST->LINK = P;
 LAST->LINK = P;  LAST = P;
 LAST = P;  P->LINK = NULL;
 }
 P->LINK = NULL;
 else
 }  { printf("LINKED LIST belum ada");}
 }
Membuat Simpul (INSERT KIRI)
FIRST
LAST

p
LIN

LIN

LIN

LIN

LIN
INF

INF

INF
INF

INF
O

O
K

K
12 25 12 17 10

void InsertKiri()
{
 if(FIRST!=NULL)
 {
 P->LINK = FIRST;
 FIRST = P;

 }
 else
 {
 printf("LINKED LIST belum ada");
 }
}
Menghapus Simpul (Delete)
Menggunakan instruksi :

free(nama pointer);
Contoh :

free(Q);
Menghapus Simpul (Delete Kiri)
void DeleteKiri() FIRST

{ Q
 Q=FIRST;

INFO

INFO
LINK

LINK
 FIRST=Q->LINK;
 free(Q); 25 12
}
Menghapus Simpul (Delete Kiri)
FIRST
Instruksi Q=FIRST;
Q LINK

LINK
INF
INF

pointer Q ditempatkan
O

O
25 12 menunjuk simpul pertama

FIRST
Instruksi FIRST=Q->LINK;
Q
LINK

LINK

pointer FIRST dipindahkan


INF

INF
O

menuju simpul berikutnya


25 12
FIRST

Q Instruksi free(Q);
LINK
INF

simpul yang ditunjuk


O

12 pointer Q dihapus
Menghapus Simpul (Delete Kanan)
void DeleteKanan() FIRST LAST

{ Q

 free(Q)

INFO

INFO

INFO
LINK

LINK

LINK
 LAST = Q;
 LAST->LINK =NULL; 25 12 10
}
Menghapus Simpul (Delete Kanan)
FIRST LAST
Q Instruksi free(LAST);
LINK

LINK

LINK
INF

INF

INF
simpul terakhir
O

O
25 12 10 berserta isinya dihapus
FIRST Q
Instruksi LAST=Q;
LINK

LINK
INF

INF
O

pointer LAST mundur satu


25 12 langkah menunjuk simpul
Q
FIRST LAST->LINK=NULL;
LINK

Q
LINK
INF

Simpul terakhir diisi NULL


INF
O

10 sebagai syarat bahwa simpul


12
ini simpul terakhir
Contoh soal dan penyelesaian
Q

LIN

LIN

LIN

LIN
INF

INF
INF

INF
O

O
K
3

K
1
15 37 45 20
2 4 5
(11) (12) (13) (14)

Terlihat ada 5 pointer yang diberi nomor 1 sampai dengan 5. nomor 3


adalah pointer Q.
berikan nama untuk pointer lain jika dikaitkan dengan Q
Sebutkan pointer yang bernilai sama
Apa yang tercetak jika dibuat instuksi dibawah ini.
 printf(“%i”, Q->INFO);
 printf(“%i”, Q->LINK->INFO);
Jawab
Berkaitan dengan pointer Q, maka yang bisa diberi
nama hanya pointer no.4 dan 5 :
No.4 namanya Q->LINK
No.5 namanya Q->LINK->LINK
Pointer yang bernilai sama adalah pointer no.2 dan
no.3 karena menunjuk simpul no.(12)
Yang tercetak adalah
37
45
Contoh soal dan penyelesaian
Telah ada linear singly linked list seperti ilustrasi
berikut
LAST
FIRST
INFO

INFO

INFO

INFO

INFO

INFO

INFO

INFO
LINK

LINK

LINK

LINK

LINK

LINK

LINK

LINK
75 67 50 65 57 85 60 72

(1) (2) (3) (4) (5)


Contoh soal dan penyelesaian
Tulis instruksi untuk menempatkan Pointer Q hingga
menunjuk simpul :
a) Pertama
b) No.(2)
c) No. (5)
d) No.(50) jika dipastikan ada
e) Terakhir
Tulis instruksi untuk mencetak nilai INFO simpul no.
(50) jika dipastikan ada
Contoh soal dan penyelesaian
a) Jawab Q=FIRST
• Jawab :
b) Jawab :
Q=FIRST
Q=FIRST
Q=Q->LINK
for(i=1;i<=49;i++)
c) Jawab :
{Q=Q->LINK;}
Q=FIRST X=Q->INFO;
for(i=1;i<=4;i++) printf(“%i”, X);
{Q=Q->LINK;}
d) Jawab :
Q=FIRST
for(i=1;i<=49;i++)
{Q=Q->LINK;}
e) Jawab:
Q=FIRST
while(Q->LINK !=NULL)
{Q=Q->LINK}

Anda mungkin juga menyukai