Tuesday, February 25, 2020

linked list

Linked list 2 ==>
1.     Menjelaskan konsep dari data struktur dan penggunaannya di teknik informatika.
2.     Mengilustrasikan pembelajaran data struktur dan pengaplikasiannya.
3.     Mengaplikasikan data struktur di C.

Linked list adalah linear data struktur, di mana elemen tidak disimpan di lokasi memori yang berdekatan. Elemen-elemen dalam linked list ditautkan menggunakan pointer.






Circular single linked list = dalam circular tail selalu menunjuk ke head, berbeda dengan linked list biasa yang tail menunjuk ke null.






Doubly linked list = two way linked list = linked list data struktur dengan 2 link, 1 mengandung referensi ke data selanjutnya dan yang 1 mengndung referensi ke data sebelumnya.



struct tnode {
                        int value;
                        struct tnode *next;
                        struct tnode *prev;
            };
            struct tnode *head = 0;
            struct tnode *tail = 0;
Format baris dalam program = 
  1. Next statement
  2. Value statement
  3. Previous statement
Multiply linked list = setiap node berisi dua atau lebih link fields, masing-masing field digunakan untuk menghubungkan set rekaman data yang sama dalam urutan berbeda dari set yang sama.

linked list insertion =
  • memasukan node dari depan : Node baru selalu ditambahkan sebelum head linked list yang diberikan. Dan node yang baru ditambahkan menjadi head baru dari linked list. 
  • memasukan node setelah simpul yang diberikan : saya diberi pointer ke sebuah node, dan node baru dimasukkan setelah node yang diberikan.
  • memasukan node di akhir : Node baru selalu ditambahkan setelah node terakhir dari linked list yang diberikan.
Doubly linked list: insert = sama seperti single linked list, pertama kita harus mengalomasikan node baru dan memasukan nilai ke dalamnya, lalu kita mengoneksikan node dengan existing linked list.
Misalkan kita ingin menambahkan node baru di belakang tail =
struct tnode *node =
                        (struct tnode*) malloc(sizeof(struct tnode));
            node->value = x;
            node->next  = NULL;
            node->prev  = tail;
            tail->next  = node;
            tail = node;
Doubly linked list: delete = ada 4 kondisi yang harus kita perhatikan saat deleting =
1.     Node yang akan di delete adalah node yang hanya ada di linked list.
free(head);
head = NULL;
tail = NULL;
2.     Node yang akan di delete adalah head.
head = head->next;
free(head->prev);
head->prev = NULL;
3.     Node yang akan di delete adalah tail.
tail = tail->prev;
free(tail->next);
tail->next = NULL;
4.     Node yang akan di delete bukan tail atau head.
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);
Circular doubly linked list = mirip dengan circular single linked list, tapi total pointer di tiap node disini adalah 2 pointer.