RANGKUMAN STRUKTUR DATA

Taufik Akhmad Setiadi

Double linked list Non Circular

DLLNC "Double linked list non circular" adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev.
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.
Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.
Ilustrasi DLLNC









Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya
 
Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL
Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.
Deklarasi dan node baru DLLNC

Deklarasi node 
Dibuat dari struct berikut ini :
typedef struct TNode {
int data ;
TNode *next ;
Tnode * prev ;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya .
TNode * baru ;
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL; 

Contoh Program :
//#include <stdio.h>   ---> Visual C++ 2006 / Turbo C++  
#include <stdafx.h>  //---> Visual C++ 2008  
#include <conio.h>  
#include <stdlib.h>  
  
typedef struct TNode{  
      int data;  
      TNode *next;  
      TNode *prev;  
     } TNode;  
TNode *head=NULL;  
void init();  
int IsEmpty();  
void InsertDepan(int value);  
void InsertBelakang(int value);  
void DeleteDepan();  
void DeleteBelakang();  
void ClearAll();  
void Tampil();  
  
  
void main() // ---> Program Utama  
{  
 int data;  
 int key;  
 do  
 {  
  printf("\n\n ____MENU PROGRAM____ \n\n");  
  printf(" [1] Insert Depan \n");  
  printf(" [2] Insert Belakang \n");  
  printf(" [3] Hapus Depan \n");  
  printf(" [4] Hapus Belakang \n");  
  printf(" [5] Hapus Semua List \n");  
  printf("\n Pilihan Anda [1-5] --> ");scanf("%d",&key);  
  system("CLS");  
  if(key==1)  
  {  
   printf("\n Masukan Data : "); scanf("%d",&data);  
   InsertDepan(data);  
   Tampil();  
  }  
  else if(key==2)  
  {  
   printf("\n Masukan Data : "); scanf("%d",&data);  
   InsertBelakang(data);  
   Tampil();  
  }  
  else if(key==3)  
  {  
   DeleteDepan();  
   getch();  
   Tampil();  
  }  
  else if(key==4)  
  {  
   DeleteBelakang();  
   getch();  
   Tampil();  
  }  
  else if(key==5)  
  {  
   ClearAll();  
   printf("\n\n Semua List Sudah Di Hapus \n");  
  }  
  else  
  {  
   printf("\n Pilihan Anda Salah \n");  
  }  
  getch();  
 }  
 while(key);  
}  // ---> En Program Utama  
  
  
void init()  // ---> Inisiasi  
{  
 head = NULL;  
}  
  
  
int IsEmpty() // ---> Mengecekan kondisi [kosong/tidak]  
{  
 if(head==NULL)  
 return 1;  
 else  
 return 0;  
}  
  
  
void InsertDepan(int value) // ---> Menambahkan data dari depan  
{  
 TNode *baru;  
 baru = new TNode;  
 baru ->data = value;  
 baru ->next = NULL;  
 baru ->prev = NULL;  
 if(IsEmpty()==1)  
 {  
  head = baru;  
  head ->next=NULL;  
  head ->prev=NULL;  
 }  
 else  
 {  
  baru ->next=head;  
  head ->prev=baru;  
  head=baru;  
 }  
 printf(" Data Masuk --> ");  
}  
  
  
void InsertBelakang(int value) // ---> Menambahkan data dari belakang  
{  
 TNode *baru, *bantu;  
 baru = new TNode;  
 baru ->data = value;  
 baru ->next = NULL;  
 baru ->prev = NULL;  
 if(IsEmpty()==1)  
 {  
  head = baru;  
  head ->next = NULL;  
  head ->prev = NULL;  
 }  
 else  
 {  
  bantu=head;  
  while(bantu ->next != NULL)  
  {  
   bantubantu = bantu ->next;  
  }  
  bantu ->next=baru;  
  baru ->prev=bantu;  
 }  
 printf(" Data Masuk --> ");  
}  
  
  
void DeleteDepan() // ---> Menghapus data dari depan  
{  
 TNode *hapus;  
 int d;  
 if(IsEmpty()==0)  
 {  
  if(head ->next !=NULL)  
  {  
   hapus = head;  
   d=hapus ->data;  
   headhead=head ->next;  
   head ->prev = NULL;  
   delete hapus;  
  }  
  else  
  {  
   d=head->data;  
   head=NULL;  
  }  
  printf("\n %d Data Terhapus \n",d);  
  printf(" Maka Menjadi --> ");  
    
 }  
 else  
 printf("\n Masih Kosong --> ");  
}  
  
  
void DeleteBelakang() // ---> Menghapus data dari belakang  
{  
 TNode *hapus,*bantu;  
    int d;  
    if (IsEmpty()==0)  
 {  
        if(head->next != NULL)  
  {  
            bantu = head;  
            while(bantu->next->next!=NULL)  
   {  
                bantubantu = bantu->next;  
            }  
            hapus = bantu->next;  
            d = hapus->data;  
            bantu->next = NULL;  
            delete hapus;  
        }  
  else  
  {  
            d = head->data;  
            head = NULL;  
        }  
        printf("\n %d terhapus \n",d);  
  printf(" Maka Menjadi --> ");  
    }  
 else printf("\n Masih Kosong --> ");  
}  
  
void ClearAll() // ---> Mengahapus semua data(hapus list)  
{  
 TNode *bantu, *hapus;  
 bantu=head;  
 while(bantu !=NULL)  
 {  
  hapus=bantu;  
  bantubantu=bantu ->next;  
  delete hapus;  
 }  
 head=NULL;  
}  
  
  
void Tampil() // ---> Menapmpilkan list  
{  
 TNode *bantu;  
 bantu=head;  
 if(IsEmpty()==0)  
 {  
  while(bantu !=NULL)  
  {  
   printf(" [%d]", bantu ->data);  
   bantubantu=bantu ->next;  
  }  
  printf("\n ");  
 }  
 else  
 printf(" Data Kosong");  

0 komentar:

Posting Komentar