Double Linked List adalah ebuah linked list yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode linked list, suatu daftar isi yang saling berhubungan.
Baiklah, Santekno akan memberikan implementasi dari Double Linked List dengan menggunakan bahasa C++. Hal yang paling penting dalam pembuatan Double Linked List adalah kita akan membuat suatu linked yang nantinya bisa saling terhubung sehingga agar bisa saling terhubung tersebut membutuhkan beberapa fungsi yang bisa mengoperasikannya seperti, insert depan, insert belakang, insert di tengah, delete, size, dan lain-lainnya.
Linked List yang akan Santekno buat menerapkan sistem OOP (Object Oriented Programming) sehingga agar lebih mudah dipahaminya. Dalam OOP kita harus membuat suatu kelas yang akan kita namakan DLL, atau singkatan dari Double Linked List.
Fungsi-fungsi yang akan dibuat
- Membuat Node Fungsi
make() - Tambah Node di belakang
push_back() - Tambah Node di depan
push_front() - Tambah Node setelah n
push_after() - Mencari Node
find() - Mencari Node sebelum n
find_before() - Hapus Node n
del() - Mencetak linked list
print() - Main Program
Code Program Kelas SLL
1#include <iostream>
2#include <list>
3
4using namespace std;
5typedef list<int> LI;
6
7class DLL{
8 LI dt;
9public:
10 int isEmpty(){ return dt.empty();}
11 void push_back(int val);
12 void push_front(int val);
13 void push_after(int val,int after);
14 LI::iterator find(int val);
15 void del(int val);
16 void print();
17};
18
19void DLL::print(){
20 LI::iterator it;
21 for(it=dt.begin();it!=dt.end();++it)
22 cout << (*it) << "->";
23 cout << "NULL" << endl;
24}
25
26LI::iterator DLL::find(int val){
27 LI::iterator it;
28 for(it=dt.begin();it!=dt.end();++it)
29 if((*it) == val) return it;
30 return it;
31}
32void DLL::push_back(int val){
33 dt.push_back(val);
34}
35
36void DLL::push_front(int val){
37 dt.push_front(val);
38}
39
40void DLL::push_after(int val,int after){
41 LI::iterator it=find(after);
42 if(it!=dt.end()){
43 ++it;
44 dt.insert(it,val);
45 }
46}
47void DLL::del(int val){
48 LI::iterator it=find(val);
49 if(it!=dt.end()) dt.erase(it);
50}
51
52int main(){
53 DLL list;
54 list.push_back(10);
55 list.push_front(20);
56 list.push_front(30);
57 list.push_after(10,50);
58 list.del(20);
59 list.print();
60 return 0;
61}Output