Soal Tentang Single Linked List
Buatlah Ilustrasi / Penggambaran untuk menambah dan menghapus node di posisi tengah pada :
Single Linked List dengan Head
Single Linked List dengan Head & Trail
Jawab:
Ilustrasi / Penggambaran Single Linked List dengan Head


Listing Program:
#include <iostream.h>
#include <conio.h>
struct TNode{
char data[15];
TNode *next;
};
TNode *head;
int opsi = 0;
void init(){
head = NULL;
}
bool isEmpty(){
if (head ==NULL) return true;
else return false;
}
void tambahdepan(){
TNode *baru;
baru = new TNode;
cout << “Masukkan DATA : “;
cin >> baru-> data;
baru->next = NULL;
clrscr();
if(isEmpty()==true){
head=baru;
head->next = NULL;
}else {
baru->next = head;
head = baru;
}
}
void tambahbelakang(){
TNode *baru,*bantu;
baru = new TNode;
cout << “Masukkan DATA : “;
cin >> baru-> data;
baru->next = NULL;
clrscr();
if(isEmpty()== true){
head=baru;
head->next = NULL;
} else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next = baru;
}
}
void tambahtengah(){
TNode *baru, *bantu;
int posisiSisip;
if(isEmpty()== false){
cout<<“Akan disisip setelah Data Ke ? : “; cin>>posisiSisip;
bantu=head;
baru=new TNode;
for(int i=1;i<posisiSisip;i++){
if(bantu->next!=NULL)
bantu=bantu->next;
else break;
}
cout << “Masukkan DATA : “;
cin >> baru-> data;
baru->next=bantu->next;
bantu->next=baru;
clrscr();
}
else cout<<“Mau Menyisipkan tengah Belum ada data !! …silahkan masukkan Data terlebih dahulu”;
}
void hapusdepan() {
TNode *hapus;
if (isEmpty() == false){
if(head->next !=NULL){
hapus = head;
head = head->next;
delete hapus;
clrscr();
} else {
head = NULL;
}
}else {
cout<<“Data anda masih kosong !!!!\n”;
}
}
void hapusbelakang(){
TNode *hapus, *bantu;
if (isEmpty()==false){
if(head->next !=NULL){
bantu = head;
while(bantu->next->next!=NULL){
bantu = bantu->next;
}
hapus = bantu->next;
bantu->next = NULL;
delete hapus;
clrscr();
} else {
head = NULL;
}
} else {
cout<<“Data anda masih kosong !!!!\n”;
}
}
void hapustengah(){
int banyakdata,posisiSisip,poshapus;
TNode *hapus, *bantu;
if(isEmpty()== false){
cout<<” Akan dihapus pada data ke : “; cin>>posisiSisip;
banyakdata=1;
bantu=head;
while(bantu->next!=NULL)
{
bantu=bantu->next;
banyakdata++;
}
if((posisiSisip<1)||(posisiSisip>banyakdata)){
cout<<“Belum ada data !! …silahkan masukkan Data terlebih dahulu..\n”;
}else {
bantu=head;
poshapus=1;
while(poshapus<(posisiSisip-1))
{
bantu=bantu->next;
poshapus++;
}
hapus=bantu->next;
bantu->next=hapus->next;
delete hapus;
clrscr();
}
}
else cout<<“Data Masih kosong, tidak bisa hapus data dari tengah! “;
}
void display(){
clrscr();
TNode *bantu;
bantu = head;
if(isEmpty()==true){
cout<<“Data masih kosong\n”;
} else {
cout<<endl<<“DATA LINKED LIST\n”;
while(bantu!=NULL){
cout<<“————— “<<endl;
cout<<“DATA : ” << bantu->data << ” “;
cout<<endl;
bantu=bantu->next;
cout<<“————— “<<endl;
}
cout<<endl;
}
}
void main(){
int();
do{
cout<<endl;
cout<<endl;
cout<<endl;
cout<<“———–MENU PILIHAN————–” <<endl;
cout<<endl;
cout<<“1. Tambah Simpul dari Depan.” <<endl;
cout<<“2. Tambah Simpul dari Belakang.” <<endl;
cout<<“3. Tambah Simpul dari Tengah.” <<endl;
cout<<“4. Hapus Simpul dari Depan.” <<endl;
cout<<“5. Hapus Simpul dari Belakang.” <<endl;
cout<<“6. Hapus Simpul dari Tengah.” <<endl;
cout<<“7. Tampil Data.” <<endl;
cout<<“8. Keluar.” <<endl;
cout<<endl;
cout<< “Pilihan Menu : “;
cin >> opsi;
switch(opsi){
case 1 : tambahdepan();break;
case 2 : tambahbelakang();break;
case 3 : tambahtengah();break;
case 4 : hapusdepan();break;
case 5 : hapusbelakang();break;
case 6 : hapustengah();break;
case 7 : display();break;
}
}while (opsi != 8);
}
Hasilnya :

Lalu kita coba :









Tandanya berhasil:

2. Ilustrasi / Penggambaran Single Linked List dengan Head & Tail





Listing Program:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
struct TNode {
int data;
TNode *next;
};
TNode *head, *tail;
void init(){
head = NULL;
tail = NULL;
}
int isEmpty(){
if(tail == NULL) return 1;
else return 0;
}
void insertDepan(int databaru){
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=tail=baru;
tail->next=NULL;
}
else {
baru->next = head;
head = baru;
}
printf(“Data masuk\n”);
}
void tambahTengah(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=baru;
tail=baru;
tail->next = NULL;
}
else {
tail->next = baru;
tail=baru;
}
printf(“Data masuk\n”);
}
void tambahBelakang(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()==1){
head=baru;
tail=baru;
tail->next = NULL;
}
else {
tail->next = baru;
tail=baru;
}
printf(“Data masuk\n”);
}
void hapusDepan(){
TNode *hapus;
int d;
if (isEmpty()==0){
if(head!=tail){
hapus = head;
d = hapus->data;
head = head->next;
delete hapus;
} else {
d = tail->data;
head=tail=NULL;
}
printf(“%d terhapus\n”,d);
} else printf(“Masih kosong\n”);
}
void hapusTengah(){
TNode *bantu,*hapus;
int d;
if (isEmpty()==0){
if(head!=tail){
hapus = bantu;
d = hapus->data;
head = head->next;
delete hapus;
} else {
d = tail->data;
head=tail=NULL;
}
printf(“%d terhapus\n”,d);
} else printf(“Masih kosong\n”);
}
void hapusBelakang(){
TNode *bantu,*hapus;
int d;
if (isEmpty()==0){
bantu = head;
if(head!=tail){
while(bantu->next!=tail){
bantu = bantu->next;
}
hapus = tail;
tail=bantu;
d = hapus->data;
delete hapus;
tail->next = NULL;
}else {
d = tail->data;
head=tail=NULL;
}
cout<<d<<” terhapus\n”;
} else cout<<“Masih kosong\n”;
}
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}
void tampil(){
TNode *bantu;
bantu=head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<<bantu->data<<endl;
bantu=bantu->next;
}
}
else
cout<<“Masih Kosong”<<endl;
}
main(){ // Fungsi Utama dari program
int pil;
do{
clrscr();
int n;
cout<<“=================================”<<endl;
cout<<“\t Menu Pilihan\t\t”<<endl;
cout<<“=================================”<<endl;
cout<<endl;
cout<<“1.Insert Depan”<<endl;
cout<<“2.Insert Tengah”<<endl;
cout<<“3.Insert Belakang”<<endl;
cout<<“4.Display”<<endl;
cout<<“5.Delete Depan”<<endl;
cout<<“6.Delete Tengah”<<endl;
cout<<“7.Delete Belakang”<<endl;
cout<<“8.Hapus Semua”<<endl;
cout<<“9.Exit”<<endl;
cout<<endl;
cout<<“Masukan Pilihan Anda :”;pil=getche();
switch(pil){
case ‘1’ : clrscr();
cout<<“Masukan data :”;cin>>n;
isEmpty();
insertDepan(n);
break;
case ‘2’: clrscr();
cout<<“Masukan data :”;cin>>n;
isEmpty();
tambahBelakang(n);
break;
case ‘3’: clrscr();
cout<<“Masukan data :”;cin>>n;
isEmpty();
tambahBelakang(n);
break;
case ‘4’: clrscr();
isEmpty();
tampil();
break;
case ‘5’: clrscr();
isEmpty();
hapusDepan();
break;
case ‘6’: clrscr();
isEmpty();
hapusTengah();
break;
case ‘7’: clrscr();
isEmpty();
hapusBelakang();
break;
case ‘8’:clrscr();
clear();
}
getch();
}while(pil!=’9′);
return 0;
}
Hasil:

Masukan pilihan anda: 1 (Insert Depan)
Masukan data: 20 atau terserah angka berapa
Tekan Enter
Data Masuk:

Tekan Enter lagi,

Masukan pilihan anda: 2 (Insert Tengah)
Masukan data: 30 atau terserah angka berapa
Tekan Enter
Data Masuk

Tekan Enter lagi,

Masukan pilihan anda: 3 (Insert Belakang)
Masukan data: 12 atau terserah angka berapa
Tekan Enter
Data Masuk

Tekan Enter lagi,

Masukan Pilihan Anda: 4 (Display/Tampilan)

Jika sudah selesai melihat Tekan Enter,

Jika Ingin Menghapus, bisa pilih Delete Depan, Delete Tengah, dan Delete Belakang
Contoh:
Masukan Pilihan Anda: 5 (Delete Depan)

Maka 20 akan Terhapus,
Jika sudah tekan enter
Atau bisa pilih Hapus Semua contoh

Masukan Pilihan Anda: 8 (Hapus Semua)

Maka Tampilannya akan seperti ini artinya data sudah terhapus,
Jika kita cek display, tampilannya akan “Masih Kosong” karena sudah terhapus.

Tandanya program sudah berhasil 👍
Berikut adalah Source Codenya klik Program Single Linked List dengan Head & Tail menambah & menghapus node ini:
Program-Single-Linked-List-dengan-Head-Tail-menambah-menghapus-node