Single Linked List dikembangkan pada tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL).
Pengertian:
1. Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node pointernya menunjuk NULL.
1. Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node pointernya menunjuk NULL.
2. Linked List : artinya node-node tersebut saling terhubung satu sama lain.
3. Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data.
4. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
Single linked list adalah linked list dengan simpul berisi satu link / Pointer yang mengacu kesimpul berikutnya.
single link list terbagi menjadi 2 macam, yaitu :
- single link list circular
- single link list non circular
- Contoh Program dalam C++ (delete head)
//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;
cout<<"\ndata yang dihapus adalah "<<simpan<<endl;
//hapus depan
del = head;
head = head->next;
delete del;
}
}
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<<endl;
}
}
void menu()
{
char pilih, ulang;
int data;
do
{
system("cls");
cout<<"\t SIGIT HARYO P & RINI PUJI LESTARI"<<endl;
cout<<"\t SINGLE LINK LIST"<<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;
}
(Tampilan awal program dalam c++)
(Tampilan setelah dimasukkan perintah 2 / delete head)
- Contoh Program Single Link List Lainnya
#include <conio.h>
#include <stdio.h>
#include <windows.h>
//#include <alloc.h>
using namespace std;
int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();
struct simpul
{
char nim[8], nama [20];
int umur;
struct simpul *next;
} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;
void clrscr()
{
system("cls");
}
int main()
{
do
{
clrscr();
cout<<" UNIVERSITAS BANTEN JAYA"<<endl;
cout<<" STRUKTUR DATA SINGLE LINKED LIST"<<endl;
cout<<" RINI PUJI LESTARI & SIGIT HARYO PAMUNGKAS"<<endl;
cout<<"1. Tambah Depan"<<endl;
cout<<"2. Tambah Belakang"<<endl;
cout<<"3. Hapus Depan"<<endl;
cout<<"4. Hapus Belakang"<<endl;
cout<<"5. Tampilkan"<<endl;
cout<<"6. Selesai"<<endl;
cout<<"Pilihan Anda : ";
cin>>pil;
pilih();
} while(pil!=6);
return 0;
}
void pilih()
{
if(pil==1)
tambah_depan();
else if(pil==2)
tambah_belakang();
else if(pil==3)
hapus_depan();
else if(pil==4)
hapus_belakang();
else if(pil==5)
tampil();
else
cout<<"selesai";
}
void buat_baru()
{
baru=(simpul*)malloc(sizeof(struct simpul));
cout<<"input nim : ";cin>>baru->nim;
cout<<"input nama : ";cin>>baru->nama;
cout<<"input umur : ";cin>>baru->umur;
baru->next=NULL;
}
void tambah_belakang()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
}
else
{
akhir->next=baru;
}
akhir=baru;
akhir->next=NULL;
cout<<endl<<endl;
tampil();
}
void tambah_depan()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
akhir->next=NULL;
}
else
{
baru->next=awal;
awal=baru;
}
cout<<endl<<endl;
tampil();
}
void hapus_depan()
{
if (awal==NULL)
cout<<"Kosong";
else
{
hapus=awal;
awal=awal->next;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void hapus_belakang()
{
if (awal==NULL)
cout<<"Kosong";
else if(awal==akhir)
{
hapus=awal;
awal=awal->next;
free(hapus);
}
else
{
hapus=awal;
while(hapus->next!=akhir)
hapus=hapus->next;
akhir=hapus;
hapus=akhir->next;
akhir->next=NULL;
free(hapus);
}
cout<<endl<<endl;
tampil();
}
void tampil()
{
if (awal==NULL)
cout<<"Kosong";
else
{
bantu=awal;
while(bantu!=NULL)
{
cout<<"nim : "<<bantu->nim;
cout<<" nama : "<<bantu->nama;
cout<<" umur : "<<bantu->umur<<endl;
bantu=bantu->next;
}
}
getch();
}
- Soal Single Link List dan Pengerjaannya
jawab :
1. MAHASISWA
INFO LINK
1 -
2 W --> 11(data A setelah W) step 8
3 M --> 4 (data A setelah M) step1
4 A --> 9(data H setelah A) step 2
5 S --> 7(data I setelah S) step 5
6 -
7 I --> 8(data S setelah I) step 6
8 S --> 2(data W setelah S) step 7
9 H --> 10(data A setelah H) step 3
10 A --> 5(data S setelah A) step 4
11 A --> 3/0(data M / no data) step 9
keterangan :
--> sebagai pointer yang menunjuk ke data setelahnya.
Untuk penerapan single link list circular setelah data A yang terakhir maka pointernya kembali lagi pada data Head nya yaitu M di data ke 3 , sedangkan untuk single link list non circular pointernya menunjuk ke null yang berarti 0 / tidak ada data lagi.
2. DOUBLE LINK LIST
INFO LINK
1 D --> 15(data O setelah D) step1
2 K --> 7(data space setelah K) step11
3 - --> 14(data L setalah space) step7
4 U --> 5(data B setelah U) step3
5 B --> 6(data L setelah B) step4
6 L --> 9(data E setelah L) step5
7 - --> 17(data L setelah space) step12
8 N --> 2(data K setelah N) step10
9 E --> 3(data space setelah E) step6
10 I --> 8(data N setelah I) step9
11 S --> 18(data T setelah S) step 15
12 - -->
13 I --> 11(data S setelah I) step14
14 L --> 10(data I setelah L) step8
15 O --> 4(data U setelah O) step2
16 - -->
17 L --> 13(data I setelah L) step13
18 T --> 1/ 0 (data D / 0) step16
keterangan :
--> sebagai pointer yang menunjuk ke data setelahnya.
Untuk penerapan single link list circular setelah data T yang
terakhir maka pointernya kembali lagi pada data Head nya yaitu D di data
ke 1 , sedangkan untuk single link list non circular pointernya menunjuk
ke null yang berarti 0 / tidak ada data lagi.Untuk soal no 3 dan 4 silahkan dicoba dirumah guys,
semangat belajar guys! thanks a lot
cakep cuys, thanks sharenya
BalasHapusok guys yourwel
Hapuskalo pake huruf bagaimana bro.....
BalasHapusdisitukan contohnya sudah dengan huruf bro
BalasHapus