Sunday, 1 March 2020

Summary Linked List



by William Kurnia Mulyadi Putra/2301887521

1. Pengenalan Linked List
   Berdasrkan yang telah saya pelajari saya dapat menyimpulkan bahwa linked list suatu metode yang digunakan untuk menggantikan array agar menjadi lebih hemat memory. Linked list pada bahasa C dapat dibuat menggunakan struct{};

2. Perbedaan Linked List dengan Array
    keunggulan linked list dengan array :
  • Linked list merupakan dynamic programming, artinya memory yang diperlukan sesuai dengan yang digunakan, sehingga linked list lebih hemat memory. 
  • Memory yang diperlukan dapat dialokasikan pada saat program sedang berjalan, sedangkan memory yang diperlukan oleh array perlu dialokasikan sebelum program dicompile.
    kelemahan linked list terhadap array :
  • kita tidak dapat melakukan random access pada saat menggunakan linked list, misanya :
tertdapat program :

#include <stdio.h>

int main (){
     int array[5] = {1,2,3,4,5};
//jika ingin mengubah array pada index kedua maka dapat dilakukan random //acces
Array[2] = 0;
//sehingga anggota array berubah menjadi {1,2,0,4,5};
         
   Tetapi dalam menggunakan linked list, kita harus mengkases anggota dimulai dari anggota terawal dan mengkases satu demi satu sampai mendapatkan anggota tujuan.

3. Cara Membuat Linked List Menggunakan Bahasa C
   Dalam bahasa C linked list dibuat dengan cara membuat sebuah struct{}; . Pada umumnya struktur linked list terdiri atas dua :
-         data yang disimpan linked list
-         pointer ke listnode selanjutnya

dalam bentuk kode ;

#include <stdio.h>
struct node {
   //data node
   node *next_node;
};

Setiap individu struct pada suatu linked list dinamakan node. Node terdepan pada suatu linked list diberikan nama head, sedangkan node terbelakang pada suatu linked list dinamakan tail. Hal – hal yang dapat dilakukan pada suatu linked list adalah menambahkan data dan menghapus data.

Cara memasukkan data di linked list terbagi menjadi 3 cara :
-         memasukkan data pada awal linked list
sebagai contoh, terdapat kode seperti berikut :

#include<stdio.h>
struct node {
          int data;
          node *next;
};
int main (){
int input;
          struct node *head = NULL;
          struct node *tail  = NULL;
         
printf("Inset data ==> ");
          scanf("%d", &input);getchar();
push_head(&head, input, &tail);
          return 0;
}

Maka untuk melakukan penambahan data pada head linked list :
void push_head (struct node **head, int value, struct node **tail){
          node *temp = (node*)malloc(sizeof(struct node));
          temp->data = value;
          if(*head == NULL){
                   temp->next = NULL;
                   *head = temp;
                   *tail = temp;
          }else{
                   temp->next = *head;
                   *head = temp;
          }
         
}
-         memasukkan data pada akhir linked list
sebagai contoh, terdapat kode seperti berikut :

#include<stdio.h>
struct node {
          int data;
          node *next;
};
int main (){
int input;
          struct node *head = NULL;
          struct node *tail  = NULL;
         
printf("Inset data ==> ");
scanf("%d", &input);getchar();
push_tail(&head, input, &tail);
          return 0;
}

Maka untuk melakukan penambahan data pada tail linked list :

void push_tail(struct node **head, int value, struct node **tail){
          node *temp = (node*)malloc(sizeof(struct node));
          temp->data = value;
          if(*head == NULL){
                   temp->next = NULL;
                   *head = temp;
                   *tail = temp;
          }else{
                   node *prev =  *tail;
                   temp->next = NULL;
                   prev->next = temp;
                   *tail = temp;
          }       
}

Cara menghapus data pada suatu linked list :

Sebagai contoh, terdapat kode seperti berikut :

#include<stdio.h>
struct node {
          int data;
          node *next;
};

Terdapat linked list berisis 1à2à3à4à5àNULL.
Maka kode untuk menampilkan isi linked list pada console adalah :

void display(struct node *current){
          if(current == NULL){
                   printf("Empty list\n");
          }else{
                   while(current!=NULL){
                             printf("%d-->", current->data);
                             current = current->next;
                   }
                   printf("[NULL]\n");
          }
         
}

Maka output yang ditampilkan pada console adalah :

1-->2-->3-->4-->5-->[NULL]

4. Jenis-Jenis Linked List
terdapat 4 jenis linked list yaitu :
- singly linked list -> merupakan linked list dimana setiap node hanya terhubung dengan node selanjutnya dan node terakhir memiliki pointer NULL.

- doubly linked list -> merupakan linked list dimana setiap node hanya terhubung dengan node selanjutnya dan node sebelumnya. Node terakhir memiliki pointer NULL.

-circular linked list -> merupakan linked list dimana setiap node hanya terhubung dengan node selanjutnya dan node terakhir memiliki pointer yang menunjuk ke node pertama.

-circular doubly linked list -> merupakan linked list dimana setiap node hanya terhubung dengan node selanjutnya dan node sebelumnya. Node terakhir memiliki pointer yang menunjuk ke node pertama.


sumber :








No comments:

Post a Comment