STRUKTUR DATA - Linked List
Linked List
Linked
List atau dikenal juga dengan sebutan senarai berantai adalah struktur
data yang terdiri dari urutan record data dimana setiap record memiliki
field yang menyimpan alamat/referensi dari record selanjutnya (dalam
urutan). Elemen data yang dihubungkan dengan link pada Linked List
disebut Node. Biasanya didalam suatu linked list, terdapat istilah head
dan tail.
- Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
- Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list
Yang akan di jabarkan di sini adalah
- Penambahan data di tengah
- Penghapusan list di depan
- Penghapusan list di belakang
- Penghapusam list di tengah
Langsung saja ke skript bahasa c++ nya di bawah ini
Tambah awal
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
using namespace std;
struct node
{
string urut;
node *next;
};
node *awal_ptr = NULL;
node *posisi;
int option = 0;
void tambah_awal_list()
{
node *baru;
baru = new node;
cout << "Masukkan Data Anda : ";
cin >> baru->urut;
baru->next = NULL;
if(awal_ptr == NULL)
{
awal_ptr=baru;
awal_ptr->next = NULL;
}
else
{
baru->next = awal_ptr;
awal_ptr = baru;
}
}
void menambah_node_di_akhir()
{
node *temp, *temp2;
temp = new node;
cout << "Masukkan urut data : ";
cin >> temp->urut;
temp->next = NULL;
if (awal_ptr == NULL)
{
awal_ptr = temp;
posisi = awal_ptr;
}
else
{
temp2 = awal_ptr;
while (temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next = temp;
}
}
void display_list()
{
node *temp;
temp = awal_ptr;
cout << endl;
cout << "Data [";
if (temp == NULL)
cout << "Data Masih kosong" << endl;
else
{
while (temp != NULL)
{
cout << "" << temp->urut << ",";
if (temp == posisi)
cout << " <<<< posisi node";
temp = temp->next;
}
cout << "] ";
cout << "end!" << endl;
}
}
void hapus_awal_node()
{
node *temp;
temp = awal_ptr;
awal_ptr = awal_ptr->next;
delete temp;
}
void hapus_akhir_node()
{
node *temp1, *temp2;
if (awal_ptr == NULL)
cout << "Data tidak ada!" << endl;
else
{
temp1 = awal_ptr;
if (temp1->next == NULL)
{
delete temp1;
awal_ptr = NULL;
}
else
{
while (temp1->next != NULL)
{
temp2 = temp1;
temp1 = temp1->next;
}
delete temp1;
temp2->next = NULL;
}
}
}
void pindah_posisi_sebelumnya()
{
if (posisi->next == NULL)
cout << "Posisi anda pada akhir list." << endl;
else
posisi = posisi->next;
}
void pindah_posisi_berikutnya()
{
if (posisi == awal_ptr)
cout << "Posisi pada awal list" << endl;
else
{
node *previous;
previous = awal_ptr;
while (previous->next != posisi)
{
previous = previous->next;
}
posisi = previous;
}
}
void tambah_tengah_list()
{
node *baru, *bantu;
int posisi_sisip;
if(awal_ptr != NULL)
{
cout<<"Disisip setelah Data urut Ke ? : ";
cin>>posisi_sisip;
baru =new node;
bantu=awal_ptr;
for(int i=1;i<posisi_sisip-1;i++) {
if(bantu->next != NULL)
bantu=bantu->next;
else
break;
}
cout << "Masukkan data urut : ";
cin >> baru->urut;
baru->next=bantu->next;
bantu->next=baru;
}
else
{
cout<<"Data belum tersedia !! Masukan daya yang anda inginkan...\n";
getch();
}
}
void Hapus_tengah_list()
{
int banyakdata,posisi_hapus,poshapus;
node *hapus, *bantu;
if(awal_ptr != NULL)
{
cout<<" Posisi data yang akan di hapus : ";
cin>>posisi_hapus;
banyakdata=1;
bantu=awal_ptr;
while(bantu->next != NULL)
{
bantu=bantu->next;
banyakdata++;
}
if((posisi_hapus<1)||(posisi_hapus>banyakdata))
{
cout<<"Data belum tersedia !! Masukan daya yang anda inginkan...\n";
}
else
{
bantu=awal_ptr;
poshapus=1;
while(poshapus<(posisi_hapus-1))
{
bantu=bantu->next;
poshapus++;
}
hapus=bantu->next;
bantu->next=hapus->next;
delete hapus;
}
}
else
cout<<"Data Tidak di temukan, tidak dapat menghapus data di tengah! ";
getch();
}
int init(int nilai){
node *baru;
baru = new node;
baru->urut=nilai;
baru->next = NULL;
if(awal_ptr == NULL)
{
awal_ptr=baru;
awal_ptr->next = NULL;
}
else
{
baru->next = awal_ptr;
awal_ptr = baru;
}
}
int main()
{
awal_ptr = NULL;
do
{
system("cls");
display_list();
cout << endl;
cout << "Menu Utama ............................. : " << endl;
cout << "0. Keluar ............................. :" << endl;
cout << "1. Tambah di awal ...................... :" << endl;
cout << "2. Tambah di akhir...................... :" << endl;
cout << "3. Tambah di tengah .................... :"<< endl;
cout << "4. Hapus list awal .................... :" << endl;
cout << "5. Hapus list akhit .................... :" << endl;
cout << "6. Hapus list tengah.................... :" << endl;
cout << "7. Pindah posisi pointer ke berikutnya.. :" << endl;
cout << "8. Pindah posisi pointer ke sebelumnya.. :" << endl;
cout << endl <<"Masukan pilihan >>";
cin >> option;
switch (option)
{
case 1 : tambah_awal_list();
break;
case 2 : menambah_node_di_akhir();
break;
case 3 : tambah_tengah_list();
break;
case 4 : hapus_awal_node();
break;
case 5 : hapus_akhir_node();
break;
case 6 : Hapus_tengah_list();
break;
case 7 : pindah_posisi_sebelumnya();
break;
case 8 : pindah_posisi_berikutnya();
}
}
while (option != 0);
}
#include <cstdlib>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
using namespace std;
struct node
{
string urut;
node *next;
};
node *awal_ptr = NULL;
node *posisi;
int option = 0;
void tambah_awal_list()
{
node *baru;
baru = new node;
cout << "Masukkan Data Anda : ";
cin >> baru->urut;
baru->next = NULL;
if(awal_ptr == NULL)
{
awal_ptr=baru;
awal_ptr->next = NULL;
}
else
{
baru->next = awal_ptr;
awal_ptr = baru;
}
}
void menambah_node_di_akhir()
{
node *temp, *temp2;
temp = new node;
cout << "Masukkan urut data : ";
cin >> temp->urut;
temp->next = NULL;
if (awal_ptr == NULL)
{
awal_ptr = temp;
posisi = awal_ptr;
}
else
{
temp2 = awal_ptr;
while (temp2->next != NULL)
{
temp2 = temp2->next;
}
temp2->next = temp;
}
}
void display_list()
{
node *temp;
temp = awal_ptr;
cout << endl;
cout << "Data [";
if (temp == NULL)
cout << "Data Masih kosong" << endl;
else
{
while (temp != NULL)
{
cout << "" << temp->urut << ",";
if (temp == posisi)
cout << " <<<< posisi node";
temp = temp->next;
}
cout << "] ";
cout << "end!" << endl;
}
}
void hapus_awal_node()
{
node *temp;
temp = awal_ptr;
awal_ptr = awal_ptr->next;
delete temp;
}
void hapus_akhir_node()
{
node *temp1, *temp2;
if (awal_ptr == NULL)
cout << "Data tidak ada!" << endl;
else
{
temp1 = awal_ptr;
if (temp1->next == NULL)
{
delete temp1;
awal_ptr = NULL;
}
else
{
while (temp1->next != NULL)
{
temp2 = temp1;
temp1 = temp1->next;
}
delete temp1;
temp2->next = NULL;
}
}
}
void pindah_posisi_sebelumnya()
{
if (posisi->next == NULL)
cout << "Posisi anda pada akhir list." << endl;
else
posisi = posisi->next;
}
void pindah_posisi_berikutnya()
{
if (posisi == awal_ptr)
cout << "Posisi pada awal list" << endl;
else
{
node *previous;
previous = awal_ptr;
while (previous->next != posisi)
{
previous = previous->next;
}
posisi = previous;
}
}
void tambah_tengah_list()
{
node *baru, *bantu;
int posisi_sisip;
if(awal_ptr != NULL)
{
cout<<"Disisip setelah Data urut Ke ? : ";
cin>>posisi_sisip;
baru =new node;
bantu=awal_ptr;
for(int i=1;i<posisi_sisip-1;i++) {
if(bantu->next != NULL)
bantu=bantu->next;
else
break;
}
cout << "Masukkan data urut : ";
cin >> baru->urut;
baru->next=bantu->next;
bantu->next=baru;
}
else
{
cout<<"Data belum tersedia !! Masukan daya yang anda inginkan...\n";
getch();
}
}
void Hapus_tengah_list()
{
int banyakdata,posisi_hapus,poshapus;
node *hapus, *bantu;
if(awal_ptr != NULL)
{
cout<<" Posisi data yang akan di hapus : ";
cin>>posisi_hapus;
banyakdata=1;
bantu=awal_ptr;
while(bantu->next != NULL)
{
bantu=bantu->next;
banyakdata++;
}
if((posisi_hapus<1)||(posisi_hapus>banyakdata))
{
cout<<"Data belum tersedia !! Masukan daya yang anda inginkan...\n";
}
else
{
bantu=awal_ptr;
poshapus=1;
while(poshapus<(posisi_hapus-1))
{
bantu=bantu->next;
poshapus++;
}
hapus=bantu->next;
bantu->next=hapus->next;
delete hapus;
}
}
else
cout<<"Data Tidak di temukan, tidak dapat menghapus data di tengah! ";
getch();
}
int init(int nilai){
node *baru;
baru = new node;
baru->urut=nilai;
baru->next = NULL;
if(awal_ptr == NULL)
{
awal_ptr=baru;
awal_ptr->next = NULL;
}
else
{
baru->next = awal_ptr;
awal_ptr = baru;
}
}
int main()
{
awal_ptr = NULL;
do
{
system("cls");
display_list();
cout << endl;
cout << "Menu Utama ............................. : " << endl;
cout << "0. Keluar ............................. :" << endl;
cout << "1. Tambah di awal ...................... :" << endl;
cout << "2. Tambah di akhir...................... :" << endl;
cout << "3. Tambah di tengah .................... :"<< endl;
cout << "4. Hapus list awal .................... :" << endl;
cout << "5. Hapus list akhit .................... :" << endl;
cout << "6. Hapus list tengah.................... :" << endl;
cout << "7. Pindah posisi pointer ke berikutnya.. :" << endl;
cout << "8. Pindah posisi pointer ke sebelumnya.. :" << endl;
cout << endl <<"Masukan pilihan >>";
cin >> option;
switch (option)
{
case 1 : tambah_awal_list();
break;
case 2 : menambah_node_di_akhir();
break;
case 3 : tambah_tengah_list();
break;
case 4 : hapus_awal_node();
break;
case 5 : hapus_akhir_node();
break;
case 6 : Hapus_tengah_list();
break;
case 7 : pindah_posisi_sebelumnya();
break;
case 8 : pindah_posisi_berikutnya();
}
}
while (option != 0);
}
Infolebih lanjut anda dapat mengunduh program nya di link berikut ini
Download
Referensi dan sumber :
http://sfandrianah.blogspot.co.id/2015/11/linked-list-node-insert-kiri-insert.html?m=1
Tidak ada komentar:
Posting Komentar