Think Different ASD : Pengenalan Linked List ASD Linked List

Algoritma dan Struktur Data
Linked List

Konsep Array
Array ==
Laci?

2

• Data disimpan dalam suatu struktur, sedemikian
rupa sehingga elemen-elemen di dalam struktur
tersebut dapat diolah secara kelompok ataupun
secara individu.
• Sifat - sifat Array
– Homogen
Seluruh elemen di dalam struktur array mempunyai tipe data
yang sama.
– Random Access
Setiap elemen di dalam struktur array dapat dicapai secara
individual, langsung ke lokasi elemen yang diinginkan, tidak
harus melalui elemen pertama.

3

Syntax:
struct nama_struct {
tipe_data_1
nama_var_1;
tipe_data_2
nama_var_2;
tipe_data_3
nama_var_3;
……
};

4

• Sebuah array yang setiap data elemennya bertipe struct.
Umumnya dipakai untuk menyimpan object data yang terstruktur,
misal: data mahasiswa, karyawan, buku, barang, dsb.

5


Contoh malloc()- float
#include
#include
#include
void main()
{
//deklarasi pointer
float *pjari, *pluas;
//memesan slot memori untuk membuat variabel jari & luas. Simpan alamatnya pada pointer
pjari = (float *)malloc(sizeof(float));
pluas = (float *)malloc(sizeof(float));
if (pjari != NULL && pluas != NULL){//jika berhasil memesan memori
//gunakan variabel jari dan luas melalui pointer
*pjari = 7;
*pluas = 3.14 * *pjari * *pjari;
printf("lingkaran dengan jari-jari : %f\n", *pjari);
printf("luasnya : %f\n", *pluas);
//menghapus atau melepaskan slot memori yang ditunjuk oleh pjari dan pluas
free(pjari);

free(pluas);
}
getch();
}

Linked List == kereta????

Page 7

7

Apakah Linked List itu ?
• Elemen (disebut dengan CELL, atau SEL dalam
bahasa Indonesia) yang mungkin terletak terpisahpisah di memory, disambungkan dengan pointer.
• Tiap sel berisi dua informasi : nilai dan pointer ke sel
berikutnya

nilai

Pointer to next CELL


CELL

Mengapa memakai Linked List ?
1.

2.
3.
4.

Mudah untuk menambahkan dan menghapus elemen ( pada
array tidak mungkin menambahkan elemen, karena
banyaknya elemen sudah ditentukan dari awal )
Panjang list bisa diubah dengan bebas (panjang array fixed)
Mudah untuk menyambungkan beberapa list, maupun
memutuskannya (array tidak bisa)
Memungkinkan user mendesain struktur data yang
kompleks

Struktur linked List

pHead

A

B

C

 Node (elemen) linked list saling berkait
melalui pointer. Bagian next sebuah node
menunjuk alamat node selanjutnya
 pHead: pointer yang menunjuk node
pertama

Struktur linked List
pHead

A

B


C

 Node terakhir menunjuk NULL
 Setiap node terdiri atas
 Isi data
 Next, yaitu pointer ke node selanjutnya
pada list

Struktur Sebuah Node
struct node {
//bagian data
tipedata data 1;
tipedata data 2;

tipedata data n;
//pointer ke node selanjutnya
struct node *next;
};
typedef struct node node;


Array vs linked list
 Banyaknya anggota
 Banyaknya elemen array ditentukan di awal &
jumlahnya tetap
 Elemen linked list dibuat di memori ketika
dibutuhkan (ingat Alokasi memory dinamis).
Jumlahnya dinamis, dapat bertambah dan
berkurang sesuai keperluan
 Cara mengakses elemen
 Elemen array diakses lewat indeks
 Untuk mengakses elemen linked list, harus dilakukan
penelusuran elemen list

Array vs Linked List
Array

Linked List

Penambahan dan Tidak mungkin Mungkin

penghapusan
elemen
Panjang list

Fixed

Bisa diubah

Akses ke elemen

cepat

(harus mengikuti pointer satu
demi satu)
lambat

Array vs Linked List
1
2
3


a[0]

header
13

a[1]
a[2]

address 13 address 18 address 24
1 18
2 24
3
value

value next

Pointer ke sel berikutnya
(next)


value next

( NULL )

int a[3];
int n;
Array
Address tiap sel berurutan

Linked List
Address tidak berurutan
Akses ke tiap sel dimulai dari header

Cara menampilkan isi sel tertentu
• Pada array (misalnya nama array: a), isi sel tertentu
dapat ditampilkan dengan cara a[nomer urut sel
keberapa]. Misalnya a[5] akan menampilkan isi sel ke-6.
Hal ini karena satu sel dengan sel yang lain terletak
pada posisi yang berurutan di memory.
• Pada linked list, kita tidak tahu secara langsung, sel itu

terletak dimana dalam memory.

Akses harus dilakukan satu persatu, urut mulai dari sel
terdepan

Cara menampilkan isi sel tertentu
Tampilkan isi (value) sel ke-3 !
address
header37
37

4

38

38
2

40

40
13 52

Sel ke-1

pointer
Sel ke-1→   isi :
value=4
address sel berikutnya=38

40

52
NULL

NULL POINTER
• Nilai yang dimiliki sebuah pointer adalah address
pada memory dimana data tersimpan
• Pointer yang tidak menunjuk ke address manapun
disebut dengan NULL pointer. Maksudnya, satu
kondisi khusus dimana pointer itu belum diset dengan
sebuah address tertentu
• Pada stdio.h biasanya didefinisikan dengan nilai 0
• Saat fungsi fopen,malloc dieksekusi, jika terdapat
error, maka nilai yang dikembalikan adalah NULL

Pada kuliah ini, NULL disimbolkan
dengan kotak yang diberi garis diagona

Deklarasi head
Sebelum membuat linked list, perlu dideklarasikan dan diinisialisasikan head, yaitu
pointer yang menunjuk node pertama dari linked list
node *pHead = NULL;

Potongan kode – linked list statis
struct motor {
float volts;
float amps;
struct motor *next;
};

1.
2.
3.
4.
5.

typedef struct motor motor;
void main()
{
motor *pm1, *pm2, *pm3;
}

Isi volts dan amps pada pm1, pm2 dan
pm3 dengan data sembarang
Isi pm1.next dengan alamat pm2,
pm2.next dengan alamat pm3, dan
pm3.next dengan NULL
Tampilkan isi pm2 hanya dengan
menggunakan pointer pm1
Tampilkan isi pm3 hanya dengan
menggunakan pointer pm2
Tampilkan isi pm3 hanya dengan
menggunakan pointer pm1

Operasi dasar linked list
1.
2.
3.
4.

Menambah sebuah node.
Menghapus sebuah node.
Mencari sebuah node.
List tranversal

Menambahkan node ke list kosong
Before:
pNew

Code:
pNew -> next = pHead; // set link to NULL

39

pHead = pNew;// point list to first node

pHead

pPre

After:
pNew
pHead

pPre

39

Menambahkan node ke awal list
Before:

Code (same):
pNew -> next = pHead; // set link to NULL

pNew

pHead = pNew;// point list to first node

39

pHead

75

124

pPre

After:
pNew

39

pHead
75
pPre

124

Menambahkan node di tengah list
Before:

Code
pNew -> next = pPre -> next;
64

pNew

pPre -> next = pNew;

55

124

pPre

After:
pNew

64

55
pPre

124

Menambahkan node akhir list
Before:

Code
pNew -> next = NULL;
144-> next = pNew;
pPre

pNew

55

124

pPre

After:
pNew

144

55
pPre

124

Menambahkan node pada linked list
Terdapat empat tahap untuk menambah node linked list:
• Membuat node baru.
• Mendapatkan node yang terletak sebelum node baru disisipkan (pPre)
• Atur next node baru agar menunjuk node sesudah posisi penyisipan.
• Atur next pPre agar menunjuk node baru.

Kode untuk menambah data ke linked list


Untuk menambah data pada linked list, harus diketahui head pointer
(pHead), pointer yang menunjuk node sebelum tempat penyisipan
(pPre) data yang akan disisipkan (item).

//insert a node into a linked list
struct node *pNew;
pNew = (struct node *) malloc(sizeof(struct node));
pNew -> data = item;
if (pPre == NULL){
//add before first logical node or to an empty list
pNew -> next = pHead;
pHead = pNew;
}
else {
//add in the middle or at the end
pNew -> next = pPre -> next;
pPre -> next = pNew;
}

Menghapus node dari linked list
• Untuk menghapus sebuah node:
– Cari node yang akan
pendahulunya (pPre).

dihapus

(pCur)

– Ubah pPre->next agar menunjuk pCur->next.
– Hapus pCur menggunakan fungsi free

dan

node

Menghapus node pertama dari linked list
Before:

Code:

pHead

75

pHead = pCur -> next;
free(pCur);

124

pCur

pPre

After:
pHead

pPre

Recycled

pCur

124

Menghapus node dari linked list – kasus umum
Before:

Code:

75

96

pPre -> next = pCur -> next;
free(pCur);

124

pCur

pPre

After:
Recycled

75

pPre

pCur

124

Kode untuk menghapus node dari linked list


Untuk menghapus node dari linked list, harus diketahui head
pointer (pHead), node yang akan dihapus (pCur), serta
pendahulunya,

//delete a node from a linked list
if (pPre == NULL)
//deletion is on the first node of the list
pHead = pCur -> next;
else
//deleting a node other than the first node of the list
pPre -> next = pCur -> next;
free(pCur).

Mencari node yang mengandung data tertentu
dari linked list


Operasi insert dan delete membutuhkan pencarian pada list
untuk menentukan posisi penyisipan atau pointer yang
menunjuk data yang akan dihapus

//search the nodes in a linked list
pPre = NULL;
pCur = pHead;
//search until the target value is found or the end of the list is reached
while (pCur != NULL && pCur -> data != target) {
pPre = pCur;
pCur = pCur -> next;
}
//determine if the target is found or ran off the end of the list
if (pCur != NULL)
found = 1;
else
found = 0;

Traversing a Linked List


mengunjungi semua node yang ada pada list dari head sampai
node terakhir

//traverse a linked list
Struct node *pWalker;
pWalker = pHead;
printf(“List contains:\n”);
while (pWalker != NULL){
printf(“%d ”, pWalker -> data);
pWalker = pWalker -> next;
}

Tugas
Coba & Pelajari source code pertemuan7.cpp