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.
Misal ingin menyisipkan "Eka" di antara "Budi" dan "Citra":
Linked List adalah struktur data dinamis di mana elemen-elemennya terhubung melalui pointer.
Setiap kotak disebut Node. Garis panah mewakili Pointer yang menyimpan alamat memori node berikutnya.
Node adalah unit terkecil dalam Linked List yang menyimpan dua hal:
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)
};
Node* next berarti variabel tersebut menyimpan alamat memori dari variabel bertipe Node lainnya.
Node n1;
n1.data = 10;
n1.next = 0x200; // Alamat lain
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;
Head adalah pointer spesial yang selalu menunjuk ke node pertama dalam list.
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.
node1->data = 10;
node2->data = 20;
node3->data = 30;
// Semua next masih 'sampah' atau NULL
node1->next = NULL;
node2->next = NULL;
node3->next = NULL;
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)
Traversal adalah proses mengunjungi setiap node dalam Linked List satu per satu, biasanya dimulai dari Head sampai bertemu NULL.
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.
current menunjuk ke node1 (data: 10)
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;
}
Berdasarkan cara pointer menghubungkan node:
Jenis yang paling sederhana. Setiap node hanya punya next.
Setiap node punya dua pointer: next (maju) dan prev (mundur).
Node terakhir menunjuk kembali ke node pertama.
| 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) |
Tugas: Buatlah Linked List yang menyimpan 5 angka (bebas), lalu tampilkan hasilnya menggunakan traversal!
struct Node.new.next.while untuk menampilkan isi data.Pikirkan tentang efisiensi memori dan kemudahan pendaftaran mahasiswa baru.
Kita akan mempelajari Operasi Lanjut pada Linked List:
Ada pertanyaan sebelum kita akhiri?