Double Linked List C++ - nblognlife

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 sebelumnyaUntuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULLSelanjutnya 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 .

-          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

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)
           
[RS]

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