Minggu, 14 Mei 2017

Makalah Linked List (tugas struktur data)




BAB I
                                                                 PENDAHULUAN     
                
Kajian struktur data merupakan kajian yang sangat penting dalam bidang 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 unsur-unsur 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. Memakai Linked list lebih bagus dibandingkan dengan array/larik baik dalam banyak hal. Secara rinci, linked list lebih efisien di dalam melaksanakan penyisipan-penyisipan dan penghapusan-penghapusan. Linked list juga menggunakan alokasi penyimpanan secara dinamis, yang merupakan penyimpanan yang dialokasikan pada runtime. Karena di dalam banyak aplikasi, ukuran dari data itu tidak diketahui pada saat kompile, hal ini bisa merupakan suatu atribut yang baik juga. Setiap node akan berbentuk struct dan memiliki satu buah field bertipe struct yang sama, yang berfungsi sebagai pointer. Dalam menghubungkan setiap node, kita dapat menggunakan cara first-create-first-access ataupun first-create-last-access. Yang berbeda dengan deklarasi struct sebelumnya adalah satu field bernama next, yang bertipe struct tnode. Hal ini sekilas dapat membingungkan. Namun, satu hal yang jelas, variabel next ini akan menghubungkan kita dengan node di sebelah kita, yang juga bertipe struct tnode. Hal inilah yang menyebabkan next harus bertipe struct tnode.
Secara umum linked list dibedakan atas 2 macam, yaitu :
1.    Single Linked List
2.    Double Linked List



BAB II
LANDASAN TEORI

Pada array, apabila programmer ingin menyimpan data, programmer diharuskan untuk mendefinisikan besar array terlebih dahulu, seringkali programmer mengalokasikan array yang sangat besar(misal 100). Hal ini tidak efektif karena seringkali yang dipakai tidak sebesar itu. Dan apabila programmer ingin menyimpan data lebih dari seratus data, maka hal itu tidak dapat dimungkinkan karena sifat array yang besarnya statik. Linked list adalah salah satu struktur data yang mampu menutupi kelemahan tersebut.
Linked list (list bertaut) adalah salah satu struktur data dasar yang sangat fundamental dalam bidang ilmu komputer. Dengan menggunakan linked list maka programmer dapat menimpan datanya kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada linked list data yang ingin disimpan dapat dialokasikan secara dinamis pada saat pengoperasian program (run-time).



BAB III
PEMBAHASAN

1.          Single Linked List
Salah satu struktur data dinamis yang paling sederhana adalah Senarai Berantai (Linked List), atau senarai satu arah. Senarai Berantai sendiri punya makna sebagai kumpulan komponen yang disusun secara berurutan dengan menggunakan bantuan pointer. Komponen-komponen yang tersusun tersebut akan disebut sebagai simpul, sehingga pada senarai akan terdapat banyak simpul, dan tiap simpulnya dapat dibagi menjadi dua bagian. Bagian pertama dari simpul disebut dengan medan informasi, yang berisi informasi/data yang fapat berupa record yanag akan diolah. Sedangkan bagian yang kedua disebut sebagai medan penyambung (link field), yang berisi alamat simpul berikutnya.



Gambar 1.1. Ilustrasi Linked List
          Untuk memudahkan setiap pembahasan selanjutnya, maka akan kita tetapkan untuk sebelah kiri simpul disebut sebagai medan informasi dan sebelah kanan simpul disebut sebagai medan penyambung. Perlu diketahui bahwa medan penyambung sebenarnya adalah suatu pointer yang akan menunjuk ke simpul berikutnya, sehingga nilai dari medan ini dapat berupa alamat lokasi simpul berikutnya ataupun dapat bernilai nil. Perlu diingat bahwa setiap simpul terakhir dari linked list medan penyambung harus bernilai nil.
Contoh dari senarai berantai dengan 5 simpul :



Gambar 1.2. Senarai Berantai 5 simpul

Tampak dari Gambar 1.2 bahwa medan penyambung menunjuk ke simpul berikutnya, dan medan penyambung pada simpul terakhir akan bernilai nil karena medan penyambung tersebut tidak menunjuk kemanapun. Pada senarai berantai juga terdapat 2 buah pointer awal dan  akhir, kedua pointer ini berfungsi untuk mempermudah dalam melakukan operasi pengolahan data pada senarai berantai, seperti : pembacaan, pencarian, pengeditan, serta penghapusan data, pengertian kedua pointer ini mungkin akan lebih jelas pada pembahasan selanjutnya.
Bentuk umum pendeklarasian single linked list :


                                                                  
Penjelasan :  nmlis       : sebuah pointer yang menunjuk ke sebuah record.
nmrecord  : nama record yang berisi variabel penyimpan data  dan berisi medan penyambung.
nmvar1       : variabel yang akan berfungsi sebagai penyimpan data
nmvarn       : variabel yang berfungsi sebeagai media penyambung.

Contoh penulisan Single Linked List :
Type simpul = ^data;
            data   = record
              info : char;
              kait : simpul;
            end;
var awal,akhir,baru : simpul;
Dengan contoh pendeklarasian sederhana tersebut, maka operasi-operasi pengolahan data dapat dilakukan seperti pada contoh program berikut yang berfungsi untuk menambah dan menampilkan data menggunakan  linked list.


 

Program diatas pertama kali setelah pendeklarasian simpul adalah melakukan pemberian nilai nil terhadap variabel awal, karena pada saat program pertama dijalankan data belum ada sehingga variabel awal belum menunjuk kesuatu tempat. Tampak pada program terdapat 3 proses, demikian ilustrasi ke 3 proses tersebut :
Proses 1 : Proses untuk memberikan nilai pada variabel awal dan akhir saat pertama penginputan data.

 



Tampak bahwa medan penyambung dari bantu (bantu^.kait) dibuat nilainya nil karena data masih satu sehingga berperan sebagai awal dan akhir linked list.
Proses 2 : Proses untuk memberikan nilai pada akhir untuk menunjuk ke-bantu yang baru saja diinputkan.


 




                                                                                                         
Pada gambar a simpul bantu baru dibentuk. Gambar b menjelaskan akhir akan menunjuk ke bantu yang baru. Gambar c menjelaskan peberian nilai nil kepada bantu^.kait, karena bantu tersebut berada pada posisi terakhir. Tampak pada gambar bahwa yang berpindah arah hanya akhir dan bukan awal, hal ini menandakan bahwa penambahan dilakukan di belakang linked list. Perlu diingat bahwa dalam linked list terdapat peraturan-peraturan sebagai berikut :
  1. awal akan selalu menunjuk ke awal linked list, dan akhir akan selalu menunjuk ke akhir linked list, sekalipun penambahan data dilakukan.
  2. Setiap simpul yang terakhir dari linked list nilai dari medan penyambung harus selalu bernilai nil.
Proses 3 : Pada proses ini bantu akan membaca simpul dan menampilkan hasilnya dari awal sampai akhir linked list.

 Operasi pada Senarai Berantai (Single Linked List)
1.      Menambah Simpul di Belakang
Untuk contoh dan ilustrasi menambah dibelakang sudah dijelaskan pada contoh program Proses 2.
2.      Menambah Simpul di Depan
Ilustrasi :
Bentuk penulisan dalam bentuk program :
new(bantu);
bantu^.nama := ‘Alung’;
bantu^.kait := awal;
awal := bantu;
3.      Menambah Simpul di Tengah
Ilustrasi :


 
Bentuk penulisan dalam bentuk program :
new(bantu);
bantu^.nama := ‘Alung’;
bantu^.kait := bantu2^.kait;
bantu2^.kait := bantu;


4.      Menghapus Simpul di Awal
Ilustrasi :


 

Bentuk penulisan dalam bentuk program :
bantu := awal;
awal := bantu^.kait;
dispose(bantu);

5.      Menghapus Simpul di Tengah

ilustrasi :





Bentuk penulisan dalam bentuk program atau algoritma :
While (bantu^.kait<>nil) or (bantu^.nama<>‘Budi’) do
  bantu := bantu^.kait;
If (bantu <> nil) then
Begin
  bantu2^.kait := bantu;
  bantu2^.kait := bantu^.kait;
  dispose(bantu);
End;
6.      Menghapus Simpul di Akhir.
ilustrasi :






Bentuk penulisan dalam bentuk program :
bantu := akhir;
akhir^.kait := bantu;
dispose(bantu);
akhir^.kait := nil;
2.              Double Linked List,
Double Linked List menggunakan tekhnik yang sama dengan Single Linked List. Perbedaan utamanya adalah simpul pada Double Linked List dapat menunjuk kedapan atau kebelakang. Hal ini akan mempermudah pembacaan (bisa dilakukan dari kiri ke kanan atau sebalinya), penambahan simpul baru atau penghapusan simpul bisa dilaksanakan untuk simpul-simpul yang terletak disebelah kiri atau kanan dari pointer yang diketahui.



 
 
Gambar 1.3. Double Linked List

Contoh pendeklarasian Double Linked List :
Type simpul = ^data;
            data   = record
              nama : string;
              depan,belakang : simpul;
            End;
Var awal,akhir,baru : simpul;

            Tampak dari contoh pendeklarasian tersebut pada bagian record terdapat dua buah variabel yang bertipe pointer (simpul) yaitu depan dan belakang. Hal inilah yang mengakibatkan Senarai Berantai tersebut disebut sebagai Double Linked List. Pada deklarasi di atas pointer blakang adalah pointer untuk menunjuk ke simpul sebelumnya, atau simpul sebelah kiri, pointer depan adalah pointer untuk menunjuk ke simpul sesudahnya atau simpul sebelah kanan.

Operasi pada Senarai Berantai Ganda (Double Linked List).
1.      Menambah Data
Ilustrasi :










Bentuk penulisan dalam bentuk program :
akhir^.depan := baru;
baru^.belakang := akhir;
baru^.depan := nil;
akhir := baru;
2.      Membaca simpul/data
Karena memiliki pointer yang dapat menunjuk ke depan dan ke belakang, operasi pembacaan data dilakukan  dari kedua arah, yaitu dari depan dan belakang.
Membaca dari belakang :


 
Penulisan dalam bentuk program atau algoritma :
bantu := awal;
While bantu <> nil do
Begin
  Writeln (‘nama : ‘,bantu^.nama);
  bantu := bantu^.depan;
End;

Fungsi dari penulisan program ini adalah untuk menjalankan pointer bantu dari awal hingga akhir list serta menampilkan isi dari simpul yang dilewati.

Membaca dari depan :


 


Penulisan dalam bentuk program :
bantu := akhir;
While bantu <> nil do
Begin
  Writeln (‘nama : ‘,bantu^.nama);
  bantu := bantu^.belakang;
End;

Perintah-perintah di atas adalah untuk menjalankan pointer bantu dari akhir hingga ke awal senarai, serta menampilkan isi dari variabel nama pada setiap simpul yang dilewatinya.

3.             Soal Latihan
  1. Buatlah program menggunakan methode Single Linked List untuk menginputkan nama, seperti berikut berikut :
Menu :
1.         Tambah Data
2.         Hapus Data Depan
3.         Hapus Data Belakang
4.         Cetak Data
Pilh Menu [1/2/3/4] :
Menu 1 :
  Inputkan Nama : Alung
     Kembali ke menu.
Menu 2 :
  Hapus Data Dari Depan List
  Kembali ke menu.
Tambahkan menu lain yang perlu dipergunakan dalam program.




BAB IV
KESIMPULAN

Simpul adalah semacam tipe data yang kita buat sendiri sebagaimanan nama tipe yang telah disediakan oleh bahasa pemrograman.
Info adalah tempat penyimpanan data dengan tipe yang berbeda-beda sesuai keinginan.
Link adalah tempat penyimpanan alamat simpulnya (pointer).
Linked list adalah sebuah struktur untuk menyimpan data yang bersifat dinamik
Beberapa operasi dapat diterapkan pada linked list seperti sisip(insert),hapus(delete)
Operasi-operasi yang ada pada linked list relatif lebih sulit jika dibandingkan dengan operasi-operasi pada struktur yang statis
Null adalah suatu kondisi khusus dimana pointer itu belum di set dengan sebuah address tertentu, artinya pointer tidak mrnunjuk ke alamat manapun.




DAFTAR PUSTAKA

Suarga, Drs, M.Sc.,M.Math.,Ph.D. 2012 “Algoritma dan Pemrograman”. Yogyakarta: Andi.
Sjukani, Moh.2012“ Struktur Data (Algoritma dan Struktur Data dengan C,C++”. Jakarta: Mitra Wacana Media.