Minggu, 26 Juli 2015

Double Linked List

Double Linked List

Double Link List adalah elemen-elemen yang dihubungkan dengan dua pointer dalam satu elemen dan list dapat melintas baik di depan atau belakang.
Elemen double link list terdiri dari tiga bagian:
- Bagian data informasi
- Pointer next yang menunjuk ke elemen berikutnya
- Pointer prev yang menunjuk ke elemen sebelumnya

Untuk menunjuk head dari double link list, pointer prev dari elemen pertama menunjuk NULL. Sedangkan untuk menunjuk tail, pointer next dari elemen terakhir menunjuk NULL.
Contoh Membuat TDA(Tipe Data Abstrak) dari Double Linked Circular List tersebut.
Instan :
Double Linked Circular List
Operasi :
Buat_node(char x) : membuat node baru dengan informasi x
Tambah_elemen_didepan() : menambah elemen paling depan (pointernya menunjuk
elemen pertama link list)
Tambah_elemen_dibelakang() : menambah elemen paling belakang (pointer elemen
yang baru menunjuk elemen pertama)
Hapus_elemen_() : Menghapus elemen (pointer menunjuk elemen yang akan dihapus)
Cetak () : menelusuri elemen satu demi dan menampilkan informasinya.

Ada 2 jenis Double Linked List yaitu :
·         Double Linked List Circular
·         Double Linked List Non Circular

1.     Double Linked List Circular
Pengertian secara umumnya DLLC itu Linked list yang menggunakan pointer, dimana setiap node memiliki 3 field, yaitu:
1 field pointer yang menunjuk pointer berikutnya “next“,
1 field menunjuk pointer sebelumnya ” prev “,
1 field yang berisi data untuk node tersebut .
Double Linked List Circular pointer next dan prev nya menunjuk kedirinya sendiri secara circular. Bentuk Node DLLC

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.

Contoh Program Double Linked List : 
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<alloc.h>
int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();

struct simpul
{
char nim[8],nama[20];
int umur;
struct simpul *kiri, *kanan;
}
mhs,*baru,*awal=NULL,*akhir=NULL,*hapus,*bantu;
int main()
{
do
{
cout<<" Menu Double Linkedlist "<<endl;
cout<<" 1 . Tambah Depan "<<endl;
cout<<" 2 . Tambah Belakang "<<endl;
cout<<" 3 . Hapus Depan "<<endl;
cout<<" 4 . Hapus Belakang "<<endl;
cout<<" 5 . Tampilkan "<<endl;
cout<<" Pilihan Anda : ";cin>>pil;
pilih();
}
while(pil!=6);
return 0;
}
void pilih()
{
if(pil==1)
tambah_depan();
else if(pil==2)
tambah_belakang();
else if(pil==3)
hapus_depan();
else if(pil==4)
hapus_belakang();
else if(pil==5)
tampil();
else
cout<<"selesai";
}
void buat_baru()
{
baru=(simpul*)malloc(sizeof(struct simpul));
cout<<" input nim : ";cin>>baru->nim;
cout<<" input nama : ";cin>>baru->nama;
cout<<" input umur : ";cin>>baru->umur;
baru->kiri=NULL;
baru->kanan=NULL;
}
void tambah_belakang()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
}
else
{
akhir->kanan=baru;
baru->kiri=akhir;
akhir=baru;
}
cout<<endl<<endl;
tampil();
}
void tambah_depan()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
}
else
{
baru->kanan=awal;
awal->kiri=baru;
awal=baru;
}
cout<<endl<<endl;
tampil();
}
void hapus_depan()
{
if(awal==NULL)
cout<<"Kosong";
else
if(awal->kanan==NULL)
{
hapus=awal;
awal=NULL;
akhir=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void hapus_belakang()
{
if(awal==NULL)
cout<<"Kosong";
else
if(awal->kanan==NULL)
{
hapus=awal;
awal=NULL;
akhir=NULL;
free(hapus);
}
else
{
hapus=akhir;
akhir=hapus->kiri;
akhir->kanan=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}void tampil()
{
if(awal==NULL)
cout<<"Kosong";
else
{
bantu=awal;
while(bantu!=NULL)
{
cout<<"NIM : "<<bantu->nim<<endl;
cout<<"Nama : "<<bantu->nama<<endl;
cout<<"Umur : "<<bantu->umur<<endl;
bantu=bantu->kanan;
}
}
getch();
}

0 komentar:

Posting Komentar