MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Q
Pertemuan Ke 5 : List Linier (Linked List) Referensi: 1. Inggriani Liem. 2003. Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB 2. Rinaldi Munir. 2003. Algoritma dan Pemrograman II. Bandung : Penerbit Informatika I.
List Berkait 1. Definisi List linier adalah sekumpulan elemen bertype sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari 2 bagian : info dan next. Type ElmtList = record < Info : InfoType, Next : address > InfoType adalah sebuah type terdefenisi yang menyimpan informasi sebuah elemen list sedangkan Next adalah address dari elemen berikutnya ( suksesor ). Dengan demikian, jika didefinisikan First adalah alamat elemen pertama list, maka elemen berikutnya dapat diakses secara terurut (suksesif) dari elemen pertama suatu list. Representasi lojik list dapat digambarkan seperti gambar berikut:
Sebuah list linier dapat dikenali dengan cara: elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : First alamat elemen berikutnya ( suksesor ), jika kita mengetahui alamat sebuah elemen , yang dapat diakses melalui field Next
1
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Q
setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu.Untuk mengacu sebuah elemen , alamat harus terdefenisi . Dengan alamat tersebut Informasi yang tersimpan pada elemen list dapat diakses . elemen terakhirnya. Elemen terakhir dikenali dengan Next(P)==NIL Jika L adalah list , dan P adalah address : Alamat elemen pertama list L dapat diacu dengan menggunakan notasi : First (L). Elemen yang diacu oleh P dapat dipergunakan informasinya dengan menggunakan notasi : Info(P) Next(P) Beberapa pengertian dasar mengenai list adalah: 1. List L adalah List kosong , jika First(L) = Nil 2. Elemen terakhir dikenali, dengan salah satu cara adalah karena Next(Last)=Nil Secara umum kamus data / deklarasi yang digunakan untuk merepresentasikan list adalah: Kamus/Deklarasi Nama Umum type InfoType = … {Sebuah type terdefinisi, record} type Address pointer to ElmtList type ElmtList : record
type List = record atau dapat juga type List = Address {Deklarasi Nama Peubah} L : List P : Address { Dengan deklarasi seperti di atas maka: 2
Q
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
First(L) menjadi L Info(P) menjadi P↑. Info Next(P) menjadi P↑.Next Nil
tetap Nil
2. Skema traversal (penelusuran) untuk list linier List terdiri dari sekumpulan elemen. Seringkali diperlukan untuk memproses setiap elemen list dengan cara yang sama. Karena itu salah primitif operasi konsultasi dasar pada struktur list adalah traversal, yaitu “mengunjungi” setiap elemen list untuk diproses. Akses list selalu dimulai dari elemen pertama, maka penelusuran selalu dimulai dari elemen pertama dan seterusnya ke elemen – elemen berikutnya sampai dengan elemen terakhir Procedure SKEMAListTransversal1( Input L : List ) {K. Awal: List L terdefinisi , mungkin kosong } {K. Akhir: semua elemen list L dikunjungi dan telah diproses } {Proses : Traversal sebuah list linier. Dengan MARK,
tanpa pemrosesan
khusus pada list kosong} {Deklarasi nama} Kamus/Deklarasi P : address { address untuk traversal , type terdefenisi } Algoritma Inisialisasi {Prosedur Inisialialisasi yang terdefinisi, jika ada} P ← First ( L ) {ambil elemen pertama} While ( P ≠Nil ) do
}
Proses ( P ) P←Next (P)
{ ambil elemen berikutnya}
{P ==NIL, kondisi keluar dari traversal} Terminasi {Prosedur terminasi yang terdefinisi} Procedure SKEMAListTransversal2( Input L : List ) {K. Awal: List L terdefinisi , mungkin kosong } {K. Akhir: semua elemen list L dikunjungi dan telah diproses }
3
Q
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
{Proses : Traversal sebuah list linier dengan perlakuan khusus untuk list linier yang kosong, pemrosesan engan mark} {Deklarasi nama} Kamus/Deklarasi P : address { address untuk traversal , type terdefenisi } Algoritma Inisialisasi {Prosedur Inisialialisasi yang terdefinisi, jika ada} If (First(L)==NIL) then Output(“List Kosong) Else Until P ← First ( L ) {ambil elemen pertama} Repeat Proses ( P ) P←Next (P) Until ( P == Nil ) do {P ==NIL, kondisi keluar dari traversal} Terminasi {Prosedur terminasi yang terdefinisi} 3. Skema Sequential Search untuk list linier Selain traversal, proses pencarian suatu elemen
list
adalah
primitif
yang
sering kali didefinisikan pada struktur list. Pencarian dapat berdasarkan nilai yang terdapat pada info, atau berdasarkan alamat tertentu. 3.1. Pencarian suatu nilai, output adalah address Search ini sering digunakan untuk mengenali suatu elemen list berdasarkan nilai informasi yang disimpan pada elemen yang dicari. Biasanya dengan alamat yang ditemukan, akan dilakukan suatu proses terhadap elemen list tersebut. Procedure SKEMAListSearch1 ( Input L : List, X : InfoType, Output P : address, Found: Boolean ) { K. Awal : List linier L sudah terdefinisi dan siap dikonsultasi, X terdefenisi }
4
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Q
{ K.Akhir : P : address pada pencarian beurutan, dimana X diketemukan, P = Nil jika tidak ketemu, Found berharga true jika harga X yang dicari ketemu, false jika tidak. Jika X ada pada list di lebih dari satu elemen, maka yang diambil adalah X pada elemen pertama } Kamus/Deklarasi Algoritma P ← First ( L ) {ambil elemen pertama} Found ← false {inisialisasi nilai Found, asumsi belum ditemukan} While ( P ≠ Nil ) and ( not found ) do if
X = Info (P)
then
Found ←True else P ← Next (P) endif { P = Nil or Found} {Jika Found maka P adalah address dimana harga yang dicari diketemukan} 3.2. Pencarian suatu Elemen yang beralamat tertentu Procedure SKEMAList Search2( Input L : List, P : address, Output : Found: Boolean ) {K. Awal : List linier L sudah terdefinisi dan siap dikonsultasi, X terdefenisi } {K.Akhir : Jika ada elemen list beralamat P, Found berharga true, Jika tidak ada elemen list beralamat P, Found berharga false } {Proses : Sequential Search 2 pada sebuah list linier L, Semua elemen diperiksa dengan intruksi yang sama } 5
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Q
Kamus/Deklarasi Pt : address Algoritma Pt ← First ( L ) {ambil elemen pertama} Found ← false {inisialisasi nilai Found, asumsi belum ditemukan} While ( Pt ≠ Nil ) and ( not Found ) do if
Pt = P Found
then
← true
else Pt ←
Next (Pt)
{ Pt = Nil or Found} { Jika Found maka P adalah elemen list}
4. Algoritma fungsional list linier Secara fungsional, pada sebuah list linier biasanya dilakukan pembuatan, penambahan atau penghapusan elemen yang dapat ditulis sebagai berkut : Jika diberikan L, L1 dan L2 adalah list linier dengan elemen ElmtList, maka operasi yang dapat dilakukan : ListEmpty, CreateList, Insert, Delete, Concat dan UpdateList 4.1. List Kosong Function IsEmptyList (input: L : List ) → boolean { Fungsi digunakan untuk memeriksa apakah sebuah list L kosong, mengirimkan true jika list kosong, false jika tidak kosong} 6
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Q
Kamus/Deklarasi Pt : address Algoritma (First (L) = Nil) 4.2. Pembuatan sebuah elemen pada list linier Pembuatan sebuah list berarti membuat sebuat list KOSONG, yang selanjutnya siap diproses. Realisasi algoritmik dari defenisi funfsional ini adalah sebuah prosedur sebagai berikut. Procedure CreateList( Output L : List ) {K. Awal : Sembarang , K. Akhir : terbentuk list L yang kosong : First (L) diinisialisasi dengan NIL ) Proses : Membuat list kosong} Kamus/Deklarasi Algoritma First (L) ← Nil 4.3. Penyisipan sebuah elemen pada list linier Fungsi penyisipan harus dijabarkan lebih rinci. Hal ini karena elemen yang disisipkan bisa menjadi elemen pertama, setelah sebuah address P atau penyisipan menjadi elemen terakhir atau bahkan menjadi elemen ditengah. Penyisipan sebuah elemen dapat dilakukan terhadap sebuah elemen yang sudah dialokasi (diketahui address-nya ), atau sebuah elemen yang hanya diketahui nilai Info-nya (berarti belum dialokasi). 4.3.1.
Penyisipan address sebagai alemen pertama
Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list.
7
Q
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Procedure InsertFirst (Input/Output L:List, Input P: address) {K. Awal : List L mungkin kosong {K. Akhir : P adalah elemen pertama list L} {Proses
: Insert sebuah elemen beralamat P sebagai
elemen pertama
list linier L yang mungkin kosong} Kamus/Deklarasi Algoritma Next (P) ← First (L) First (L) ← P 4.3.2.
Menyisipkan elemen list berupa Nilai pada sebuah list
Menambahkan sebuah elemen yang diketahui nilainya sebagai elemen pertama list. Procedure InsFirst (Input/output L :List, Input E : infotype ) { K. Awal : List L mungkin kosong } { K. Akhir : Sebuah elemen dialokasikan dan menjadi elemen pertama list L, jika alokasi berhasil. Jika alokasi gagal list tetap seperti semula } { Proses
: Insert sebuah elemen sebagai elemen pertama list}
Kamus/Deklarasi P : address Algoritma Alokasi (P) If P ≠ Nil then Info (P) ← E 8
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Q
Next (P) ← First (L) First (L) ← P 4.3.3.
Menyisipkan setelah elemen list tertentu
Menyisihkan sebuah elemen beralamat P sebagai suksesor dari sebuah elemen list linier yang beralamat Prec Contoh kasus insert after dengan List tidak kosong seperti gambar di bawah. K-Awal
K-Akhir setelap Procedur InsertAfter dijalankan terhadap List di atas
9
Q
MODUL PERKULIAHAN PROGRAM STUDI – S1 TEKNIK INFORMATIKA FAKULTAS ILMU KOMPUTER Mata Kuliah : Algoritma & Struktur Data Dosen Pengampu : Mujiono Sadikin ST., MT., CISA
Procedure InsertAfter ( Input P, Prec: address ) {K. Awal : Prec adalah elemen list, prec ≠ Nil, P sudah dialokasikan, P ≠ Nil, Next (P) = Nil. K. Akhir : P menjadi suksesor Prec elemen beralamat P pada List linier L} Kamus/Deklarasi Algoritma Next (P) ← Next (Prec) Next (Prec) ← P
10
Proses
: Insert sebuah