Single Linked List
Mempelajari struktur data dinamis dengan menghubungkan elemen-elemen (node) menggunakan pointer, serta keunggulannya dibandingkan array.
Motivasi: Array vs Linked List
Bayangkan Anda sedang menyusun kursi untuk tamu. Menggunakan Array ibarat menyewa bus: jumlah kursinya sudah tetap. Jika tamu yang datang lebih banyak, Anda harus menyewa bus baru yang lebih besar dan memindahkan semua orang — ini repot dan memakan waktu.
Dalam kenyataannya, jumlah data seringkali tidak pasti. Di sinilah Linked List hadir sebagai solusi.
Linked List ibarat rangkaian gerbong kereta api. Jika ada tamu tambahan, Anda cukup menambah gerbong baru di belakang. Jika ada yang turun, Anda tinggal melepas gerbongnya. Proses ini jauh lebih cepat dan efisien. Dua alasan utama memakai Linked List adalah ukurannya yang fleksibel dan kemudahan dalam menambah atau menghapus data.
| Aspek | Array (Bus) | Linked List (Kereta) |
|---|---|---|
| Ukuran | Statis (Tetap) | Dinamis (Berubah-ubah) |
| Memori | Berurutan | Tersebar (Pakai pointer) |
| Tambah/Hapus | Lambat (Harus geser data) | Cepat (Tinggal sambung pointer) |
| Kegunaan | Data yang jumlahnya tetap | Data yang sering berubah |
Konsep Inti & Anatomi Node
Single Linked List adalah rangkaian elemen yang disebut Node. Setiap Node menyimpan dua hal:
- Info: Berisi nilai atau data aslinya.
- Next: Berisi alamat (pointer) ke elemen berikutnya.
Sebuah list harus punya "kepala" (First) agar kita tahu di mana mulainya. Jika First bernilai NULL, berarti list kosong. Elemen terakhir ditandai dengan Next yang menunjuk ke NULL.
Perhatikan gambaran berikut:
Hands-On: Menambah Data di Awal (Insert First)
Operasi InsertFirst bertujuan untuk memasukkan node baru langsung di posisi pertama.
void InsertFirst(List *L, int x) {
// 1. Buat gerbong baru
Node *NewElmt = Allocation(x);
// 2. Sambungkan gerbong baru ke gerbong pertama yang lama
NewElmt->next = L->first;
// 3. Jadikan gerbong baru sebagai yang pertama
L->first = NewElmt;
}
Hati-hati! Urutan kode sangat penting. Jika Anda mengganti First sebelum menyambungkan Next, Anda akan kehilangan jejak gerbong lainnya dan menyebabkan kebocoran memori.
Mengakses data (Traversal)
Karena memori Linked List tersebar, kita tidak bisa langsung loncat ke urutan tertentu. Kita harus menelusurinya dari First satu per satu menggunakan bantuan pointer sementara (temp).
void PrintInfo(List L) {
Node *temp = L.first; // Mulai dari awal (First)
while (temp != NULL) { // Selama belum sampai ujung
cout << temp->info << " "; // Cetak isinya
temp = temp->next; // Pindah ke gerbong berikutnya
}
}
Tips: Gunakan operator panah (->) saat bekerja dengan pointer ke struct. Ini adalah cara standar untuk mengakses isi di dalam struct melalui alamatnya.
Ringkasan
Linked Listadalah kumpulan node yang saling terhubung memakai pointer.Nodeterdiri dari data (info) dan alamat node berikutnya (next).- Sangat efisien untuk data yang sering ditambah atau dihapus secara dinamis.
- Penelusuran data dilakukan dari awal hingga menemukan
NULL.
Latihan
Silakan coba buat fungsi untuk menambah data di akhir list atau menghapus data tertentu untuk memperdalam pemahaman Anda.