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 double linked list non circular
#include <stdio.h>
#include <stdafx.h>
#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)
{
bantu = 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;
head=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)
{
bantu = 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;
bantu=bantu ->next;
delete hapus;
}
head=NULL;
}
void Tampil() // ---> Menapmpilkan list
{
TNode *bantu;
bantu=head;
if(IsEmpty()==0)
{
while(bantu !=NULL)
{
printf(" [%d]", bantu
->data);
bantu=bantu ->next;
}
printf("\n ");
}
else
printf(" Data Kosong");
}
EmoticonEmoticon