Skip to main content

Session 3 Linked List II (L)

Di session 3, diajari tentang circular single linked list, doubly linked list, dan circular doubly linked list.

  1. 1. Circular Single Linked List 

Seperti namanya, circular linked list berarti linked list yang sambung menyambung seperti lingkaran sehingga tail ke nextnya tidak null dan tidak akan ada node ke next yang null kecuali ketika head dan tailnya belum keisi.



  1. 2. Double Linked List

Double linked list tidak berbeda jauh dengan single linked list yang telah diajarkan pada sesi sebelumnya. Di double linked list terdapat tambahan pointer yang menunjuk ke node sebelumnya yaitu pointer prev/previous. Sehingga ketika kita ingin menunjuk data sebelumnya lebih gampang dan efisien.
struct node{
         int value;
         struct node *next;      // pointer yang menunjuk data selanjutnya

         struct node *prev;      // pointer yang menunjuk data sebelumnya
};
struct node *head = 0;
struct node *tail = 0;

Seperti di single linked list, double linked list juga mempunyai beberapa perintah yaitu insert / push.
- Push Head (Menambah data ke barisan paling awal)
  Mirip dengan single linked list, ketika push head node ke nextnya langsung mengarah ke head, tetapi ketika di double linked list, kita harus menghubungkan pointer head sebelumnya ke node yang kita buat sebelum mengganti node yang baru menjadi head yang baru.
struct node *node = (struct node*) malloc(sizeof(struct node));
  node->value = x;
  head->prev=current;
  current->next=head;
  head=current;



- Push Tail (Menambah data ke barisan paling akhir)
  Sebelum insert kita harus membuat sebuah node untuk menampung valuenya, setelah memasukkan value barulah kita menyambungkan node baru tersebut dengan linked list yang sudah ada.
struct node *node = (struct node*) malloc(sizeof(struct node));
  node->value = x;
  node->next  = NULL;          // karena kita ingin push tail maka node ke next itu kosong
  node->prev  = tail;              // menyambungkan node baru dengan tail yang sebelumnya
  tail->next  = node;              // karena tail ke next sebelumnya masih null maka kita harus                                              menyambungkannya dengan node

  tail = node;                         // setelah disambung node yang baru dijadikan tail yang baru

- Delete
Di delete ada beberapa kondisi yang harus diperhatikan yaitu :

  • Ketika node yang akan dihapus adalah satu-satunya node di linked list tersebut :
    free(head);
             head = NULL;
             tail = NULL;
  • Ketika node yang akan dihapus adalah head :
    head = head->next;
    free(head->prev);
    head->prev = NULL;
  • Ketika node yang akan dihapus adalah tail :
    tail = tail->prev;
    free(tail->next);
    tail->next = NULL;
  • Ketika node yang akan dihapus bukan head dan bukan tail :
    struct tnode *curr = head;
      while ( curr->next->value != x ) curr = curr->next;
      struct tnode *a   = curr;
      struct tnode *del = curr->next;
      struct tnode *b   = curr->next->next;
      a->next = b;
      b->prev = a;
      free(del);

  1. 3. Circular Doubly Linked List
    Mirip dengan circular single linked list, tetapi di circular doubly linked list terdapat 2 pointer di setiap node-node yang tersambung.


Comments

Popular posts from this blog

Binary Search Tree

Binary Search Tree        -         Pengertian       Binary search tree (BST) adalah sebuah data struktur yang digunakan untuk mempercepat        searching, sorting, insertion dan deletion.       BST juga dikenal sebagai binary tree yang sudah disortir       Untuk sebuah node x dari BST : è Value di subtree kiri lebih kecil dari value dalam x è Value di subtree kanan lebih besar dari value dalam x       -         Binary search tree operations       BST mempunyai beberapa operasi : è Search(x) : untuk mencari key x di dalam BST Misalnya kita ingin mencari key x : o    Pertama kita mulai dari root o    Jika root adalah x maka proses selesai o    Jika x lebih kecil dari key root maka dilakukan searching secara rekursif di subtree sebelah kiri, be...

AVL Tree (Insertion and Deletion)

AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree digunakan untuk melakukan searching yang lebih singkat dan sederhana. Ada 4 case dalam melakukan operasi insert : Single Rotation Ada 2 case yang dapat diselesaikan dengan single rotation, yaitu ketika node terdalam terletak pada subtree kiri dan anak kiri T, (left rotation) dan ketika node terdalam terletak pada subtree kanan dan anak kanan T (right rotation). Double Rotation Di double rotation juga terdapat 2 case yang dapat terselesaikan dengan double rotation, yaitu jika node terdalam terletak pada subtree kanan dan anak kiri T (right-left), dan node terdalam terletak pada subtree kiri dan anak kanan T (left-right). Ada 2 case yang terjadi saat operasi delete : Jika node yang akan dihapus berada pada posisi leaf atau node tanpa anak, maka dapat langsung di hapus. Jika node yang akan dihapus memiliki anak, maka pros...

Final-Rangkuman

Nama : Clarissa Chuardi NIM : 2301941366 Kelas : CB01-CL Lecturer : Ferdinand Ariandy Luwinda (D4522) dan Henry Chong (D4460) Linked List Linked List  adalah koleksi data item tersusun dalam sebuah barisan  secara linear, di dalam tempat yang disebut dengan node . Sedangkan  Array  adalah koleksi dari object yang mempunyai tipe identik / sama, array dapat disebut juga koleksi data dengan setiap elemen data menggunakan nama yang sama dan masing-masing elemen mempunyai tipe data sama. Array dapat diloop dengan memberi indeks setiap item di dalamnya, dan setiap komponen / item array dapat diakses dan dibedakan melalui indeks array. Perbedaan linked list dan array : - Linked List :     ->  Setiap elemen linked list terdiri dari 2 bagian, data dan pointer address.     ->   Pengalokasian ruang memori dilakukan tanpa pendeklarasisan sebelumnya dan bersifat dinamis. - Array :     ->  Setiap elemen array hanya b...