Single Linked List pada C++ - nblognlife

Single Linked List pada C++

Contoh Program Single Linked List pada C++

Apa itu 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”).

Single linked list dapat dibagi menjadi:
Single linked list non circular
Single Linked List yang pointer next pada node terakhir(tail) -nya menunjuk ke Null.
1. Deklarasi node dengan struct pada single linked list:
struct tnode
{
      int data;
      struct tnode *next;
}
Gambar Sebuah Node pada Single Linked List
2. Deklarasi node untuk beberapa keperluan, seperti berikut ini:
struct tnode *head=NULL, *curr=NULL, *node=NULL;

3. Membuat elemen pertama dan menambahkan elemen di belakang Single Linked List


Single Linked List Circular:
Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya(tail) akan menunjuk ke pointer terdepannya(head).
1. Deklarasi Single Linked List Circular:
struct tnode
{
     int data;
     tnode *next;
};
void main()
{
     head = new tnode;
     head->next = head;
}


2. Menambah node dan membuat tail dari single linked list circular
Deklarasi penambahan node baru:
void main()
{
     node = new tnode;
     tail = new tnode;


     //head->next di bawah ini "masih" menunjuk ke head itu sendiri 

     //jadi, kode di bawah ini maksudnya node->next menunjuk ke head
     node->next = head->next;


     //baru di sini head->next diubah menunjuk ke node

     //hasilnya akan seperti "Gambar 6"
     head->next = node;
     tail = node;
}
Gambar Penambahan Node Baru

3. Deklarasi menyisipkan node baru menggunakan sintak berikut:
void main()
{
     node = new tnode;
     node->next = head->next;
     head->next = node;
}
Gambar Menyisipkan Node Baru

4. Deklarasi menghapus node dari single linked list circular, menggunakan sintaks berikut:
void main()
{
     hapus = new tnode;
     if( head != tail)
     {
           hapus = head;
           head = head->next;
           tail->next = head;
           delete hapus;
     }else
     {
           head = NULL;
           tail = NULL;
     }
}
Gambar Menghapus Node dari SLLC

Contoh Program Single linked list :
//SINGLE LINKED LIST NON CIRCULAR
//IDE VS12 Express
//by [RS]
#include <iostream>
#include <conio.h>
#include <iomanip> //setw()
using namespace std;

struct node
{
      int data;
      node* next; // untuk menghubungkan dengan node lain, tipe data dibuat sama seperi aturan penggunaan pointer.
};

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

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

void input(int dt)
{
      entry = (node* )malloc(sizeof(node)); //alokasi memori
      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;
            //hapus depan
            del = head;
            head = head->next;
            delete del;
           
            cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
      }

}

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<<"NULL";
            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;
}

  
Output

Input data (2,3,4,5,6)
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 1

Masukkan data : 2

Kembali ke menu?(y/n)
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 1

Masukkan data : 3

Kembali ke menu?(y/n)
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 1

Masukkan data : 4

Kembali ke menu?(y/n)
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 1

Masukkan data : 5

Kembali ke menu?(y/n)
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 1

Masukkan data : 6

Kembali ke menu?(y/n)

Hapus data
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 2

data yang dihapus adalah 2

Kembali ke menu?(y/n)

Cetak data
SINGLE LINKED LIST NON CIRCULAR
-------------------------------
Menu :
1. Input data
2. Hapus data
3. Cetak Data
4. Exit
Masukkan pilihan Anda : 3

Data yang ada dalam linked list adalah
     3->4->5->6->NULL

Kembali ke menu?(y/n)


PERHATIAN!

Algoritma serta penjelasan dari program SLLNC di atas telah saya tambahkan di postingan Algoritma dan Penjelasan SLLNC. Semoga dapat membantu untuk lebih dapat memahami tentang SLLNC. 


Baca juga postingan saya yang menjawab pertanyaan pembaca di bawah ini.
1. Single Linked List - Menghapus dan Menambah Data di Tengah
2. Single Linked List - Menyimpan Data Struktur pada Node

[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

27 Responses to "Single Linked List pada C++"

  1. thx informasi nya gan :) ijin kopas ya gan :v

    ReplyDelete
  2. Replies
    1. @MuhammadFahas pesan errornya apa?

      Delete
    2. pada void input terdapat malloc yang tidak terdefinisikan.

      Delete
    3. @Hasan Ma'ruf
      - Tambahkan header "stdlib.h", coba test lagi

      - Jika tidak berhasil coba ganti code yang ada pada fungsi void input berikut ini:
      "entry = (node* )malloc(sizeof(node));"
      menjadi
      "entry = new node;"

      Delete
  3. ini pake apikasi apa gan ? ane pake visual studio expres kok eror

    ReplyDelete
  4. @BagusDece Microsoft Visual Studio Express 2012. Pesan errornya seperti apa, mas? Soalnya saya test lagi programnya masih jalan normal.

    ReplyDelete
  5. bang bgi coding buat edit di sllc dong

    ReplyDelete
  6. Mau nanya nih di void cetak ada cout << setw(6);
    Jelasin dong itu apa msih g paham.

    ReplyDelete
    Replies
    1. @Caesar Ramadhan

      bentuk umum:
      setw(int n)

      setw() merupakan salah suatu manipulator dalam C++, yang secara sederhana setw() ini digunakan untuk mengatur lebar(jumlah) petak/ruang untuk menampilkan data.

      Contoh :
      setw(6)
      Berarti mengatur lebar(jumlah) sebanyak 6 ruang/petak
      |r1|r2|r3|r4|r5|r6|
      *r = ruang

      1. cout << setw(6) << 150;
      2. cout << setw(6) << 1;
      3. cout << setw(6) << 22;

      Hasilnya :
      1. | | | |1|5|0|
      2. | | | | | |1|
      3. | | | | |2|2|

      Pada program ini khususnya pada fungsi cetak(), setw() hanya digunakan untuk mengatur agar data-data ditampilkan sedikit menengah (dalam hal ini sebenarnya tanpa menggunakan setw() juga bisa, yaitu menggunakan TAB -> cout << "\t";).

      Dalam kasus lain (bukan program di atas), jika terdapat sejumlah data yang ditampilkan dalam satu baris maka penggunaan setw() dimaksudkan agar antara data yang satu dengan yang lainnya tidak berdempetan, sehingga data-data tersebut dapat terbaca dengan jelas.

      Semoga penjelasan di atas membantu. :)

      Delete
  7. gan kalo ada error tulisnya gini "need an identifier to declare" itu maksudnya apa ya?

    ReplyDelete
    Replies
    1. @Shella F
      Error pada program ini atau program lain?
      Compiler apa yang digunakan?

      Tolong dicopykan semua bagian dari pesan errornya (kode error + pesan error lengkapnya)!

      Delete
  8. Gan curr apaan ya kepanjangannya ?

    ReplyDelete
    Replies
    1. @Ryan Radityatama
      curr = current (position)

      curr merupakan sebuah nama variabel. Variabel ini digunakan untuk mewakili posisi pointer sekarang ini.

      Delete
  9. maaf . . . kalo buat nambah dan hapus data di tengah itu script code nya apa y ?? makasih

    ReplyDelete
    Replies
    1. @Ophel Zacks
      Untuk jawaban pertanyaan di atas bisa dilihat di link berikut: http://nblognlife.blogspot.co.id/2016/06/jawaban-post-single-linked-list_16.html

      Silahkan dicoba, good luck!

      Delete
  10. bang mau tanya kalau misalkan data yang di input ke linked list itu kaya data nama, trus kelas, dan nim, itu gimana cara penginputan syntax nya ya?...

    ReplyDelete
    Replies
    1. @IT. Brothers SMK SATRIA
      Maaf saya baru buka blog. Hal tersebut dapat dilakukan dengan menggunakan struktur. Intinya menyimpan data struktur yang berisi nama, kelas, nim ke dalam node.

      Untuk syntaxnya dapat dilihat pada link di bawah ini.
      http://nblognlife.blogspot.co.id/2016/11/jawaban-post-single-linked-list.html

      Good luck!

      Delete
  11. gan exit_succesnya error gimana?

    ReplyDelete
    Replies
    1. @fariha aulia
      Tambahkan header stdlib.h atau cstdlib

      atau ganti saja return EXIT_SUCCESS; menjadi return 0;

      Good luck!

      Delete
  12. gan using namespace std; eror trus gimana ya?

    ReplyDelete
    Replies
    1. @Ambarwati Nur Sa'diyah
      Untuk IDE lama, ganti header "iostream" dan "iomanip" pada program di atas menjadi "iostream.h" dan "iomanip.h" saja TANPA menyertakan using namespace std.

      Good luck!

      Delete
    2. @Sabrina Meylani
      Solusi di atas sudah di coba kah?

      Tentang setw kan kalo tidak salah di komen yg lain.

      Penggunaan setw pada contoh program ini tidak terlalu urgent, jadi bisa dihilangkan/diganti dengan tab

      cout<<"\t";

      Semoga berhasil!

      Delete
  13. bang, bisa tolong buatkan algoritma dari program diatas?? please..

    ReplyDelete
    Replies
    1. @Anonymous
      Maaf baru beberapa hari yang lalu buka blog, dan baru sempat membuat postingan lagi.

      Untuk algoritma dan penjelasan program di atas sudah dapat dilihat di http://www.nblognlife.com/2018/04/algoritma-dan-penjelasan-sllnc.html

      Semoga menjadi lebih paham. Good luck!

      Delete
  14. Terima kasih code visual studionya gan,
    Ijin copy ya buat tugas presentasi :)
    semoga ilmunya bermanfaat

    ReplyDelete