Selasa, 03 Maret 2020

linked list pertemuan III

Materi Pertemuan 3 mar 2020

Review Materi minggu lalu + contoh coding in c
Hal yang akan di bahas :
1.Circular Single Linked List
2.Doubly Linked List
3.Circular Double Linked List

1.Circular Single Linked List
Dalam linked list ini , tidak ada ada "last node" ,jika sudah sampai ke node terakhir , akan berisikan pointer node pertama , sehingga tidak ada node yang berisikan NULL value. Semua node dalam Circular Single Linked List dapat menjadi starting point.
contoh coding single linked list insert adn pop
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

struct emp{
 int age;
 char name[100];
 struct emp *next;
}*head = NULL, *tail = NULL;


/*LL operation:
1. Insert
2. Pop / Delete
3. Search
*/
void insertBack(int age, const char *name){
 struct emp *curr =
   (struct emp *)malloc(sizeof(struct emp));
 curr->age = age;
 strcpy(curr->name, name);
 curr->next = NULL;
 if(head == NULL){
  head = tail = curr;
 }else{
  tail->next = curr;
  tail = curr;
 }
}

void insertFront(int age, const char *name){
 struct emp *curr =
   (struct emp *)malloc(sizeof(struct emp));
 curr->age = age;
 strcpy(curr->name, name);
 curr->next = NULL;
 if(head == NULL){
  head = tail = curr;
 }else{
  curr->next = head;
  head = curr;
 }
}

void viewLL(){
 struct emp *curr = head;
 while(curr != NULL){
  printf("%2d : %-20s\n", curr->age, curr->name);
  curr = curr->next;
 }
 printf("\n");
}

void popFront(){ //QUEUE, Head will be removed first
 struct emp *curr = head;
 if(curr == tail){
  free(curr);
  head = tail = NULL;
 }else if(curr){ //curr != NULL
  head = head->next;
  free(curr);
 }
}

void popBack(){ //STACK, Tail will be removed first
 struct emp *curr = head;
 if(curr == tail){
  free(curr);
  head = tail = NULL;
 }else if(curr){
  while(curr->next != tail && curr){
   curr = curr->next;
  }
  free(tail);
  tail = curr;
  tail->next = NULL;
 }
}

int main(){

 insertBack(27, "Hanry Ham");
 insertBack(33, "Derwin Suhartono");
 insertBack(30, "Novita Hanafiah");
 insertBack(26, "Reinert Y Rumagit");
 insertBack(27, "Yohan Muliono");
 viewLL();

 popFront();
 popFront();
 viewLL();

 popBack();
 popBack();
 popBack();
 viewLL();

 return 0;
}

2.Doubly Linked List

Di dalam Doubly Linked List,setiap node memiliki 2 link , 1 untuk menuju ke node selanjutnya , 1 nya lagi untuk menuju ke node sebelumnya.
seperti kita lihat di gambar , jika single linked list memiliki 1 kotak , sedangkan doubly linked list memiliki 2 kotak berisi next dan previous.


2.1 Doubly Linked List Insertion
Push merupakan sebuah operasi insert dimana di dalam linked list terdapat 2 kemungkinan insert, yaitu insert depan dan insert dari belakang. Insert dari depan akan memasukan data paling baru ke depan data sebelumnya , jika insert dari belakang berarti akan menempatkan data paling baru ke belakang data sebelumnya . Contoh : 
 1. Insert dari depan : 1 ,2 ,3 ,4 maka hasilnya akan mejadi 4,3,2,1
 2. Inser dari belakang : 1,2,3,4 maka hasilnya akan 1,2,3,4




















2.2 Doubly Linked List Deletion
Pop merupakan operasi delete diaman ada 2 cara yaitu pop dari depan , berarti akan mengahapus data yang paling depan , sedangkan pop belakang akan menghapus data dari paling belakang.

Operasi pop dari depan
Operasi pop dari belakaang

contoh coding double linked list pop and insert

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct emp{
 int age;
 char name[100];
 struct emp *next;
 struct emp *prev;
}*head = NULL, *tail = NULL;

void insertBack(int age, const char *name){
 struct emp *curr = (struct emp*)
      malloc(sizeof(struct emp));
 curr->age = age;
 strcpy(curr->name, name);
 curr->next = NULL;
 if(head == NULL){
  head = tail = curr;
  head->prev = NULL;
 }else{
  tail->next = curr;
  curr->prev = tail;
  tail = curr;
 }
}

void insertFront(int age, const char *name){
 struct emp *curr = (struct emp*)
      malloc(sizeof(struct emp));
 curr->age = age;
 strcpy(curr->name, name);
 curr->next = NULL;
 if(head == NULL){
  head = tail = curr;
  head->prev = NULL;
 }else{
  curr->next = head;
  head->prev = curr;
  head = curr;
 }
}

void popBack(){
 struct emp *curr = tail;
 if(curr){
  tail = tail->prev;
  free(curr);
  tail->next = NULL;
 }
}

void popFront(){
 struct emp *curr = head;
 if(curr){
  head = head->next;
  free(curr);
  head->prev = NULL;
 }
}

void viewLL(){
 struct emp *curr = head;
 while(curr != NULL){
  printf("%2d : %-20s\n", curr->age, curr->name);
  curr = curr->next;
 }
 printf("\n");
}

int main(){
 insertBack(27, "Hanry Ham");
 insertBack(33, "Derwin Suhartono");
 insertBack(30, "Novita Hanafiah");
 insertBack(26, "Reinert Y Rumagit");
 insertBack(27, "Yohan Muliono");
 viewLL();

 head = tail = NULL;
 insertFront(27, "Hanry Ham");
 insertFront(33, "Derwin Suhartono");
 insertFront(30, "Novita Hanafiah");
 insertFront(26, "Reinert Y Rumagit");
 insertFront(27, "Yohan Muliono");
 viewLL();

 return 0;
}
3.Circular Doubly Linked List
 Circular Doubly Linked List hampir sama seperti CIrcular Single Linked List , akan tetapi setiap node memiliki 2 pointer yaitu next dan previous.
Nama ; Joviandy Widyananda
NIM ; 2301846225
Kelas ; CB01/LK01

Selasa, 25 Februari 2020

Materi Pertemuan 25 Feb 2020


Hal yang akan di bahas :
1.Circular Single Linked List
2.Doubly Linked List
3.Circular Double Linked List

1.Circular Single Linked List
Dalam linked list ini , tidak ada ada "last node" ,jika sudah sampai ke node terakhir , akan berisikan pointer node pertama , sehingga tidak ada node yang berisikan NULL value. Semua node dalam Circular Single Linked List dapat menjadi starting point.

2.Doubly Linked List

Di dalam Doubly Linked List,setiap node memiliki 2 link , 1 untuk menuju ke node selanjutnya , 1 nya lagi untuk menuju ke node sebelumnya.
seperti kita lihat di gambar , jika single linked list memiliki 1 kotak , sedangkan doubly linked list memiliki 2 kotak berisi next dan previous.


2.1 Doubly Linked List Insertion
Push merupakan sebuah operasi insert dimana di dalam linked list terdapat 2 kemungkinan insert, yaitu insert depan dan insert dari belakang. Insert dari depan akan memasukan data paling baru ke depan data sebelumnya , jika insert dari belakang berarti akan menempatkan data paling baru ke belakang data sebelumnya . Contoh : 
 1. Insert dari depan : 1 ,2 ,3 ,4 maka hasilnya akan mejadi 4,3,2,1
 2. Inser dari belakang : 1,2,3,4 maka hasilnya akan 1,2,3,4




















2.2 Doubly Linked List Deletion
Pop merupakan operasi delete diaman ada 2 cara yaitu pop dari depan , berarti akan mengahapus data yang paling depan , sedangkan pop belakang akan menghapus data dari paling belakang.

Operasi pop dari depan
Operasi pop dari belakaang

3.Circular Doubly Linked List
 Circular Doubly Linked List hampir sama seperti CIrcular Single Linked List , akan tetapi setiap node memiliki 2 pointer yaitu next dan previous.
Nama ; Joviandy Widyananda
NIM ; 2301846225
Kelas ; CB01/LK01