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.
Perbedaan tersebut dari Array dan Linked List dapat dilihat pada tabel dibawah ini :
Array
|
Linked List
|
Statis
|
Dinamis
|
Penambahan dan penghapusan data terbatas
|
Penambahan dan penghapusan data tidak terbatas
|
Random Access
|
Sequential Access
|
Penghapusan array tidak mungkin
|
Penghapusan mudah
|
Langkah membuat dan operasi pada sebuah Linked List adalah sebagai berikut :
1. Mendeklarasikan struct node
2. Membuat node head
3. Menginisialiasi node head
4. Menambahkan node baru baik di depan maupun di belakang
5. Menghapus node tertentu
Pembuatan Single Linked List
1. Mendeklarasikan dan Membuat Struct Node
Penjelasan :
2. Pembentukan Node Baru
3. Menginisialisasikan dan Menggunakan Node Head
Selanjutnya yaitu :
– Dibutuhkan satu buah variabel pointer yang telah dibuat tadi yaitu : head
– head tersebut akan selalu menunjuk pada node pertama
TNode *head;
4. Penambahan Data
– Penambahan Data di Depan Single Linked List
Ilustrasi dari Penambahan Data di depan :
Penghapusan Data pada Single Linked List
Catatan :
Macam – Macam Bentuk Single Linked List
1. Single Linked List Non Circular
Bentuk dan Contoh Program dari Single Linked List Non Circular pada C++ :
#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;
baru = new Data;
baru -> nilai = DataBaru;
baru -> 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;
baru = 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;
}
2. Single Linked List Circular
Single Linked List yang kedua adalah yaitu Single Linked List Circular (SLLC). Perbedaan Circular Linked List dan Non Circular Linked List adalah next node terakhir pada Circular Linked List akan selalu merujuk ke node pertama. Ilustrasi untuk Linked List Circular dapat 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;
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;
}
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 kosongn”;
}
}
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 kosongn “;
}
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;
}