Sunday 24 May 2015

Contoh Program C++ Linked List

PENGERTIAN LINKED LIST

Linked list adalah sejumlah simpul (node) yang dikaitkan dengan simpul yang lain dengan bantuan pointer dalam suatu urutan tertentu. Suatu linked list dikatakan single linked list apabila hanya ada satu pointer yang menghubungkan setiap node (satu arah “next”).


ATURAN LINKED LIST

Linked list mempunyai aturan:
1.      Data harus memiliki hubungan dengan yang lain.
2.      Data yang terhubung tidak boleh bercabang.


PERANCANGAN LINKED LIST

1.      Single Linked List
Tahapan pertama ialah membuat struct (karena setiap node akan berbentuk struct) Dan memiliki satu buah fungsi pointer juga bertype struct yang akan menghubungkan setiap node .

2.      Double Linked List
Lain Halnya dengan single List, double Linked List adalah suatu linked list yang mempunyai 2 penunjuk ke data sebelumnya dan berikutnya, memiliki 2 buah pointer, setiap node akan terhubung dengan pointer kanan dan kiri.



PENJELASAN MENYIMPAN DATA PADA LINKED LIST

1 → 3 → 5 → 6 → 2 → 7

Pada linked list di atas, masing-masing data mempunyai hubungan dengan data lain. Untuk bisa benar-benar menggunakan metode linked list, kita harus mematuhi peraturan linked list. Setelah itu, kita harus menetapkan di mana posisi head dan null berada. Head merupakan data yang tidak memiliki hubungan di belakang, sedangkan null merupakan data yang paling terakhir atau yang tidak memiliki hubungan di depannya. Setiap data harus memiliki hubungan dengan data yang lain.

struct node        
{
      int data;
      node* next;
};



PENJELASAN MENYISIPAKAN DATA PADA LINKED LIST

1 → 3 → 5 → 6 → 2 → 7

Melakukan penyisipan data pada linked list di atas, dilakukan dengan cara menghapus rantai hubungan terlebih dahulu lalu memberikan angka baru dan selanjutnya memberikan rantai hubungan baru.


 Jika data di tambahkan di tengah.
Misal kita akan memberi angka 2 di antara angka 1 dan 3. Maka mula-mula kita harus memutus rantai hubungan antara angka 1 dan 3. Setelah itu kita memberikan rantai hubungan baru dari angka satu menuju angka 2, dan dari angka 2 menuju angka 3.

1è 2 è 3 → 5 → 6 → 2 → 7


 Jika data di tambahkan di awal.
Misal kita akan memberi angka 8 di awal. Maka mula-mula kita harus menambahkan angka 8 di awal. Lalu setelah itu memindah posisi head ke angka 8 karena angka 8 merupakan data yang pertama. Selanjutnya kita harus menghubungkan angka 8 dengan angka 1 dengan menambahkan rantai hubungan antara angka 8 dan angka 1. 

8 è  1 → 3 → 5 → 6 → 2 → 7


 Jika data di tambahkan di akhir.
Misal kita akan memberi angka 9 di akhir. Maka kita perlu melakukan pemindahan null, karena null merupakan penanda akhir data.

Jadi mula-mula kita harus memberikan angka 9 setelah angka 7. Lalu menggeser posisi null ke posisi 9. Terakhir kita harus menghubungkan angka 9 dengan angka 7 dengan memberikan rantai hubungan antara angka 9 dan angka 7. 

1 → 3 → 5 → 6 → 2 → 7è 9



MENGHAPUS DATA PADA LINKED LIST


4 → 1 → 3 → 5 → 6 → 8 → 10 → 2 → 7 → 0 → 11

Misal kita akan pelakukan penghapusan pada angka 5, angka 4, dan angka 11. Maka yang kita lakukan tidaklah menghapus angka-angka tersebut secara fisik, melainkan hanya melakukan pembelokkan arah sehingga angka-angka tersebut tidak memiliki hubungan dengan angka sebelum atau sesudahnya.

Pertama kita akan menghapus angka 5. Jadi yang kita lakukan cukup melakukan pembelokkan arah pada angka 5. Maksudnya, rantai hubungan yang menuju angka 5 ( setelah angka 3 ) di buat berbelok dan tidak menuju angka 5. Kita buat rantai tersebut menuju langsung ke angka setelah 5 yaitu angka 6. Lalu rantai hubungan setelah angka 5 kita hapus.

Dengan begitu angka 5 masih ada secara fisik, tetapi tidak ada secara tampilan. Karena memang angka 5 berubah sifatnya menjadi hidden atau tersembunyi. Itu disebabkan angka 5 tidak di deklarasikan oleh rantai hubungan.

Kedua kita akan menghapus angka 4. Untuk menghapus angka 4, caranya masih sama seperti menghilangkan angka 5. Tetapi pada angka 4 kita mempunyai tambahan langkah. Yakni memindah posisi head ke angka selanjutnya yaitu angka 1.

Setelah memindah head, kita cukup menghilangkan rantai penghubung setelah angka 4 yang menuju angka 1. Dengan begitu angka 4 kini sama dengan angka 5, yaitu tersembunyi dan tidak di deklarasikan.

Ketiga kita akan menghapus angka 11. Untuk menghapus angka 11, caranya mirip dengan menghapus angka 4. Tetapi yang kita pindah bukanlah head tapi null yang berada di angka 11. Itu dikarenakan angka 11 merupakan angka terakhir dan mempunyai null sebagai penanda.

Setelah memindah null ke angka sebelumnya yakni 0. Maka kita harus menghapus rantai penghubung sebelum angka 11 yaitu setelah angka 0. Dengan begitu angka 11 menjadi tidak terdeklarasikan dan tersembunyi.

Begitulah bagaimana cara menghapus angka yang berada di awal, tengah, dan juga akhir. Secara fisik angka-angka tersebut tidak terhapus, hanya saja angka tersebut dibuat tersembunyi dan tidak dideklarasikan.


MENGHAPUS DATA PADA LINKED LIST

3 → 5 → 10 → 7 → 0

Misal kita akan melakukan pembelokkan pada data di atas. Maka kita harus melakukan proses 

menghapus / memutuskan node 10 ke 7 dan 7 ke 0.
Kemudian membelokan node dari 10 ke 0.
Kemudian membelokan node 0 ke 7, blok 7 menjadi NULL karena data terakhir.


PROGRAM C++ LINKED LIST 

#include <iostream>
#include <conio.h>
#include <iomanip> 
using namespace std;

struct node
{
      int data;
      node* next; 
};


/* 

NAMA: Irfan Fahrurrozi
NIM : 14.11.7986
KELAS: 14-S1TI-06

 */

node* head;
node* tail;
node* curr;
node* entry;
node* del;

void inisialisasi()
{
      head = NULL;
      tail = NULL;
}

/* 

INI MERUPAKAN IMPLEMENTASI PROGRAM
MENGGUNAKAN LINKED LIST.
© IRFAN FAHRURROZI

 */

void input(int dt)
{
      entry = (node* )malloc(sizeof(node)); 
      entry->data = dt;
      entry->next = NULL;
      if(head==NULL)
      {
            head = entry;
            tail = head;
      }
      else
      {
            tail->next = entry;
            tail = entry;
      }
}

void hapus()
{
      int simpan;
      if(head==NULL)
      {
            cout<<"\nlinked list kosong, penghapusan tidak bisa dilakukan"<<endl;
      }
      else
      {
            simpan  = head ->data;
            cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
           
            del = head;
            head = head->next;
            delete del;
      }
}

void cetak()
{
      curr = head;
      if(head == NULL)
            cout<<"\ntidak ada data dalam linked list"<<endl;
      else
      {
            cout<<"\nData yang ada dalam linked list adalah"<<endl;
            cout<<setw(6);
            while(curr!=NULL)
            {
                  cout<<curr->data<<"->";
                  curr = curr->next;
            }
            cout<<endl;
      }

}

void menu()
{
      char pilih, ulang;
      int data;

      do
      {
      system("cls");
      cout<<"SINGLE LINKED LIST NON CIRCULAR"<<endl;
      cout<<"-------------------------------"<<endl;
      cout<<"Menu : "<<endl;
      cout<<"1. Input data"<<endl;
      cout<<"2. Hapus data"<<endl;
      cout<<"3. Cetak Data"<<endl;
      cout<<"4. Exit"<<endl;
      cout<<"Masukkan pilihan Anda : ";
      cin>>pilih;

      switch(pilih)
      {
      case '1' :
            cout<<"\nMasukkan data : ";
            cin>>data;
            input(data);
            break;
      case '2' :
            hapus();
            break;
      case '3' :
            cetak();
            break;
      case '4' :
            exit(0);
            break;
      default :
            cout<<"\nPilih ulang"<<endl;
      }
      cout<<"\nKembali ke menu?(y/n)";
      cin>>ulang;
      }while(ulang=='y' || ulang=='Y');
}


int main()
{

      inisialisasi();
      menu();

      return EXIT_SUCCESS;
}


Share this

10 Responses to "Contoh Program C++ Linked List"

  1. Penjelasan yg cukup bagus dan mudah dipahami.tengs

    ReplyDelete
  2. kok di malloc nya error ya min

    ReplyDelete
  3. mantav materinya, kunjungi juga..
    Link : https://adiinformatika.blogspot.com/2020/05/contoh-program-linked-list-c-sederhana.html

    ReplyDelete
    Replies
    1. kalo mau nge back-link, make "<*a href="http://url.com">nama URL<*/a>".

      hapus tanda *

      Delete