Pemrograman

Cara Membuat Double Linked List menggunakan C++

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

#include <iostream>
#include <list>

using namespace std;
typedef list<int> LI;

class DLL{
    LI dt;
public:
    int isEmpty(){ return dt.empty();}
    void push_back(int val);
    void push_front(int val);
    void push_after(int val,int after);
    LI::iterator find(int val);
    void del(int val);
    void print();
};

void DLL::print(){
    LI::iterator it;
    for(it=dt.begin();it!=dt.end();++it)
        cout << (*it) << "->";
    cout << "NULL" << endl;
}

LI::iterator DLL::find(int val){
    LI::iterator it;
    for(it=dt.begin();it!=dt.end();++it)
        if((*it) == val) return it;
    return it;
}
void DLL::push_back(int val){
  dt.push_back(val);
}

void DLL::push_front(int val){
  dt.push_front(val);
}

void DLL::push_after(int val,int after){
    LI::iterator it=find(after);
    if(it!=dt.end()){
        ++it;
        dt.insert(it,val);
    }
}
void DLL::del(int val){
    LI::iterator it=find(val);
    if(it!=dt.end()) dt.erase(it);
}

int main(){
    DLL list;
    list.push_back(10);
    list.push_front(20);
    list.push_front(30);
    list.push_after(10,50);
    list.del(20);
    list.print();
    return 0;
}

Output

comments powered by Disqus