Modul Single Linked List C++ - Apa itu Single Linked List ? Linked List atau Single Linked List merupakan suatu bentuk struktur data yang berisi kumpulan data yang disebut sebagai node yang tersusun secara sekuensial, saling sambung menyambung, dinamis, dan terbatas.
Linked list sering juga disebut dengan sebagai sebutan senarai brantai. Cara untuk menghubungkan satu node dengan node lainnya maka Linked List memakai pointer sebagai penunjuk node selanjutnya atau sanggup disebut next.
Node merupakan sebuah struct atau tipe data bentukkan yang menempati suatu lokasi memori secara dinamis yang terdiri dari beberapa field, minimal 2 buah field. Field tersebut yaitu field untuk isi struct datanya sendiri dan 1 field arbitari bertipe pointer sebagai penunjuk node selanjutnya.
Kenapa memakai Linked List? Kenapa tidak memakai Array? Apa Perbedaan dari Array dan Linked List? Nah, mari kita bahas.
Array yaitu merupakan salah satu variabel yang bersifat statis (ukuran dan urutannya sudah pasti). Selain itu, ruang memori yang digunakan oleh array tersebut tidak sanggup dihapus bila array tersebut sudah tidak digunakan lagi pada ketika aktivitas dijalankan. Untuk memecahkan duduk kasus tersebut kita sanggup memakai sebuah variabel pointer. Tipe data pointer yaitu bersifat dinamis, variabel akan hanya dialokasikan hanya pada ketika diharapkan dan setelah tidak diharapkan sanggup di relokasikan kembali. Setiap ingin menambahkan data, anda akan selalu memakai variabel pointer yang baru, maka balasannya dari itu anda akan sangat banyak membutuhkan sebuah variabel pointer. Maka dari itu, ada baiknya memakai satu variabel pointer saja untuk menyimpan banyak data dengan memakai metode yang kita sebut dengan Single Linked List atau Linked List.
Perbedaan tersebut dari Array dan Linked List sanggup dilihat pada tabel dibawah ini :
Array | Linked List |
Statis | Dinamis |
Penambahan dan pembatalan data terbatas | Penambahan dan pembatalan data tidak terbatas |
Random Access | Sequential Access |
Penghapusan array tidak mungkin | Penghapusan mudah |
Salah satu tipe linked list yang sederhana yaitu Single Linked List. Single linked list merupakan linked list yang mempunyai hanya satu pointer penunjuk dengan arah data hanya satu arah.
Langkah menciptakan dan operasi pada sebuah Linked List yaitu sebagai berikut :
1. Mendeklarasikan struct node
2. Membuat node head
3. Menginisialiasi node head
4. Menambahkan node gres baik di depan maupun di belakang
5. Menghapus node tertentu
Pembuatan Single Linked List
1. Mendeklarasikan dan Membuat Struct Node
Penjelasan :
- Pembuatan struct berjulukan TNode yang berisi 2 field, yaitu pada field pertama dengan variabel data dengna tipe data integer dan field kedua yaitu next yang bertipe pointer dari TNode.
- Setelah selesai pembuatan struct, selanjutnya buat variabel head yang bertipe pointer dari TNode yang mempunyai kegunaan untuk sebagai kepala dari linked list.
Untuk pembentukan atau pembuatan node gres sanggup memakai keyword new yang berarti untuk mempersiapkan sebuah node gres beserta alokasi memorinya, yang kemudian node tersebut akan diisi data dan kemudian pointer nextnya akan ditunjuk ke NULL.
3. Menginisialisasikan dan Menggunakan Node Head
Selanjutnya yaitu :
- Dibutuhkan satu buah variabel pointer yang telah dibentuk tadi yaitu : head
- head tersebut akan selalu menunjuk pada node pertama
Deklarasi Pointer penunjuk kepala Single Linked List manipulasi Linked List tidak sanggup dilakukan eksklusif ke node yang dituju, melainkan harus memakai suatu pointer penunjuk terlebih dahulu ke node pertama di dalam linked list (dalam hal kasus ini yaitu head). Deklarasinya sebagai berikut :
TNode *head;
Function untuk mengetahui kosong atau tidaknya didalam Single Linked List jikalau pointer head tidak menunjuk pada suatu node maka kosong.
4. Penambahan Data
- Penambahan Data di Depan Single Linked List
Penambahan node gres akan dikaitkan di node paling depan, namun pada ketika pertama kali atau data masing kosong bener, maka penambahan data dilakukan dengan cara head ditunjukkan ke node gres tersebut. Pada prinsipnya yaitu untuk mengkaitkan node gres dengan pointer atau head, yang kemudian head tersebut akan menunjuk pada data gres tersebut sehingga head akan tetap selalu menjadi data terdepan.
Ilustrasi dari Penambahan Data di depan :
Penghapusan Data pada Single Linked List
Berikut yaitu yaitu sebuah Function untuk menghapus suatu data di Linked List terdepan atau hapus data depan di Linked List :
Function atau Fungsi diatas akan menghapus data teratas (pertama) didepan yang ditunjuk oleh head pada linked list.
Catatan :
- Penghapusan node dihentikan dilakukan jikalau atau ketika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunaan suatu pointer lain yang digunakan untuk menunjuk node yang akan dihapus tersebut, contohnya pola saja dengan menciptakan pointer hapus dan barulah kemudian menghapus pointer hapus dengan memakai perintah delete di C++.
- Sebelum data terdepan akan dihapus, head harus ditunjukkan ke node sesudahnya terlebih dahulu semoga list tersebut tidak terputus, sehingga node setelah head usang akan menjadi head gres (data terdepan yang baru).
- Jika head tersebut masih NULL maka berarti data masih kosong.
Macam - Macam Bentuk Single Linked List
1. Single Linked List Non Circular
Single Linked List Non Circular ini merupakan linked list dimana antara kepala dan node terakhir tidak mempunyai hubungan. Pada Linked List ini maka pointer terakhir selalu menunjuk NULL sebagai membuktikan data terakhir dalam list-nya. Single Linked List Non Circular (SLLNC) sanggup digambarkan sebagai berikut :
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
typedef struct Data
{
int nilai;
Data *next;
};
Data *head;
Data *tail;
void awal ()
{
head=NULL;
}
bool isEmpty()
{
if (head==NULL)
return true;
return false;
}
void tambahDataDepan (int DataBaru)
{
Data *baru;
gres = new Data;
gres -> nilai = DataBaru;
gres -> next = NULL;
if (isEmpty())
{
head = baru;
head->next=NULL;
}
else
{
baru->next = head;
head = baru;
}
cout << "Data Depan" << DataBaru << " Masuk" << endl;
}
void tambahDataBelakang (int DataBaru)
{
Data *baru, *bantu;
gres = new Data;
baru->nilai=DataBaru;
baru->next = NULL;
if (isEmpty())
{
head=baru;
head->next=NULL;
}
else
{
bantu=head;
while(bantu->next!=NULL)
{
bantu=bantu->next;
}
bantu->next=baru;
}
cout << "Data Belakang " << DataBaru << " Masuk" << endl;
}
void hapusDepan ()
{
Data *hapus;
int d;
if (!isEmpty())
{
if(head->next !=NULL)
{
hapus = head;
d = hapus->nilai;
head = hapus->next;
delete hapus;
}
else
{
d = head->nilai;
head = NULL;
}
cout << d << " Terhapus" << endl;
}
else cout << "Masih Kosong" << endl;
}
void hapusBelakang ()
{
Data *hapus, *bantu;
int tmp;
if (!isEmpty())
{
if (head->next!=NULL)
{
bantu = head;
while (bantu->next->next!=NULL)
{
bantu = bantu->next;
}
hapus = bantu->next;
tmp = hapus->nilai;
bantu->next=NULL;
delete hapus;
}
else
{
tmp=head->nilai;
head=NULL;
}
cout << tmp << " Terhapus" << endl;
}
else cout << "Masih Kosong" << endl;
}
void Cetak ()
{
if (!isEmpty())
{
Data *bantu;
bantu=head;
do
{
cout << bantu->nilai<< " ";
bantu=bantu->next;
}
while (bantu!=NULL);
cout << endl;
}
}
int panjang ()
{
int count=0;
if (!isEmpty())
{
count=1;
Data *bantu;
bantu=head;
if (bantu->next==NULL)
{
count=1;
}
else
{
do
{
count++;
bantu=bantu->next;
}
while (bantu->next!=NULL);
}
}
else
{
count=0;
}
return count;
}
int main()
{
awal();
tambahDataBelakang(5);
tambahDataDepan(7);
tambahDataBelakang(17);
tambahDataBelakang(1);
tambahDataBelakang(27);
tambahDataBelakang(10);
cout << "Data pada single linked list non circular:" << endl;
Cetak();
cout << "Data paling depan dihapus:" << endl;
hapusDepan();
cout << "Data pada single linked list non circular:" << endl;
Cetak();
cout << "Data paling belakang dihapus:" << endl;
hapusBelakang();
cout << "Data pada single linked list non circlar:" << endl;
Cetak();
cout << "Panjang linked list :" << endl;
cout << panjang();
getch();
return 0;
}
Hasil Program Diatas :
2. Single Linked List Circular
Single Linked List yang kedua yaitu yaitu Single Linked List Circular (SLLC). Perbedaan Circular Linked List dan Non Circular Linked List yaitu next node terakhir pada Circular Linked List akan selalu merujuk ke node pertama. Ilustrasi untuk Linked List Circular sanggup dilihat pada gambar dibawah ini :
Bentuk dan Contoh Program Single Linked List Circular pada C++ :
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
using namespace std;
struct Data
{
int nilai;
Data *next;
};
Data *head;
void awal ()
{
head=NULL;
}
bool isEmpty()
{
if (head==NULL)
return true;
return false;
}
void tambahDataDepan (int DataBaru)
{
Data *baru;
gres = (Data*) malloc (sizeof (Data));
gres -> nilai = DataBaru;
gres -> next = baru;
if (isEmpty())
{
head = baru;
head->next=head;
}
else
{
Data *bantu;
bantu=head;
while (bantu->next!=head)
{
bantu=bantu->next;
}
baru->next=head;
head=baru;
bantu->next=head;
}
}
void tambahDataBelakang (int DataBaru)
{
Data *baru;
baru=(Data*) malloc(sizeof (Data));
baru->nilai=DataBaru;
baru->next=baru;
if (isEmpty())
{
head=baru;
head->next=head;
}
else
{
Data *bantu;
bantu=head;
while (bantu->next!=head)
{
bantu=bantu->next;
}
bantu->next=baru;
baru->next=head;
}
}
void hapusDepan ()
{
if (!isEmpty())
{
int tmp;
if (head->next!=head)
{
Data *hapus;
hapus=head;
tmp=head->nilai;
Data *bantu;
bantu=head;
while (bantu->next!=head)
{
bantu=bantu->next;
}
bantu->next=head->next;
head=head->next;
delete hapus;
}
else
{
tmp=head->nilai;
awal();
}
cout << tmp << " Dihapus" << endl;
}
else
{
cout << "Data kosong\n";
}
}
void hapusBelakang ()
{
Data *hapus, *bantu;
int tmp;
if (!isEmpty())
{
hapus=head;
if (head->next==head)
{
tmp=head->nilai;
head=NULL;
}
else
{
bantu=head;
while (bantu->next->next!=head)
{
bantu=bantu->next;
}
hapus=bantu->next;
bantu->next=head;
tmp=hapus->nilai;
delete hapus;
}
cout << tmp << " Dihapus" << endl;
}
else cout << "Data kosong\n ";
}
void Cetak ()
{
if (!isEmpty())
{
Data *bantu;
bantu=head;
do
{
cout << bantu->nilai<< " ";
bantu=bantu->next;
}
while (bantu!=head);
cout << endl;
}
}
int panjang ()
{
int count=0;
if (!isEmpty())
{
count=1;
Data *bantu;
bantu=head;
if (bantu->next==head)
{
count=1;
}
else
{
do
{
count++;
bantu=bantu->next;
}
while (bantu->next!=head);
}
}
else
{
count=0;
}
return count;
}
int main()
{
awal();
tambahDataBelakang(5);
tambahDataDepan(7);
tambahDataBelakang(17);
tambahDataBelakang(1);
tambahDataBelakang(27);
tambahDataBelakang(10);
cout << "Data pada single linked list circular:" << endl;
Cetak();
cout << "Data paling depan dihapus:" << endl;
hapusDepan();
cout << "Data paling belakang dihapus:" << endl;
hapusBelakang();
cout << "Data pada single linked list circlar:" << endl;
Cetak();
cout << "Panjang linked list :" << endl;
cout << panjang();
getch();
return 0;
}
Tampilan Program Diatas :
Nah itulah beberapa materi atau modul wacana Single Linked List pada C++. Jika anda masih resah dengan materi diatas, silahkan bertanya melalui kolom komentar dibawah ini. Semoga artikel ini bermanfaat untuk anda yang ingin berguru bahasa pemrograman sederhana C++. Sekian, terimakasih.
Sumber https://soymedia.blogspot.com/