PERTEMUAN 06
Struktur Data – Linked List
LINKED LIST
(DASAR)
160 menit · 32 Bagian Materi
Memasuki dunia struktur data dinamis. Bagaimana data saling terhubung tanpa harus bersebelahan?
01 / 32
Tujuan Pembelajaran
🎯 Apa yang akan kita capai?
1Menjelaskan konsep linked list sebagai alternatif array.
2Memahami struktur Node (Data & Pointer).
3Mengimplementasikan linked list sederhana di C++.
4Melakukan traversal (mengunjungi) setiap elemen list.
02 / 32
Review Materi
🧠 Ingat Struct?

Materi sebelumnya sangat krusial karena Linked List dibangun menggunakan Struct.

struct Mahasiswa {
    string nama;
    int nim;
    float ipk;
};

Kita akan membuat tipe data baru yang memiliki pointer ke dirinya sendiri.

03 / 32
Masalah Array
📉 Keterbatasan Array
Ukuran Tetap: Harus ditentukan di awal (statis).
Insert/Delete Mahal: Perlu menggeser (shifting) elemen lain.
Memori Berurutan: Harus menemukan blok memori kosong yang cukup besar.
04 / 32
Ilustrasi Masalah
🏃‍♂️ Masalah Shifting Elemen

Misal ingin menyisipkan "Eka" di antara "Budi" dan "Citra":

0
Ali
1
Budi
2
Citra
3
Dewi

05 / 32
Solusi
💡 Solusi: Linked List

Linked List adalah struktur data dinamis di mana elemen-elemennya terhubung melalui pointer.

Fleksibel: Ukuran bisa bertambah/berkurang saat runtime.
Non-Contiguous: Elemen tidak harus bersebelahan di memori.
Efisien: Insert/Delete hanya perlu mengubah pointer.
06 / 32
Visualisasi Dasar
🔗 Anatomi Linked List

Setiap kotak disebut Node. Garis panah mewakili Pointer yang menyimpan alamat memori node berikutnya.

07 / 32
Konsep Node
📦 Apa itu Node?

Node adalah unit terkecil dalam Linked List yang menyimpan dua hal:

1Data: Nilai yang ingin disimpan (int, string, struct, dll).
2Next: Alamat (pointer) ke node selanjutnya.
DATA
NEXT
08 / 32
Implementasi C++
🏗 Struktur Node

Di C++, kita mendefinisikan node menggunakan struct yang merujuk pada dirinya sendiri:

struct Node {
    int data;     // Bagian Data
    Node* next;   // Bagian Pointer (ke node lain)
};
PENTING
Node* next berarti variabel tersebut menyimpan alamat memori dari variabel bertipe Node lainnya.
09 / 32
Visualisasi Memori
🖼 Node di Memori
Node n1;
n1.data = 10;
n1.next = 0x200; // Alamat lain
0x100 (Alamat n1)
10
0x200
datanext
10 / 32
Membuat Node
🌱 Membuat Node Pertama

Gunakan keyword new untuk mengalokasikan node di Heap Memory.

// 1. Deklarasi pointer head
Node* head = new Node;

// 2. Isi data
head->data = 10;

// 3. Set next ke NULL (karena belum ada node lain)
head->next = NULL;
11 / 32
Konsep Head
👑 Apa itu Head?

Head adalah pointer spesial yang selalu menunjuk ke node pertama dalam list.

Jika kita kehilangan alamat Head, kita kehilangan akses ke seluruh Linked List!
head
10
NULL
12 / 32
Membuat Banyak Node
🏗 Membuat Beberapa Node

Kita bisa membuat banyak node secara terpisah sebelum menghubungkannya.

Node* node1 = new Node;
Node* node2 = new Node;
Node* node3 = new Node;

Saat ini, ketiga node tersebut berada di memori tapi belum saling kenal.

13 / 32
Input Data
✏️ Mengisi Data
node1->data = 10;
node2->data = 20;
node3->data = 30;

// Semua next masih 'sampah' atau NULL
node1->next = NULL;
node2->next = NULL;
node3->next = NULL;
14 / 32
Menghubungkan
🔗 Menghubungkan Antar Node

Inilah "Sihir" dari Linked List. Kita hubungkan next dari satu node ke alamat node lainnya.

node1->next = node2; // n1 nyambung ke n2
node2->next = node3; // n2 nyambung ke n3
node3->next = NULL;  // n3 adalah akhir (ekor)
ANALOGI
Ini seperti permainan "Kereta-keretaan" di mana setiap anak memegang pundak teman di depannya.
15 / 32
Visualisasi Koneksi
🚂 Kereta Node
node1
10
node2
20
node3
30
NULL
16 / 32
Traversal
🚶‍♂️ Apa itu Traversal?

Traversal adalah proses mengunjungi setiap node dalam Linked List satu per satu, biasanya dimulai dari Head sampai bertemu NULL.

🔍Digunakan untuk menampilkan data.
🔍Digunakan untuk mencari data.
🔍Digunakan untuk menghitung jumlah node.
17 / 32
Kode Traversal
💻 Implementasi Looping
Node* current = node1; // Mulai dari awal

while(current != NULL) {
    cout << current->data << " ";
    current = current->next; // Pindah ke node selanjutnya
}
current = current->next adalah kunci untuk melangkah maju dalam Linked List.
18 / 32
Visualisasi Traversal
👣 Langkah demi Langkah
10
20
30
NULL
current

current menunjuk ke node1 (data: 10)

19 / 32
Aktivitas Kelas
🤔 Prediksi Output
Node* a = new Node {5, NULL};
Node* b = new Node {15, NULL};
Node* c = new Node {25, NULL};

a->next = c;
c->next = b;

Node* cur = a;
while(cur != NULL) {
    cout << cur->data << " ";
    cur = cur->next;
}
PERTANYAAN
Apa urutan angka yang muncul di layar?
20 / 32
Varian
🌈 Jenis-jenis Linked List

Berdasarkan cara pointer menghubungkan node:

1Singly Linked List: Satu arah (maju saja).
2Doubly Linked List: Dua arah (maju dan mundur).
3Circular Linked List: Melingkar (node terakhir kembali ke awal).
21 / 32
Jenis 1
➡️ Singly Linked List
A
B
C
NULL

Jenis yang paling sederhana. Setiap node hanya punya next.

22 / 32
Jenis 2
↔️ Doubly Linked List
NULL
A
B
C
NULL

Setiap node punya dua pointer: next (maju) dan prev (mundur).

23 / 32
Jenis 3
🔄 Circular Linked List
A
B
C

Node terakhir menunjuk kembali ke node pertama.

24 / 32
Perbandingan
⚖️ Array vs Linked List
Fitur Array Linked List
Akses Data Cepat (via Index) Lambat (harus traversal)
Penyisipan Lambat (shifting) Cepat (ubah pointer)
Ukuran Statis (tetap) Dinamis (berubah)
Memori Hemat Lebih banyak (perlu pointer)
25 / 32
Use Case
🛠 Kapan Pakai Linked List?
Saat jumlah data tidak diketahui di awal.
Saat banyak melakukan operasi Insert/Delete di tengah.
Saat ingin menghemat memori jika data sangat jarang (Sparse Data).
26 / 32
Praktikum
💻 Mini Praktikum

Tugas: Buatlah Linked List yang menyimpan 5 angka (bebas), lalu tampilkan hasilnya menggunakan traversal!

📥 Unduh Contoh Kode (.cpp)
27 / 32
Checklist
✅ Langkah Kerja
1Definisikan struct Node.
2Buat 5 node menggunakan new.
3Hubungkan antar node melalui pointer next.
4Gunakan loop while untuk menampilkan isi data.
28 / 32
Diskusi
💬 Mari Berdiskusi
"Apa kelebihan utama Linked List dibanding Array dalam sistem yang mengelola data jutaan mahasiswa?"

Pikirkan tentang efisiensi memori dan kemudahan pendaftaran mahasiswa baru.

29 / 32
Kesimpulan
📌 Poin Utama
🔹Linked list adalah struktur data dinamis.
🔹Node terdiri dari Data dan Pointer (Next).
🔹Traversal adalah cara utama untuk mengakses seluruh isi list.
30 / 32
Coming Up
🚀 Pertemuan Berikutnya

Kita akan mempelajari Operasi Lanjut pada Linked List:

Insertion: Menambah di awal, akhir, dan tengah.
Deletion: Menghapus node tertentu.
Searching: Mencari data di dalam list.
31 / 32
Finish
🙏 Terima Kasih

Ada pertanyaan sebelum kita akhiri?

"The best way to understand Linked List is to draw it."