LINKED LIST
DISUSUN OLEH
IRFAN FATAHUDDIN
(D41113035)
JURUSAN ELEKTRO
FAKULTAS TEKNIK UNIVERSITAS HASANUDDIN
TAHUN AJARAN 2014/2015
BAB I
PENDAHULUAN
A. LATAR BELAKANG
Kajian struktur data merupakan kajian yang sangat penting dalam bidang elektro dan
informatika. Dan di zaman sekarang ini yang teknologinya semakin berkembang, dibutuhkan
struktur data yang efisien yang dapat meningkatkan kinerja program.
Salah satu bentuk struktur data yang berisi kumpulan data yang tersusun secara
sekuensial, saling bersambungan, dinamis dan terbatas adalah linked list (senarai berkait).
Suatu linked list adalah suatu simpul (node) yang dikaitkan dengan simpul yang lain dalam
suatu urutan tertentu. Suatu simpul dapat berbentuk suatu struktur atau class. Simpul harus
mempunyai satu atau lebih elemen struktur atau class yang berisi data.
Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier dengan
bantuan pointer. Dikatakan single (singly) linked apabila hanya ada satu pointer yang
menghubungkan setiap node. single artinya field pointer-nya hanya satu buah saja dan satu
arah.
Linked list adalah struktur data yang paling dasar. Linked list terdiri atas sejumlah unsurunsur dikelompokkan, atau terhubung, bersama-sama di suatu deret yang spesifik. Linked list
bermanfaat di dalam memelihara koleksi-koleksi data, yang serupa dengan array.
Bagaimanapun juga, linked list dan array mempunyai perbedaan. Pada makalah ini, kita akan
membahas secara umum tentang linked list.
B. TUJUAN
1. Memahami defenisi dari linked list
2. Memahami jenis-jenis linked list
3. Memahami operasi-operasi pada linked list
4. Mampu membuat program yang berhubungan dengan linked list
C. BATASAN MASALAH
Bahasa pemrograman yang digunakan pada makalah ini adalah C++.
BAB II
ISI
a. Penyisipan
Penyisipan di belakang
Dalam hal ini simpul-simpul baru yang ditambahkan selalu akan menjadi simpul
terakhir. Ilustrasi penambahannya digambarkan pada gambar di bawah. Pointer awal
adalah pointer yang menunjuk ke simpul pertama, pointer akhir menunjuk ke simpul
terakhir dan pointer Baru adalah simpul yang akan ditambahkan (gambar a).
Untuk menyambung simpul yang ditunjuk oleh Akhir dan Baru, pointer pada
simpul yang ditunjuk oleh simpul Akhir dibuat sama dengan Baru (gambar b),
kemudian pointer Akhir dibuat sama dengan pointer Baru (gambar c). (Eva. 2013, hal
41)
Penyisipan di depan
Secara garis besar operasi penambahannya bisa dijelaskan sebagai berukut.
Pertama kali pointer pada simpul yang ditunjuk oleh pointer Baru dibuat sama dengan
Awal (gambar b). Kemudian Awal dibuat sama dengann Baru (gambar c). Dengan
demikian simpul baru akan selalu diperlakukan sebagai simpul pertama dalam senarai
berantai. (Eva. 2013, hal 42)
Penyisipan di tengah
Untuk menambah simpul ditengah senarai berantai, diperlukan bantuan sebuah
pointer lain, misalnya bantu. Dalam hal ini simpul baru akan diletakkan setelah
simpul yang ditunjuk oleh pointer bantu.
Pertama kali tentukan dimana simpul baru akan ditambahkan, yaitu dengan
menempatkan pointer Bantu pada suatu tempat. Kemudian pointer pada simpul yang
ditunjuk oleh Baru dibuat sama dengan pointer pada simpul yang ditunjuk oleh Bantu
(gambar b). Selanjutnya pointer pada simpul yang ditunjuk oleh simpul Bantu dibuat
sama dengan Baru (gambar c). (Eva. 2013, hal.44)
b. Penghapusan
Dalam menghapus simpul ada satu hal yang harus diperhatikan, yaitu bahwa simpul
yamg bisa dihapus adalah simpul yang berada sesudah simpul yang ditunjuk oleh suatu
pointer, kecuali untuk simpul pertama.
Menghapus simpul pertama
Untuk menghapus simpul pertama, maka pointer Bantu dibuat sama dengan pointer
Awal (gambar a). Kemudian pointer Awal dipindahkan ke simpul yang ditunjuk oleh
pointer pada simpul yang ditunjuk oleh pointer Bantu (gambar b). Selanjutnya simpul
yang ditunjuk oleh pointer Bantu di dispose (gambar c). (Eva.2013, hal.45)
yang akan dihapus ditunjuk dengan pointer lain, misalnya Hapus (gambar a).
Kemudian pointer pada simpul yang ditunjuk oleh Bantu ditunjukkan pada simpul
yang ditunjuk oleh pointer pada simpul yang akan dihapus (gambar b). Selanjutnya
simpul yang ditunjuk pointer Hapus di dispose (gambar c). (Eva.2013, hal 46)
Flowchart
START
Tampilkan Opsi
Insert kiri
Insert kanan
Hapus depan
Hapus belakang
Tampilkan
selesai
Input
Pilihan
If
pilihan
=1
Input data
baru
If
pilihan
=2
Input data
baru
Tambahkan
data di
sebelah kiri
If
pilihan
=3
Hapus data
paling depan
If
pilihan
=4
Hapus data
paling
belakang
If
pilihan
=5
Tampilkan
semua
data
If
pilihan
=6
Tambahkan
data di
sebelah kiri
Stop
Listing Program
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<malloc.h>
using namespace std;
void buat_baru();
void insert_kiri();
void insert_kanan();
void hapus_depan();
void hapus_belakang();
void tampil();
struct simpul
{
int data;
struct simpul *next;
}
*baru,*awal=NULL, *akhir=NULL, *hapus, *temp;
int main()
{
int pilihan;
awal:
printf("\nMENU SINGLE LINKED LIST\n");
printf("1. Insert Kiri\n");
printf("2. Insert Kanan\n");
printf("3. Hapus Depan\n");
printf("4. Hapus Belakang\n");
printf("5. Tampilkan\n");
printf("6. Selesai\n");
printf("Pilihan Anda : ");
scanf("%d",&pilihan);
if (pilihan==1)
{
insert_kiri();
tampil();
}
if(pilihan==2)
{
insert_kanan();
tampil();
}
if(pilihan==3)
{
hapus_depan();
tampil();
}
if(pilihan==4)
{
hapus_belakang();
tampil();
}
if(pilihan==5)
{
tampil();
}
if(pilihan==6)
{
return 0;
}
goto awal;
}
void buat_baru()
{
baru=(simpul*)malloc(sizeof(struct simpul));
cout<<"Masukan Data : ";cin>>baru->data;
baru->next=NULL;
}
void insert_kanan()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
}
else
{
akhir->next=baru;
}
akhir=baru;
akhir->next=NULL;
cout<<endl<<endl;
}
void insert_kiri()
{
buat_baru();
if(awal==NULL)
{
awal=baru;
akhir=baru;
akhir->next=NULL;
}
else
{
baru->next=awal;
awal=baru;
}
cout<<endl<<endl;
}
void hapus_depan()
{
if(awal==NULL)
cout<<"Kosong";
else
{
hapus=awal;
awal=awal->next;
free(hapus);
}
cout<<endl<<endl;
}
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;
}
void tampil()
{
if(awal==NULL)
{
cout<<"kosong";
}
else
{
temp=awal;
while(temp!=NULL)
{
BAB III
PENUTUP
A. KESIMPULAN
1. Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang
tersusun secara sekuensial, saling sambung-menyambung, dinamis dan terbatas.
2. Ada 2 jenis linked list, yaitu single linked list dan double linked list.
3. Operas-operasi pada linked list yaitu Penyisipan (depan, belakang, tengah) dan
penghapusan (depan, belakang, tengah).
B. DAFTAR PUSTAKA
Yulianti, Eva. 2013. Satuan Acara Perkuliahan.
http://apriliyatiwen.blogspot.com/2013/04/linked-list.html
http://andriansukses.blogspot.com/2014/01/makalah-struktur-data-linked-list.html
http://windafandella.blogspot.com/2013/05/contoh-program-menu-linked-list-insert.html
LAMPIRAN
-
Listing program yang ditampilkan pada makalah ini harus decompile menggunakan
aplikasi DEV C++. Apa bila kita compile dengan MINGW, hasilnya error (tidak bisa
tercompile).