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
langsung masukkan skrip di main.h ya ?
ReplyDelete@Didik Triaswira
DeleteMaksudnya 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!
Mas, ini kan sllnc.. Kalo sllc itu gimana? Perbedaannya dimana atau apa yang diubah ya? Maaf mengganggu.
ReplyDelete@Nandy
DeleteMaaf 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 :)
tmp was not declarated in this scoope :3
ReplyDelete@Edwin Kesuma
DeleteProgram sudah saya cek lagi dan berjalan dengan baik.
Coba dicermati kembali kode Anda mungkin ada bagian yang belum diketikkan
bang kompilernya pake apa? saya pake devC++ ada 4 errornya.
ReplyDelete@Unknown
DeleteSaya pakai Visual Studio 2012 Express
Kak kok ketika says ganti nim jadi int , error ya
ReplyDelete@Anonymous
Delete1. 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 :)