Langsung ke konten utama

MEMBUAT DOUBLE LINKED LIST DENGAN C++

Elemen-elemen dihubungkan dengan dua pointer dalam satu elemen. Struktur ini menyebabkan list melintas baik ke depan maupun ke belakang. Masing-masing elemen pada double linked list terdiri dari tiga bagian, disamping data dan pointer next, masing-masing elemen dilengkapi dengan pointer prev yang menunjuk ke elemen sebelumnya. Double linked list dibentuk dengan menyusun sejumlah elemen sehingga pointer next menunjuk ke elemen yang mengikutinya dan pointer prev menunjuk ke elemen yang mendahuluinya. Untuk menunjukkan head dari double linked list, maka pointer prev dari elemen pertama menunjuk NULL.

Untuk menunjukkan tail dari double linked list tersebut, maka pointer next dari elemen terakhir menunjuk NULL. Susunan elemen yang dihubungkan dalam bentuk double linked list dapat dilihat pada Gambar di bawah ini


Gambar 1. Sebuah simpul dengan menggunakan double linked list

Untuk melintas kembali melalui double linked list, kita gunakan pointer prev dari elemen yang berurutan pada arah tail ke head. Double linked list mempunyai fleksibilitas yang lebih tinggi daripada single linked list dalam perpindahan pada list. Bentuk ini sangat berguna ketika akan meletakkan suatu elemen pada list dan dapat memilih dengan lebih bijaksana bagaimana memindahkannya. Sebagai contoh, salah satu fleksibilitas dari double linked list adalah dalam hal memindahkan elemen dari pada menggunakan single linked list.

Definisi simpul
struct node
{
char nama[20];
int umur;
float tinggi;
node *prev;
node *next;
};


Setelah node dibuat, buat variabel baru yang bertipe pointer dari node yang berguna sebagai kepala (head) dan ekor (tail) linked list. Head selalu menunjuk pada simpul pertama, sedangkan tail selalu menunjuk pada simpul terakhir.
node *head=NULL, *tail=NULL;

Operasi pada Double Linked List
Membuat Simpul Baru
Untuk membuat node baru digunakan keyword new. Perintah ini digunakan untuk mempersiapkan sebuah node dengan alokasi memorinya. Selanjutnya medan informasi pada node tersebut diisi dengan data tertentu. Terakhir pointer prev dan next diisi dengan NULL.
Fungsi membuat simpul baru

void buat_baru()
{
    baru = new(node);
    cout<<"
   input nama : ";cin>>baru->nama;
   cout<<"input umur : ";cin>>baru->umur;
   cout<<"input tinggi : ";cin>>baru->tinggi;
   baru->prev=NULL; baru->next=NULL;
}


Menambah Simpul di Awal
Penambahan node baru yang akan diletakkan di node paling depan, perlu diperhatikan saat pertama kali (data masih kosong), maka saat penambahan data dilakukan head/tail ditunjukkan ke node baru tersebut. Sedangkan jika tidak kosong, data akan ditambahkan didepan head, kemudian node baru akan berubah menjadi head.

Fungsi menambah simpul di awal 

void tambah_depan() {
buat_baru();
if(head==NULL)
{
    head=baru;
   tail=baru;
}
else
{
   baru->next=head;
   head->prev=baru;
   head=baru;
}
cout<<endl<<endl; 

tampil();
}

Menambah Simpul di Belakang
Penambahan node di belakang akan selalu dikaitkan dengan tail dan kemudian node baru tersebut akan menjadi tail.

Fungsi menambah simpul di belakang
void tambah_belakang()
{
buat_baru();
 if(head==NULL)
{
   head=baru;
   tail=baru;
}
else
{
  tail->next=baru;
  baru->prev=tail;
  tail=baru;
}
cout<<endl<<endl;
tampil();
}

Menghapus Simpul di Awal
Menghapus node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan untuk menunjuk node yang akan dihapus, misalnya pointer hapus. Kemudian head harus ditunjukkan ke node sesudahnya terlebih dahulu agar list tidak putus, sehingga node setelah head lama akan menjadi head baru. Setelah itu barulah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Jika head masih NULL maka berarti data masih kosong!

Fungsi menghapus simpul dibelakang
void hapus_belakang()
{
if (head==NULL)
   cout<<"Kosong";
else if (head->next==NULL)
{
  hapus=head;
  head=NULL;
  tail=NULL;
  delete hapus;
}
else
{
  hapus=tail;
  tail=hapus->prev;
  tail->next=NULL;
  delete hapus;
}
cout<<endl<<endl;
tampil();
}



#include <iostream.h> 
#include <conio.h> 
#include <stdio.h> 

int pil; void pilih(); 
void buat_baru(); 
void tambah_belakang(); 
void tambah_depan(); 
void hapus_belakang(); 
void hapus_depan(); 
void tampil(); 

struct node 
{
     char nama [20];
     int umur;
     float tinggi;
     node *prev, *next;
}; 

node *baru, *head=NULL, *tail=NULL,*hapus,*bantu; 

void main()
 {
     do
     {
         clrscr();
         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<<"6. Selesai"<<endl;
         cout<<"Pilihan Anda : ";
         cin>>pil;
         pilih();
     }
 while(pil!=6);
 } 

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 = new(node);
     cout<<"input nama     : ";cin>>baru->nama;
     cout<<"input umur     : ";cin>>baru->umur;
     cout<<"input tinggi   : ";cin>>baru->tinggi;
     baru->prev=NULL;
     baru->next=NULL; 
} 

void tambah_belakang() 
{
     buat_baru();
     if(head==NULL)
      {
         head=baru;
         tail=baru;
      }
     else
     {
         tail->next=baru;
         baru->prev=tail;
         tail=baru;
     }
     cout<<endl<<endl;
     tampil();
} 

void tambah_depan()
 {
     buat_baru();
     if(head==NULL)
     {
         head=baru;
         tail=baru;
     }
     else
     {
         baru->next=head;
         head->prev=baru;
         head=baru;
     }
     cout<<endl<<endl;
     tampil();
 } 

void hapus_depan()
 {
     if (head==NULL)
         cout<<"Kosong";
     else if (head->next==NULL)
     {
       hapus=head;
       head=NULL;
       tail=NULL;
       delete hapus;
     }
     else
     {
         hapus=head;
         head=hapus->next;
         head->prev=NULL;
         delete hapus;
     }
     cout<<endl<<endl;
     tampil();
 } 

void hapus_belakang()
 {
     if (head==NULL)
         cout<<"Kosong";
     else if (head->next==NULL)
     {
       hapus=head;
       head=NULL;
       tail=NULL;
       delete hapus;
     }
     else
     {
      hapus=tail;
      tail=hapus->prev;
      tail->next=NULL;
      delete hapus; 
     }
     cout<<endl<<endl;
     tampil();
} 

void tampil()
 {
      if (head==NULL)
           cout<<"Kosong";
      else
      {
          bantu=head;
          while(bantu!=NULL)
          {
             cout<<"  nama   : "<<bantu->nama;
             cout<<"  umur   : "<<bantu->umur;
             cout<<"  tinggi : "<<bantu->tinggi<<endl;
             bantu=bantu->next;
          }
      }
      getch();
} 

Komentar

  1. mantap gan (y)
    buat teman2 yang ingin mencari contoh program dari single linked list silahkan visit ke my blog
    http://agantutorial.blogspot.com/2015/06/contoh-program-single-linked-list-c.html

    BalasHapus
  2. saya coba di dev kog erorr ya?

    BalasHapus
    Balasan
    1. bisa di kirimkan errorny, kalau bisa saya bantu via email

      Hapus
  3. error gan
    1:23: fatal error: iostream.h: No such file or directory compilation terminated.

    BalasHapus
  4. saya coba kok error yah gan ?
    bisa di bantu gak ?

    BalasHapus
    Balasan
    1. maaf jarang online karena kesibukan, cba diemail saja fery.rudiyanto@gmail.com

      Hapus

Posting Komentar

Kritik, Saran dan Komentar Kami tunggu

Postingan populer dari blog ini

Kekuatan dan Kelemahan Tipe - Tipe Pokemon

Tipe - Tipe Pokemon Demam pokemon kian menginkat, buat kami yang gemar memainkannya mimin beri daftar kekuatan dan kelemahan tiap tipe pokemon agar membatu dalam battel di gym. tiap - tiap pokmon dikelompokan kedalam 18 tipe yang berbeda diantarnya  Normal, Fighting, Flying, Poison, Ground, Rock,Steel, Fire, Psychic, Ice,  Bug, Grass, Water, Electric, Ghost, Dragon, Fairy dan Drak Setiap Pokemon dapat memiliki satu atau dua Tipe sekaligus. Contoh, Pikachu merupakan Pokemon bertipe Electric, sedangkan Bulbasaur merupakan Pokemon dengan Tipe Grass sekaligus Poison. Ada total 151 Pokemon, 84 diantaranya hanya memiliki satu Tipe sedangkan 67 Pokemon memiliki dua Tipe. Pokemon yang tipenya sama, memiliki kekuatan dan kelemahan yang sama juga saat Battle. Misal, Pokemon Tipe Poison melawan Tipe Poison, damage yang akan diterima akan setara. Di sisi lain, Pokemon Tipe Water mampu melakukan attack dengan damage besar ke Pokemon Tipe Fire yang lemah terhadap ser...

Macam-Macam Topologi Jaringan Komputer

Klikartikel.com - Pengertian topologi jaringan komputer yaitu suatu teknik atau cara untuk menyambungkan komputer ke beberapa komputer sekaliguan menjadi suatu jaringan yang terkoneksi satu dengan yang lainya. Ada banyak jenis topologi jaringan komputer didunia ini namun yang paling sering digunakan ada 5 jenis jaringan yaitu topologi jaringan ring, topologi jaringan start, topologi jaringan bus, topologi jaringan mesh dan topologi jaringan tree. Berikut ini pembahasaan dari tipe - tipe topologi jaringan. 1. Topologi Ring Topologi ring yaitu teknik menyambungkan komputer dengan cara setiap komputer di hubungkan dengan komputer yang lain dan seterusnya sampai kembali ke komputer pertama yang nantinya akan membentuk seperti lingkaran sehingga topologi ini sering disebut dengan ring. Komputer 1 akan mengirim file atau berkomunikasi dengan komputer 4, maka data akan melewati komputer 2 dan komputer 3 sampai data diterima oleh komputer...

Peringkat dan Jenis Processor Pada Android

Sebenarnya ada banyak jenis processor yang digunakan untuk perangkat android yang kita gunakan, tapi pada postingan kali ini saya hanya membagikan processor android yang sering digunakan saat ini beserta ranking kekuatan dan performa terbaik pada processor itu sendiri. Perlu diingat, informasi yang saya tulis dibawah ini mungkin belum bisa dikatakan 100% benar, karena saya hanya punya sedikit referensi untuk mengumpulkan data ini. Snapdragon  Yang pertama ada Processor Snapdragon. Processor Snapdragon merupakan processor android terbaik ( menurut adonbpc ), karena processor ini memiliki performa yang sangat baik dibanding processor android lainnya yang setara dengan seri processor ini. Processor ini selalu menghadirkan teknologi terbaru dan pastinya bertenaga dan didukung dengan keunggulan seperti seperti menghasilkan grafik yang lebih tinggi, penggunaan batrai yang hemat, serta keunggulan layar yang menghasilkan resolusi tinggi. Peringkat menurut performa terbaik Snapd...