Tuesday, February 25, 2020

Linked List


Linked list merupakan Merupakan suatu struktur data pengembangan dari konsep ADT (Abstrak Data Type) yang bersifat dinamis. Linked List dapat dimanfaatkan secara effektif sesuai dengan keperluan. Linked List juga dapat benar – benar dihapus / dibersihkan dari memory.Linked List sebenarnya merupakan suatu typedata tersendiri.

Linked list minimal mempunyai 2 element itu adalah data dan pointer untuk menunjukkan ke list berikutnya.

linkedlist1
Doubly Linked list : Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut. Pointer next dan prev-nya menunjuk ke null.






doubly linked list :
struct tnode {
    int value;
    struct tnode *prev;
    struct tnode *next;
};
struct tnode * head=0;
struct tnode * tail=0;

Menambah data pada barisan awal:

void pushHead(int age, char name[]){
                //membuat blok data baru
                current = (struct human *)malloc(sizeof human);
                //mengisi data
                strcpy(current->name, name);
                current->age=age;
                //membuat penunjuk data lain menjadi NULL terlebih dahulu
                current->next = current->prev=NULL;

                //jika tidak ada data
                if(head==NULL){
                                //maka akan jadi data pertama, head dan tail akan sama dengan data baru
                                head=tail=current;
                //jika ada data
                }else{
                                //pergantian head menjadi data terbaru
                                head->prev=current;
                                current->next=head;
                                head=current;
                }

}

Menambah data pada barisan akhir :

void pushTail(int age, char name[]){
                //membuat blok data baru
                current = (struct human *)malloc(sizeof human);
                //mengisi data
                strcpy(current->name, name);
                current->age = age;
                //membuat penunjuk data lain menjadi NULL terlebih dahulu
                current->prev = current->next = NULL;

                //jika tidak ada data
                if(head==NULL){
                                //maka akan jadi data pertama, head dan tail akan sama dengan data baru
                                head=tail=current;
                //jika ada data
                }else{
                                //pergantian tail menjadi data terbaru
                                current->prev = tail;
                                tail->next = current;
                                tail = current;
                }

}

Menghapus data awal :

void popHead(){
                //jika tidak ada data
                if(head==NULL){
                                printf("No Data\n");
                //jika hanya ada 1 data
                }else if(head==tail){
                                current=head;
                                head=tail=NULL;
                                free(current);
                //jika lebih dari 1 data
                }else{
                                current=head;
                                head=head->next;
                head->prev=NULL;
                                free(current);
                }

}

Menghapus data akhir :


void popTail(){
                //jika tidak ada data
                if(head==NULL){
                                printf("No Data\n");
                //jika hanya ada 1 data
                }else if(head==tail){
                                current=tail;
                                head=tail=NULL;
                                free(current);
                //jika lebih dari 1 data
                }else{
                                current=tail;
                                tail=tail->prev;
                tail->next=NULL;
                                free(current);
                }
}

Circular Single Linked List merupakan Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.

single cir ll


Circular doubly Linked List merupakan Doubly Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.

double cir ll


reference :
https://dewa18.wordpress.com/2009/11/02/struktur-data-linked-list/
https://www.mahirkoding.com/struktur-data-double-linked-list-dengan-bahasa-c/
- binusmaya