Single Linked List pada C++
By
Rachmat Santoso
—
Kamis, 11 Desember 2014
—
Struktur Data
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;
}
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 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;
}
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;
}
}
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