Double Linked List C++
![]() |
Contoh Program Double Linked List C++ |
Setelah Anda membaca tentang salah satu jenis link single linked list, sekarang saatnya saya menyajikan jenis linked list yang lain yaitu double linked list. Pada dasarnya, penggunaan Double Linked List hampir sama dengan penggunaan Single Linked List yang telah kita pelajari pada materi sebelumnya. Hanya saja Double Linked List menerapkan sebuah pointer baru, yaitu prev, yang digunakan untuk menggeser mundur selain tetap mempertahankan pointer next.
Keberadaan 2 pointer penunjuk (next dan prev) menjadikan Double Linked List menjadi lebih fleksibel dibandingkan Single Linked List, namun membutuhkan memori tambahan dengan adanya pointer tambahan tersebut.
Double Linked list dibagi menjadi:
DLLNC (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.
- Pointer prev menunjuk pada node sebelumnya.
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.
DLLC (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 .
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
Double : artinya field pointer- nya terdiri dari dua buah dan dua arah , yaitu prev dan next
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next dan prev-nya menunjuk ke dirinya sendiri
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next dan prev-nya menunjuk ke dirinya sendiri
Contoh Program Double Linked List:
//double linked list non circular
//vs 2012 express [RS]
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <iomanip>
using namespace std;
typedef struct node
{
long data;
node* next; //tipe data bertipe sama untuk menunjuk ke node lain
node* prev;
};
//buat variabel node
node* head;
node* tail;
node* print;
node* del;
node* entry;
void inisialisasi()
{
head = NULL;
tail = NULL;
}
int isEmpty()
{
if(head == NULL)
return 1;
else
return 0;
}
void input(int *dta)
{
entry = new node;
entry->data = *dta;
entry->next = NULL;
entry->prev = NULL;
if(isEmpty()==1)
{
head = entry;
head->next = NULL;
head->prev = NULL;
tail=head;
}
else
{
tail->next = entry;
entry->prev = tail;
tail = entry;
}
}
//penghapusan data di belakang melalui head
void hapus()
{
int simpan;
if(head!=NULL) //jika hanya kondisi ini saja maka akan terjadi error karena disana ada syntax head->prev = NULL
{
if(head->next != NULL)
{
del=head;
simpan = head->data;
cout<<"\n"<<simpan<<" telah dihapus"<<endl;
head = head->next;
head->prev = NULL;
delete del;
}
else
{
simpan = head->data;
cout<<"\n"<<simpan<<" telah dihapus"<<endl;
head = NULL;
}
}
else
cout<<"\nLinked List kosong penghapusan tidak dapat dilakukan"<<endl;
}
void cetak()
{
print = head;
if(head!=NULL)
{
while(print!=NULL)
{
cout<<"\n\t"<<print->data;
print = print->next;
}
}
else
cout<<"\nTidak ada data dalam linked list"<<endl;
}
void menu()
{
char pilih, ulang;
int data;
do
{
system("CLS");
menu :
cout<<"DOUBLE LINKED LIST NON CIRCULAR"<<endl;
cout<<"-------------------------------"<<endl;
cout<<"Menu: ";
cout<<"\n1. Entry Data";
cout<<"\n2. Hapus Data";
cout<<"\n3. Cetak Data";
cout<<"\n4. Keluar";
cout<<"\nMasukkan pilihan Anda : ";
cin>>pilih;
switch(pilih)
{
case '1' :
cout<<"\nMasukkan Data : ";
cin>>data;
input(&data);
cout<<"\n"<<data<<" telah ditambahkan"<<endl;
break;
case '2' :
hapus();
break;
case '3' :
cetak();
break;
case '4' :
cout<<"\nTerima kasih telah menggunakan program ini"<<endl;
exit(EXIT_SUCCESS);
break;
default :
cout<<"\nPilih ulang"<<endl;
goto menu;
}
cout<<"\nKembali ke menu? (y/n)";
cin>>ulang;
}while(ulang=='y' || ulang =='Y');
}
int main()
{
inisialisasi();
menu();
return EXIT_SUCCESS;
}
Output
Entry data (9,64,53)
DOUBLE LINKED LIST NON CIRCULAR
-------------------------------
Menu:
1. Entry Data
2. Hapus Data
3. Cetak Data
4. Keluar
Masukkan pilihan Anda : 1
Masukkan Data : 9
9 telah ditambahkan
Kembali ke menu? (y/n)
DOUBLE LINKED LIST NON CIRCULAR
-------------------------------
Menu:
1. Entry Data
2. Hapus Data
3. Cetak Data
4. Keluar
Masukkan pilihan Anda : 1
Masukkan Data : 64
64 telah ditambahkan
Kembali ke menu? (y/n)
DOUBLE LINKED LIST NON CIRCULAR
-------------------------------
Menu:
1. Entry Data
2. Hapus Data
3. Cetak Data
4. Keluar
Masukkan pilihan Anda : 1
Masukkan Data : 53
53 telah ditambahkan
Kembali ke menu? (y/n)
Hapus data
DOUBLE LINKED LIST NON CIRCULAR
-------------------------------
Menu:
1. Entry Data
2. Hapus Data
3. Cetak Data
4. Keluar
Masukkan pilihan Anda : 2
9 telah dihapus
Kembali ke menu? (y/n)
Cetak data
DOUBLE LINKED LIST NON CIRCULAR
-------------------------------
Menu:
1. Entry Data
2. Hapus Data
3. Cetak Data
4. Keluar
Masukkan pilihan Anda : 3
64
53
Kembali ke menu? (y/n)
Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?
Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).
Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.
Terima kasih
kok eror gan di bagian :
ReplyDeletetypedef struct node
{
long data;
node* next; //tipe data bertipe sama untuk menunjuk ke node lain
node* prev;
};
"need an identifier to declare"
@Prima Ozz
DeleteSaya test lagi dengan Visual Studio 2012 masih jalan normal.
Coba ganti struct dengan code di bawah ini:
typedef struct node NODE;
struct node
{
long data;
node *prev;
node *next;
};
atau
struct node
{
long data;
node *next;
node *prev;
};
atau
typedef struct node
{
long data;
node* next;
node* prev;
}NODE;
disininya error gan yang bagian case 4
ReplyDeleteexit(EXIT_SUCCESS);
@agus purnawan
DeleteKalau 'EXIT_SUCCESS' menghasilkan error ganti dengan angka 0
exit(0);
return 0;
Selamat mencoba :)
program nya tetep error kak masihan meskipun udh di ganti
Deleteexit(0);
return 0;
kenapa pas di run langsung habis gan? "press you continue" gitu..
ReplyDelete@Unknown
DeleteMaaf mas/mbak. Program sudah saya cek kembali, dan berjalan normal.
Program Normal dan jalan.. hanya di EXIT SUCCSES Perlu tambahan library #include
ReplyDelete@Aziez
DeleteTerima kasih sudah berkunjung mas. Semoga bermanfaat! :)