Selasa, 25 Februari 2020

Linked List II

Halo, hari ini saya akan meringkas mengenai lanjutan dari materi Linked List karena itu saya namakan Linked List II mengingat, Linked List I sudah kita pelajari. Jadi, pada hari ini saya akan membahas 3 hal utama yang berhubungan dengan Linked List, yaitu :
  • Circular Single Linked List 
  • Double Linked List
  • Circular Double Linked List 
Baik, karena kita sudah mengetahui materi yang akan dibahas pada hari ini, maka mari kita bahas satu per satu.

Circular Single Linked List

Circular Single Linked List pada dasarnya adalah Single Linked List yang pointer Tail (pointer terakhir) dari linked list tersebut selalu menunjuk ke Head (pointer pertama) dari linked list itu sendiri. Sehingga kalau digambarkan / dibayangkan, linked list tersebut membentuk sebuah loop karena itulah linked list tersebut dinamakan Circular. Berbeda dari Single Linked List, Circular Single Linked List pada praktiknya tidak akan memiliki pointer yang menyimpan nilai NULL, karena semuanya saling terkoneksi membentuk loop.

    Sebagai gambaran, mari perhatikan ilustrasi berikut.
Circular Single Linked List









Double Linked List

Double Linked List memiliki konsep yang sama dengan Single Linked List, yang membedakan adalah jumlah pointernya. Pada Single Linked List, setiap pointer hanya memiliki satu pointer didalamnya untuk menyimpan alamat dari record selanjutnya. Sementara pada Double Linked List, setiap pointer punya dua pointer didalamnya yang berfungsi untuk menyimpan alamat dari record sebelumnya dan alamat dari record selanjutnya. 

Contoh codingan :

struct mahasiswa{
char nama[100];
int no_urut;
mahasiswa *next, *prev;
}*head, *tail;

Seperti yang sudah saya jelaskan sebelumnya, pada codingan Double Linked List, terdapat dua pointer berupa next dan prev. Sementara, pada codingan Single Linked List, pasti hanya memiliki satu pointer berupa next.

Double Linked List : Insert

Pada proses Insert, sebenarnya ada 3 cara. yaitu,
  • Push Head, apabila data baru yang akan dimasukkan ke dalam linked list ingin diletakkan ke bagian paling depan.
  • Push Tail, apabila data baru yang akan dimasukkan ke dalam linked list ingin diletakkan ke bagian paling belakang.
  • Push Mid, apabila data baru yang akan dimasukkan ke dalam linked list ingin diletakkan di tengah-tengah linked list (tengah-tengah di sini relatif, pokoknya berada di antara head dan tail). Umumnya, Push Mid paling sering digunakan karena dapat memasukkan data sesuai urutan / sorted.
Namun, di sini saya hanya akan memberikan contoh salah satunya, yaitu Push Head karena pada dasarnya Push Tail dan Push Mid tidak berbeda jauh logikanya.

Contoh codingan Push Head :
char name[100] = "Immanuel";
int no_urut = 10; 
mahasiswa *node = (node*) malloc(sizeof (node));
strcpy(node->name,name);
no_urut->node = no_urut;
node->prev = NULL; 
node->next = head;
head->prev = node;
head = node;

Double Linked List : Delete

Seperti Insert, Delete juga memiliki beberapa kondisi dalam prosesnya, berikut kondisinya
  1. Jika hanya ada satu data di dalam linked list
  2. Jika data yang ingin di hapus terletak di Head
  3. Jika data yang ingin di hapus terletak di Tail
  4. Jika data yang ingin di hapus terletak di antara Head dan Tail atau dalam istilah sebelumnya, Mid
Mari kita bahas satu persatu, contoh codingannya,

Untuk kondisi Pertama :
head = tail = NULL;
free(head);
 Untuk kondisi Kedua :
mahasiswa *temp = head;
head = head->next;
head->prev = temp->next = temp->prev = NULL; 
free(temp);
Untuk kondisi Ketiga :
mahasiswa *temp = tail;
tail = tail->prev;
tail->next = temp->next = temp->prev = NULL; 
free(temp);
Untuk kondisi Keempat :
anggap x adalah no_urut data yang ingin di hapus.
mahasiswa *temp = head; 
while(temp!=NULL){
    if(temp->no_urut == x) break;
    temp = temp->next;
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
temp->next = temp->prev = NULL; 
free(temp);

Circular Double Linked List

Di atas sudah saya jelaskan bahwa perbedaan Circular Single Linked List dengan Single Linked List hanya terletak pada tail saja yaitu tail memiliki pointer next yang tidak NULL melainkan menunjuk ke head. Maka untuk Circular Double Linked List pun demikian, hanya saja sekarang konsep Single Linked List nya dirubah menjadi Double Linked. Berikut saya beri gambarannya.

Circular Double Linked List









Demikian adalah penjelasan / rangkuman saya mengenai materi Linked List II, semoga membantu teman-teman sekalian. Beri tahu saya melalui kolom komentar kalau ada penjelasan yang kurang / salah. Terimakasih.


Referensi Gambar :
Gambar : Circular Single Linked List - http://geeksforgeeks.org/wp-content/uploads/cll_orig.gif
Gambar : Circular Double Linked List - https://media.geeksforgeeks.org/wp-content/uploads/Circular-doubly-linked-list.png

Immanuel Joseph - 2301852215



Tidak ada komentar:

Posting Komentar