Latihan: Manajemen Data Hash
Mengimplementasikan operasi pencarian (GetValue) dan penghapusan data spesifik (DeleteValue) di dalam tabel Hash yang menggunakan metode Chaining.
Mengimplementasikan operasi pencarian (GetValue) dan penghapusan data spesifik (DeleteValue) di dalam tabel Hash yang menggunakan metode Chaining.
Melanjutkan sistem penyimpanan NIP dari Latihan 1, kini sistem Anda dituntut untuk bisa melakukan operasi Baca (Get/Search) dan Hapus (Delete).
Saat seorang manajer ingin mengecek profil pegawai bernomor 202, sistem tidak boleh mencari dari awal tabel. Sistem harus bisa menghitung hash-nya (202 mod 10 = 2), lalu langsung melompat ke Indeks ke-2 dan menelusuri rantainya.
Begitu pula ketika pegawai 102 resign. Sistem harus pergi ke Indeks ke-2, mencari di gerbong mana data 102 berada, memutus rantai gerbong tersebut dari Linked List, lalu menghapus memorinya agar server tetap terjaga.
Kamu sudah dibekali dengan fungsi penyisipan data (InsertValue) dan cetak (PrintHash). Fokuslah melengkapi dua fungsi utama:
GetValue: Fungsi ini menerima NIP yang dicari. Hitung indeks hash-nya terlebih dahulu. Gunakan pointer bantuan temp untuk menelusuri gerbong di dalam indeks tersebut satu per satu menggunakan perulangan while.DeleteValue: Logikanya mencakup tiga kasus utama :
first pada indeks tersebut kosong, cetak info bahwa data tidak ada.first ke elemen selanjutnya sebelum Anda menghapus memorinya.pred sebagai pendahulu, dan temp sebagai elemen saat ini). Jika data ketemu, kaitkan pred->next melompati temp langsung ke elemen setelahnya.Program akan mencetak status awal tabel, log keberhasilan/kegagalan pencarian, log penghapusan, dan status akhir tabel setelah modifikasi rantai.
Indeks 2 menampung tiga data berantai: 102 -> 202 -> 302. Kita akan mencari 202, lalu menghapus 102 (kepala) dan 302 (ekor). Sehingga di akhir, indeks 2 hanya akan menyisakan data 202.
Output:
=== STATUS AWAL TABEL HASH ===
Indeks 2 : [102] -> [202] -> [302] -> NULL
...
=== PENGHAPUSAN DATA ===
Data 102 berhasil dihapus dari sistem.
Data 302 berhasil dihapus dari sistem.
...Hint: Awas Jebakan Pointer pada Delete!
Ingatlah hukum dasar memori dinamis: Saat Anda ingin menghapus sebuah node menggunakandelete temp, Anda harus memastikan rantai sebelum dan sesudahtempsudah terhubung dengan aman. Jika Anda menghapus dulu baru mencoba menyambungkan, program akan Crash!