LINKED LIST
1. Tujuan Instruksional Umum
a. Mahasiswa dapat melakukan perancangan aplikasi menggunakan struktur
Linked List (Senarai Berkait)
b. Mahasiswa mampu melakukan analisis pada algoritma Linked List yang dibuat
c. Mahasiswa mampu mengimplementasikan algoritma Linked List pada sebuah
aplikasi secara tepat dan efisien
2. Tujuan Instruksional Khusus
a. Mahasiswa dapat menjelaskan mengenai Linked List
b. Mahasiswa dapat membuat dan mendeklarasikan Abstraksi Tipe Data Linked
List
c. Mahasiswa mampu menerapkan operasi Single Linked List Non Circular :
Insert, update, dan delete
d. Mahasiswa mampu menerapkan operasi Single Linked List Circular : Insert,
update, dan delete
3. Dasar teori
Pengertian Linked List
Salah satu bentuk struktur data yang berisi kumpulan data yang tersusun
secara sekuensial, saling bersambungan, dinamis dan terbatas adalah senarai
berkait (linked list). Suatu senarai berkait (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.
Senarai berkait adalah struktur data yang paling dasar. Senarai berkait
terdiri atas sejumlah unsur-unsur dikelompokkan, atau terhubung, bersama-sama
di suatu deret yang spesifik. Senarai berkait bermanfaat di dalam memelihara
koleksi-koleksi data, yang serupa dengan array/larik yang sering digunakan.
alokasi
penyimpanan
secara
dinamis,
yang
merupakan
Beberapa Definisi :
1. List l adalah list kosong, jika First(L) = Nil
2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last) = Nil
Nil adalah pengganti Null, perubahan ini dituliskan dengan #define Nil Null
Senarai berkait tunggal (Single Linked List)
Senarai berkait yang paling sederhana, di mana unsur-unsur terhubung oleh suatu
pointer. Struktur ini mengizinkan senarai dilintasi dari elemen pertama sampai
elemen terakhir.
Senarai berkait ganda (Double Linked List)
Senarai berkait di mana unsur-unsur yang terhubung oleh dua pointer sebagai
gantinya. Struktur ini mengizinkan senarai untuk dilintasi kedua-duanya secara
maju mundur.
Senarai sirkular (Circular List)
Senarai berkait di mana elemen yang terakhir terhubung dengan elemen yang
pertama sebagai ganti set ke NULL. Struktur ini mengizinkan senarai untuk
dilintasi secara lingkar.
Abstraksi Tipe Data Single Linked List Non Circular
Pembuatan struct bernama tnode berisi 2 field, yaitu field data bertipe
integer dan field next yang bertipe pointer dari tnode:
Deklarasi node dengan struct:
Struct tnode
{
Int data;
Struct tnode *next;
}
Dengan demikian, sampai saat ini, telah dimiliki tiga node. Satu sebagai kepala
(head), satu sebagai node aktif dalam linked list (curr) dan satu lagi node
sementara (node). Sekarang telah siap untuk membuat single linked list. Untuk itu,
akan dimasukkan nilai tertentu sebagai nilai untuk field data dengan cara
melakukan perulangan sehingga campur tangan user tidak diperlukan.
Seperti yang diungkapkan sebelumnya, bahwa akan dibuat Single Linked
List (SLL) dengan cara first-create-first-access. Dengan cara ini, node yang dibuat
pertama akan menjadi head. Node-node yang dibuat setelahnya akan menjadi
node-node pengikut. Untuk mempermudah pengingatan, ingatlah gambar anak
panah yang mengarah ke kanan. Head akan berada pada pangkal anak panah, dan
node-node berikutnya akan berbaris ke arah bagian anak panah yang tajam.
head = node;
curr = node;
}else
{
curr -> next = node;
curr = node;
}
}
curr -> next = NULL;
Setelah itu, perlu dibuat node dan penghubung. Pertama-tama, akan diuji apakah
head bernilai NULL. Kondisi head bernilai NULL hanya terjadi apabila belum
dimiliki satu node pun. Dengan demikian, node tersebut akan dijadikan sebagai
head. Node aktif (curr), juga kita dapat dari node tersebut.
Kalau head tidak bernilai NULL alias telah dimiliki satu atau lebih node, yang
pertama dilakukan adalah menghubungkan pointer next dari node aktif (curr) ke
node yang baru saja dibuat. Dengan demikian, baru saja dibuat penghubung antara
rantai lama dengan mata rantai baru. Atau, dalam permainan kereta api, pemain
paling depan dalam barisan lama akan menempelkan tangannya pada bahu pemain
yang baru bergabung. Node aktif (curr) kemudian dipindahkan ke node yang baru
dibuat.
if (head == NULL)
{
head = node;
curr = node;
Gambar 3 Membuat elemen pertama SLL
}
else
{
curr->next=node;
curr = node;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct tnode
{
int data;
struct tnode *next;
};
Menambah node dan membuat tail dari single linked list circular
Deklarasi penambahan node baru:
Void main()
{
node = new tnode;
tail = new tnode;
node->next = head->next;
head->next = node;
tail = node;
}
{
hapus = new tnode;
if( head != tail)
{
hapus = head;
head = head->next;
tail->next = head;
delete hapus;
}else
{
head = NULL;
tail = NULL;
}
}
4. Latihan
Nama Program
Bahasa Pemrogramam
Compiler
Script program
Latihan 1
Algoritma dan Struktur Data
: Program Membuat Single Linked list
: C++
: Min GW
:
Nil NULL
info(P) P->info
next(P) P->next
First(L) (L)
if (n!=NULL)
{
info(n)=m;
next(n)=Nil;
}
return n;
Output Program :
Algoritma :
1. Start
2. Baca file header, definisi, struct, dan variabel
3. Baca fungsi CiptaSenarai, SisipSenarai, dan CetakSenarai
4. Pada fungsi main, baca variabel dan panggil fungsi CiptaSenarai
5. Masukkan jumlah data dan sejumlah data
6. Panggil fungsi SisipSenarai
7. Panggil fungsi CetakSenarai untuk menampilkan hasilnya
8. Selesai.
Deskripsi Program :
Program ini menggunakan metode single linked list. Proses single linked list
pada program ini dilakukan dengan cara menginputkan berapa jumlah atau
panjang dari linked list (data yang ingin dimasukkan), kemudian data yang telah
diinputkan tersebut disimpan dan ditampilkan berurutan sesuai urutan inputan.
Program ini nilai terakhir yang bertindak sebagai ekor akan selalu bernilai NULL
atau kosong. Single linked list menggunakan metode penyimpanan secara linier
(berurutan) mulai dari data pertama yang bertindak sebagai head sampai data
terakhir sebagai ekor.
Latihan 2
Algoritma dan Struktur Data
Nama Program
Bahasa Pemrogramam
: C++
Compiler
: Min GW
Script program
:
// Program Pencarian Nilai Terkecil dan Nilai Terbesar
dlm Linked List
#include <iostream.h>
#include <stdlib.h>
#include <malloc.h>
#include <conio.h>
#define Nil NULL
}
InfoType Max(list L)
{
address Pmax,Pt;
Pmax=First(L);
if(next(Pmax)==Nil)
{
return(info(Pmax));
}
else
{
Pt=next(Pmax);
while(Pt!=Nil)
{
if(info(Pmax)<info(Pt))
{
Pmax=Pt;
}
else
{
Pt=next(Pt);
}
}
return(info(Pmax));
}
}
InfoType Min(list L)
{
address Pmin,Pt;
Pmin=First(L);
if(next(Pmin)==Nil)
{
return(info(Pmin));
}
else
{
Pt=next(Pmin);
while(Pt!=Nil)
{
if(info(Pmin)>info(Pt))
{
Pmin=Pt;
}
else
{
Pt=next(Pt);
}
}
return(info(Pmin));
}
}
int main()
{
list pel;
list n;
int i,k,nilai,maks,min;
CiptaSenarai(&pel);
cout<<"Masukkan banyak data=";
cin>>k;
for(i=1;i<=k;i++)
{
cout<<"masukkan data senarai ke="<<i<<" = ";
cin>>nilai;
n=NodBaru(nilai);
SisipSenarai(&pel,n,NULL);
}
cout<<endl;
CetakSenarai(pel);
maks=Max(pel);
min=Min(pel);
cout<<endl;
cout<<"nilai terbesar:"<<maks;
cout<<endl;
cout<<"nilai terkecil:"<<min;
}
Output Program :
Algoritma :
1.
2.
3.
4.
5.
6.
7.
Start
Baca file header, definisi, struct, dan variabel
Baca fungsi CiptaSenarai, SisipSenarai, CetakSenarai, Max dan Min
Pada fungsi main, baca variabel dan panggil fungsi CiptaSenarai
Masukkan jumlah data dan sejumlah data
Panggil fungsi SisipSenarai
Panggil fungsi CetakSenarai
8. Cari nilai maximum dan minimum dengan menggunakan fungsi Max dan
Min
9. Tampilkan hasil yaitu berupa nilai maximum dan minimum
10. Selesai.
Dekripsi Program :
Sama seperti percobaan pertama program ini juga menggunakan metode
single linked list. Proses single linked list pada program ini dilakukan dengan cara
menginputkan berapa jumlah atau panjang dari linked list(data yang ingin
dimasukkan), kemudian data yang telah diinputkan tersebut disimpan dan
ditampilkan berurutan sesuai urutan inputan. Program ini nilai terakhir yang
bertindak sebagai ekor akan selalu bernilai NULL atau kosong. Single linked list
menggunakan metode penyimpanan secara linier(berurutan) mulai dari data
pertama yang bertindak sebagai head sampai data terakhir sebagai ekor. Setelah
pemasukan data selesai kemudian data yang telah tersimpan tersebut akan dicari
nilai maximum(tertinggi) serta nilai minimum(terendah) dan ditampilkan.
5. Tugas Rumah
Tugas Rumah
Algoritma dan Struktur Data
Nama Program
Bahasa Pemrogramam
Compiler
Script program
#include<iostream.h>
#include<stdlib.h>
#include<conio.h>
typedef struct tnode{
int data;
tnode *next;
};
tnode *awal;
(Tumpukan)
FIFO (First In First Out), aplikasinya : Queue
(Antrean)
: C++
: Min GW
:
a = hapus->data;
bantu->next = NULL;
delete hapus;
}
cout<<a<<"telah terhapus"<<endl;
}
}
void tampil(){
tnode *bantu;
bantu = awal;
bool cek = true;
if(!kosong()){
cout<<"Data anda adalah : ";
while(bantu!=NULL){
cout<<bantu->data<<" ";
bantu=bantu->next;
}
cout<<endl;
} else {
cout<<"Data masih kosong"<<endl;
}
}
void clear(){
tnode *bantu, *hapus;
bantu = awal;
while(bantu!=NULL){
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
awal = NULL;
}
void judul (){
cout<<"================================="<<endl;
cout<<" SINGLE LINKED LIST\t="<<endl;
cout<<" \tMETODE LIFO
\t="<<endl;
cout<<" \tDALAM STACK
\t="<<endl;
cout<<"================================="<<endl;
}
int main(){
int pil,dat;
do{
system("cls");
judul();
cout<<"1. Data dimasukkan di depan"<<endl;
cout<<"2. Data dimasukkan di belakang"<<endl;
cout<<"3. Menampilkan data"<<endl;
cout<<"4. Menghapus data di depan"<<endl;
cout<<"5. Menghapus data di belakang"<<endl;
cout<<"6. Membersihkan semua data"<<endl;
cout<<"7. Exit"<<endl;
cout<<"Masukkan pilihan menu : ";cin>>pil;
switch(pil){
case 1 : {
cout<<"Masukkan data dalam bentuk angka : ";cin>>dat;
masuk_awal(dat);
break;
}
case 2 : {
cout<<"Masukkan data dalam bentuk angka : ";cin>>dat;
masuk_akhir(dat);
break;
}
case 3 : {
tampil ();
break;
}
case 4 : {
hapus_awal();
break;
}
case 5 : {
hapus_akhir();
break;
}
case 6 : {
clear();
break;
}
case 7 : {
exit(1);
break;
}
default : {
cout<<"Pilihan menu yang anda salah ! "<<endl;
}
}
getch();
}
while(pil>0)
Output Program :
Algoritma :
1. Start
2. Baca file header dan struct
3. Baca fungsi netral, masuk_awal, masuk_akhir, hapus_awal, hapus_akhir,
tampil, clear, dan judul
4. Pada fungsi main, baca variabel kemudian panggil fungsi judul
5. Masukkan pilihan menu yang diinginkan
6. Jika diinputkan pilihan 1, maka tampilkan panggil fungsi masuk_awal
7. Jika diinputkan pilihan 2, maka tampilkan panggil fungsi masuk_akhir
8. Jika diinputkan pilihan 3, maka tampilkan panggil fungsi tampil
9. Jika diinputkan pilihan 4, maka tampilkan panggil fungsi hapus_awal
10. Jika diinputkan pilihan 5, maka tampilkan panggil fungsi hapus_awal
11. Jika diinputkan pilihan 6, maka tampilkan panggil fungsi clear
12. Jika diinputkan pilihan 7, maka hentikan program (keluar dari program)
13. Apabila ada kesalahan memasukkan pilihan akan ada pemberitahuan
14. Selesai
Deskripsi Program :
Program ini membuat single linked list dengan menggunakan dua metode
yaitu: LIFO (Last In First Out), aplikasinya : Stack (Tumpukan) dan FIFO (First
In First Out), aplikasinya : Queue (Antrean). Proses single linked list pada
program ini dilakukan dengan cara menampilkan menu pilihan kemudian
menginputkan pilihan menu yang diinginkan. Jika memilih menu 1 maka program
akan meminta memasukkan data dari awal (head), sedangkan untuk menu 2
kebalikan dari menu 1, memasukkan data dari belakang (tail). Menu 3 digunakan
untuk menampilkan data yang telah diinputkan. Menu 4 digunakan untuk
menghapus data yang terletak paling depan (head), sedangkan menu 5
kebalikannya. Menu 6 digunakan untuk menghapus semua data yang telah
diinputkan.
6. Kesimpulan
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. Setiap node akan berbentuk struct dan memiliki satu buah
field bertipe struct yang sama, yang berfungsi sebagai pointer. Dalam
7. Daftar Rujukan
1. Tim Asisten Dosen. 2010. Modul 6 Single Linked List. Malang:
Universitas Negeri Malang.
2. Kadir, Abdul. 2003. Pemrograman C++. Yogyakarta: Penerbit ANDI.
3. Suarga, M.Sc. dan Math, M., Ph.D. 2012. Algoritma dan Pemrograman.
Yogyakarta: Penerbit ANDI.
4. Rini, Angga. 2011. Laporan Praktikum 6 Single Linked List Menggunakan
C++, (online),
(http://download1391.mediafire.com/7s7ckfxvbb9g/34f21daags7knky/Prak.
+6+Single+Linked+List.docx), diakses 14 Februari 2015.