Single Linked List - Menyimpan Data Struktur pada Node - nblognlife

Single Linked List - Menyimpan Data Struktur pada Node

Contoh Program Single Linked List - Menyimpan Data Struktur pada Node


Berikut adalah jawaban komentar pada post Single Linked List pada C++ tentang menyimpan data struktur pada node.

     Pada program di bawah ini single linked list tidak hanya menyimpan sebuah data berupa integer seperti posting sebelumnya, namun telah dimodifikasi agar data struktur yang berisi nama, kelas, nim dapat disimpan dalam sebuah node.

Untuk lebih mudah memahami syntax di bawah ini baca lagi postingan saya Struktur pada C++.
//SINGLE LINKED LIST NON CIRCULAR + MENYIMPAN DATA STRUKTUR PADA NODE
//IDE VS12 Express
//by [RS]
#include <iostream>
#include <conio.h>
#include <iomanip> //setw()
using namespace std;

struct Data_node
{
       char nama[25];
       char kelas[7];
       char nim[10];
};

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


node* _head;
node* _tail;
node* _curr;
node* _entry;
node* _del;

void inisialisasi()
{
      _head = NULL;
      _tail = NULL;
}


void input(Data_node dt)
{
      
      _entry = (node* )malloc(sizeof(node)); //alokasi memori
      _entry->data = dt//penugasan struktur
      _entry->next = NULL;
      if(_head==NULL)
      {
            _head = _entry;
            _tail = _head;
      }
      else
      {
            _tail->next = _entry;
            _tail = _entry;
      }
}

void hapus()
{
      node _simpan;
      if(_head==NULL)
      {
            cout<<"\nLinked list kosong, penghapusan tidak bisa dilakukan."<<endl;
      }
      else
      {
            _simpan.data  = _head ->data;
           cout<<"\nData yang dihapus adalah ";
cout<<_simpan.data.nama<<"/"<<_simpan.data.kelas<<"/"<<_simpan.data.nim<<endl;


            //hapus depan
            _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 : \n"<<endl;
            cout<<"\t";
            while(_curr!=NULL)
            {
                cout<<_curr->data.nama<<"/"<<_curr->data.kelas<<"/"<<_curr->data.nim;
                cout<<" -> ";
                _curr = _curr->next;
            }
            cout<<"NULL";
            cout<<endl;
      }
}

void menu()
{
      char pilih, ulang;
      node tmp; 

      do
      {
      fflush(stdin);
      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' :
            /*
              Pada bagian ini nilai input disimpan pada struct data 
               yang ada pada struct tmp (tmp.data).


              Kemudian tmp.data digunakan sebagai parameter untuk- 

               memanggil fungsi input()
            */
            fflush(stdin);
            cout<<"\nMasukkan nama  : ";
            cin>>tmp.data.nama;
            cout<<"Masukkan kelas : ";
            cin>>tmp.data.kelas;
            cout<<"Masukkan NIM   : ";
            cin>>tmp.data.nim;

            input(tmp.data);
            break;
      case '2' :
            hapus();
            break;
      case '3' :
            cetak();
            break;
      case '4' :
            exit(0);
            break;
      default :
            cout<<"\nPilihan salah"<<endl;
      }
      cout<<"\nKembali ke menu?(y/n)";
      cin>>ulang;
   }while(ulang=='y' || ulang=='Y');
}

int main()
{

      inisialisasi();
      menu();

      return EXIT_SUCCESS;
}

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

Masukkan nama : Joe
Masukkan kelas : C
Masukkan NIM : 110530

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 nama : Rani
Masukkan kelas : A
Masukkan NIM : 110465

Kembali ke menu?(y/n)

2.  Mencetak 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 :

        Joe/C/110530 -> Rani/A/110465 -> NULL

Kembali ke menu?(y/n)

3.  Menghapus 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 Joe/C/110530

Kembali ke menu?(y/n)

 4. Mencetak Ulang Data Setelah Dihapus
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 :

        Rani/A/110465 -> NULL

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

10 Responses to "Single Linked List - Menyimpan Data Struktur pada Node"

  1. langsung masukkan skrip di main.h ya ?

    ReplyDelete
    Replies
    1. @Didik Triaswira
      Maksudnya mas? Hehe kurang nangkap maksud pertanyaannya

      Apa maksudnya main.cpp?

      Yg jelas sebelumnya bersihkan dulu lembar kerjanya di main, terus copykan semua script di atas. Kemudian compile&run.

      Good luck!

      Delete
  2. Mas, ini kan sllnc.. Kalo sllc itu gimana? Perbedaannya dimana atau apa yang diubah ya? Maaf mengganggu.

    ReplyDelete
    Replies
    1. @Nandy
      Maaf mas saya baru buka blog ini.
      Jawaban pertanyaan mas Nandy bisa dibaca di postingan http://www.nblognlife.com/2014/12/single-linked-list-pada-c.html

      Di postingan tersebut saya sampaikan perbedaan keduanya beserta gambar yang bisa memperjelas uraian saya.

      Untuk programnya tinggal melakukan sedikit modifikasi. Pada SLLNC node tail(node terakhir) menunjuk ke NULL sebagai akhir dari linked list, sedangkan pada SLLC, node tail menunjuk ke head. Sehingga pada SLLC bentuk linked listnya dikatakan 'circular' atau melingkar.

      Semoga jawaban saya membantu. Good luck :)

      Delete
  3. tmp was not declarated in this scoope :3

    ReplyDelete
    Replies
    1. @Edwin Kesuma
      Program sudah saya cek lagi dan berjalan dengan baik.

      Coba dicermati kembali kode Anda mungkin ada bagian yang belum diketikkan

      Delete
  4. bang kompilernya pake apa? saya pake devC++ ada 4 errornya.

    ReplyDelete
  5. Kak kok ketika says ganti nim jadi int , error ya

    ReplyDelete
    Replies
    1. @Anonymous
      1. Coba cek lagi cara mendefinisikan 'int'
      2. Perhatikan juga bilangan yang diinputkan. Jangan sampai melebihi range dari tipe data integer!

      Saran saya karena 'nim' tidak digunakan untuk pemrosesan matematika (tambah/kurang/kali/bagi, dsb), maka lebih baik gunakan tipe data char saja.

      Semoga membantu :)

      Delete