Pemrograman Kompetitif Dasar - 07 Struktur Data Dasar
Pemrograman Kompetitif Dasar - 07 Struktur Data Dasar
1/47
Pendahuluan
2/47
Tentang Struktur Data
Struktur Data
Merupakan tata cara untuk merepresentasikan dan menyimpan
data, sehingga mendukung operasi terhadap data tersebut secara
efisien.
3/47
Kilas Balik: Array
4/47
Kilas Balik: Array (lanj.)
5/47
Kilas Balik: Array (lanj.)
6/47
Bagian 1
Linked List
7/47
Mengenal Linked List
Linked list terdiri dari kumpulan node.
data next
8/47
Mengenal Linked List (lanj.)
head
30 1 20 16
9/47
Jenis Linked List
10/47
Struktur Doubly Linked List
head tail
30 1 20 16
11/47
Linked List dan Array
• Pada doubly linked list, biasanya kita hanya memiliki referensi
ke head dan tail.
• Untuk mengakses elemen ke-x dari linked list, kita dapat
melakukannya dengan:
get(head, x)
1 current = head
2 for i = 2 to x
3 current = current.next
4 return current
12/47
Linked List dan Array (lanj.)
13/47
Menyisipkan Elemen Linked List
newNode
20
node
... 1 16 ...
14/47
Menyisipkan Elemen Linked List (lanj.)
newNode
20
node
... 1 16 ...
15/47
Menyisipkan Elemen Linked List (lanj.)
newNode
20
node
... 1 16 ...
16/47
Menyisipkan Elemen Linked List (lanj.)
17/47
Menghapus Elemen Linked List
Diberikan node yang bukan head maupun tail, hapus dari linked
list.
node
... 1 20 16 ...
18/47
Menghapus Elemen Linked List (lanj.)
node
... 1 20 16 ...
19/47
Menghapus Elemen Linked List (lanj.)
3. Hapus node.
node
... 1 16 ...
20/47
Menghapus Elemen Linked List (lanj.)
21/47
Rangkuman
22/47
Mengenal Stack
• Stack dapat dimisalkan seperti tumpukan piring pada
umumnya.
• Jika terdapat piring baru yang ingin dimasukkan, maka piring
tersebut masuk dari paling atas.
• Jika sebuah piring akan diambil dari tumpukan, maka yang
diambil juga piring yang paling atas.
23/47
Mengenal Stack (lanj.)
• Struktur data stack menyimpan informasi dalam bentuk
tumpukan.
• Informasi yang baru dimasukkan ke paling atas tumpukan.
• Hanya informasi paling atas yang bisa diakses/dihapus pada
setiap waktunya.
• Oleh karena itu struktur data stack disebut memiliki sifat
LIFO (Last In First Out).
24/47
Operasi pada Stack
25/47
Aplikasi Stack
26/47
Aplikasi Stack Lainnya
27/47
Aplikasi Stack Lainnya (lanj.)
28/47
Eksekusi Ekspresi Postfix
Ekspresi: 1 2 3 + − 4 ×
1. Push angka 1, stack: [1].
2. Push angka 2, stack: [1, 2].
3. Push angka 3, stack: [1, 2, 3].
4. Ditemukan +:
• Pop dua kali, didapat nilai 2 dan 3, stack: [1].
• Operasikan 2 + 3, dan push, stack: [1, 5]
5. ...
29/47
Eksekusi Ekspresi Postfix (lanj.)
Ekspresi: 1 2 3 + − 4 ×
5. Ditemukan -:
• Pop dua kali, didapat nilai 1 dan 5, stack: [].
• Operasikan 1 - 5, dan push, stack: [-4]
6. Push angka 4, stack: [-4, 4].
7. Ditemukan ×:
• Pop dua kali, didapat nilai -4 dan 4, stack: [].
• Operasikan -4 × 4, dan push, stack: [-16]
Jadi 1 2 3 + − 4 × = −16
30/47
Implementasi Stack
31/47
Alternatif Implementasi Stack
32/47
Alternatif Implementasi Stack (lanj.)
initializeStack(maxSize)
1 // Buat array stack berukuran maxSize
2 topOfStack = 0
push(item)
1 topOfStack = topOfStack + 1
2 stack[topOfStack] = item
pop()
1 topOfStack = topOfStack − 1
top()
1 return stack[topOfStack]
33/47
Alternatif Implementasi Stack (lanj.)
34/47
Bagian 2
Stack
35/47
Contoh Soal
36/47
Pembahasan Soal
37/47
Bagian 3
Queue
38/47
Mengenal Queue
39/47
Mengenal Queue (lanj.)
• Struktur data queue menyimpan informasi dalam bentuk
antrean.
• Informasi yang baru dimasukkan ke paling belakang antrean.
• Hanya informasi paling depan yang bisa diakses/dihapus pada
setiap waktunya.
• Oleh karena itu struktur data queue disebut memiliki sifat
FIFO (First In First Out).
40/47
Operasi Queue
41/47
Aplikasi Queue
42/47
Implementasi Queue
43/47
Alternatif Implementasi Queue
44/47
Alternatif Implementasi Queue (lanj.)
initializeQueue(maxSize)
1 // Buat array queue berukuran maxSize
2 head = 1
3 tail = 0
push(item)
1 tail = tail + 1
2 queue[tail] = item
pop()
1 head = head + 1
front()
1 return queue[head]
45/47
Alternatif Implementasi Queue (lanj.)
• Kelemahan dari implementasi ini adalah beberapa elemen di
bagian awal array tidak digunakan kembali.
• Misalnya telah dilakukan 15 kali push, dan 11 kali pop.
• Sebanyak 11 elemen pertama pada array tidak akan
digunakan kembali.
• Ini adalah pemborosan, karena aslinya hanya terdapat 4
elemen di dalam queue.
• Meskipun demikian, dalam dunia kompetisi hal ini masih
dapat diterima.
• Pastikan nilai maxSize sama dengan maksimal operasi push
yang mungkin dilakukan.
46/47
Penutup
47/47