Anda di halaman 1dari 12

PEMROGRAMAN DAN STRUKTUR DATA

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. PENGERTIAN LINKED LIST


Linked List (senarai berantai) adalah suatu struktur data linier. Berbeda dengan array yang
juga merupakan struktur data linier dan tipe data komposit, linked list dibentuk secara
dinamik. Pada saat awal program dijalankan elemen linked list belum data. Elemen linked
list (disebut node) dibentuk sambil jalan sesuai instruksi. Apabila setiap elemen array dapat
diakses secara langsung dengan menggunakan indeks, sebuah node linked list diakses dengan
menggunakan pointer yang mengacu (menunjuk) ke node tersebut.
B. JENIS-JENIS LINKED LIST

a. Single Linked List


Tempat yang disediakan pada satu area memori tertentu untuk menyimpan data dikenal
dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke
simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan
sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List
(NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana. Biasanya
Linked List pada titik akhirnya akan menunjuk ke NULL).
Pembuatan Single Linked List dapat menggunakan 2 metode:
- LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
- FIFO (First In First Out), aplikasinya : Queue (Antrean)

b. Double Linked List


Salah satu kelemahan single linked list adalah pointer (penunjuk) hanya dapat bergerak
satu arah saja, maju/mundur, atau kanan/kiri sehingga pencarian data pada single linked
list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut,
dapat menggunakan metode double linked list. Linked list ini dikenal dengan nama
Linked list berpointer Ganda atau Double Linked List.
C. OPERASI-OPERASI PADA LINKED LIST

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)

Menghapus simpul di tengah atau terakhir


Untuk menghapus simpul yang ada ditengah senarai berantai, pertama kali
letakkan pointer Bantu pada simpul di sebelah kiri simpul yang akan dihapus. Simpul

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)

D. CONTOH PROGRAM LINKED LIST

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)
{

cout<<" Data : "<<temp->data<<"";


temp=temp->next;
}
}
getch();
}

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).

Anda mungkin juga menyukai