Wednesday, April 22, 2009

TIPS Memahami Linked List

Tips ini saya tulis berdasar pengalaman pribadi selama masih kuliah dan mengambil mata kuliah Algoritma dan Struktur Data. Harapan saya sedikit banyak bisa membantu pembaca dalam menguasai topik programming yang satu ini. Terus terang pas jaman kuliah dulu saya kesulitan memahami apa sebenarnya linked list. Maklum dalam linked list kita sedikit bicara hal abstrak, nggak begitu jelas karena yang dibahas adalah membayangkan isi memori komputer. Bahkan sampai selesai UAS pun saya masih bertanya-tanya, "Linked List???". Hingga akhirnya saya dapat menemukan pencerahan dari-Nya. Alhamdulillah :)

TIPS 1. Pahami konsep dasar Linked List.
Singkat cerita, linked list (LL) adalah identik dengan array/ larik. LL merupakan struktur data yang bisa menyimpan rangkaian data secara dinamis. Dinamis karena bisa ditambah dan dikurangi sesuai kebutuhan program. Dengan demikian ketika kita bicara linked list maka bayangkan bahwa ia secara fisik hampir sama ilustrasinya dengan tipe data array, yaitu deretan kotak elemen yang memanjang. Bedanya, klo array itu kotaknya berdempetan, sedangkan linked list kotak-kotaknya (node/simpul) nanti terhubung dengan minimal sebuah garis panah (pointer).

TIPS 2. Gambar dulu ilustrasinya.
LL itu abstrak, namun bisa kita buat gambaran prosesnya. Bagian yang paling rumit dalam LL adalah merangkai simpul satu dengan simpul lainnya sehingga terbentuklah LL dan menjamin masih terhubungnya seluruh rangkaian node meskipun terjadi penambahan node baru maupun penghapusan node lama di posisi manapun (depan, belakang atau tengah). Untuk itu sebelum kita menulis baris perintah code program untuk operasi-operasi LL alangkah lebih baiknya jika kita awali dengan menggambarkan dulu ilustrasinya. Baik untuk kondisi LL masih baru berupa satu node, dua node maupun banyak node. Selain itu juga ketika LL dalam mode operasi penambahan maupun penghapusan node. Pastikan kita sudah menggambarkan dengan benar tentang perubahan-perubahan terhadap kondisi panah penghubung. Sebelumnya begini, setelah proses jadi begitu. Misal, yang semula bernilai NULL alias nggak kemana-mana, setelah penambahan menjadi terhubung ke simpul terdepan.
baru->next = head;
Atau bisa juga misalnya yang semula menunjuk ke simpul X berubah dialihkan menunjuk ke simpul Y karena simpul X akan dihapus, dst.
if (temp->next == X)
{
temp->next = Y;
free(X);
}
Jadi ilustrasikan dulu skema prosesnya, baru tuliskan codingnya.

TIPS 3. Jangan takut mencoba.
Practice make perfect. Silahkan dicoba berbagai macam skenario yang mungkin terjadi. Tambah di depan, tambah di belakang atau sisipkan di tengah. Hapus simpul di tengah, hapus simpul yang di belakang sendiri atau hapus simpul yang terdepan. Bagaimana pula klo LL-nya adalah Double, artinya punya dua pointer (panah penghubung) sehingga sebuah simpul bisa membaca simpul berikutnya dan juga simpul sebelumnya. Silahkan dicoba itu semua. Siapkan selembar kertas untuk menggambarkan ilustrasi prosesnya. Pasti akan asyik dan menarik :)

OK. Mungkin itu dulu tiga tips dari saya. Semoga ada manfaatnya. If there are any question, please remind me and write something right here. Perhaps i do can help :D

10 comments:

  1. pengalaman yang menarik, untunglah saya gak sempat bergelut lama-lama dengan yang namanya double L.

    sekedar saran :
    saya perhatikan penulisan blog pak cahyo, tidak seperti surat kabar dalam hal ini (justify=disable) jadi yang kiri rata yang kanan seperti ombak gitu....

    ReplyDelete
  2. Makasih Pak....
    Buat penjelasannya...
    :)

    ReplyDelete
  3. semoga semua baca basa segera memahami link list pak!!
    maab pak,numpang blog ya pak
    wieznoekw.co.cc

    ReplyDelete
  4. pak masih bingung neh lum tapi paham puyengg

    ReplyDelete
  5. cara update dalam linked list program java

    ReplyDelete
  6. saya coba terapkan pak.
    semoga saya bisa bersungguh-sungguh karena hambatannya ada di faktor kemalasan. hihhihihi :D
    ngaku mode : on

    ReplyDelete
  7. ya, mulailah gambarkan simpul di dalam linked list, satu demi satu. jika terjadi penambahan simpul, gambarkan bgmn seharusnya anak panah simpul2 yg bersangkutan berubah beserta pointer head dan tailnya. pun demikian klo terjadi penghapusan sebuah simpul. sesuaikan dgn perintah2 source code yg ada utk proses tsb :)

    ReplyDelete
  8. maaf pak, masi nggak ngerti ma pa itu Linked List. soalnya ru tahun ni bljr ttg komputer, maklum dulu sma nya g terlalu dalamin yg namanya komputer. jd istilah2 komputer itu masih baru di dengar

    ReplyDelete
  9. linked list hampir sama dengan array. dia itu tipe data yg terstruktur, punya susunan dlm memori komputer. klo array susunannya berdampingan. misal dialokasikan array dgn ukuran 3, maka di dalam memori akan disiapkan 3 tempat utk menyimpan data dgn letak yg berdempetan. klo linked list bisa dinamis. letak elemen2 datanya (simpul/ node) itu bisa jadi berdempetan atau bisa juga berlompatan tergantung hasil alokasi memori oleh perintah malloc(). krn lokasi simpul bisa tidak urut maka dalam sebuah simpul diperlukan adanya data pointer untuk menyimpan alamat simpul selanjutnya. dgn demikian simpul2 bisa saling terkait membentuk linked list. masih bingung? :)

    ReplyDelete