• Tidak ada hasil yang ditemukan

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

N/A
N/A
Protected

Academic year: 2022

Membagikan "1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB"

Copied!
10
0
0

Teks penuh

(1)

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

(2)

 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

<Info : InfoType,

Next : Address >

type List = record <First : Address >

atau dapat juga type List = Address {Deklarasi Nama Peubah}

L : List P : Address

{ Dengan deklarasi seperti di atas maka:

(3)

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 }

(4)

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

(5)

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

(6)

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 then

Found ← 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}

(7)

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.

(8)

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

(9)

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

(10)

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 Proses : Insert sebuah elemen beralamat P pada List linier L}

Kamus/Deklarasi

Algoritma

Next (P) ← Next (Prec) Next (Prec) ← P

Referensi

Dokumen terkait

1) Jasa Akses Internet, maksudnya adalah penyedia jasa sebuah akses internet yang diberikan kepada masyarakat untuk digunakan dan diambil manfaatnya. 2) Alat

Otitis media akut dapat dise#a#kan invasi virus Campak ke dalam telin$a ten$a!% Gendan$ telin$a #iasana !peremia pada fase prodormal dan stadium erupsi% 4ika terjadi invasi

positi untuk (at bermuatan negati !anoda#. 3lektrolit dalam jam lemon bertenaga adalah asam sitrat. erakan elektron dimulai ketika lapisan seng pada salah satu paku

Pennasaiahan yang dibahas adalah mengenai cara untuk menganalisis pemicu biaya strategik dalam upaya pengendalian biaya pada badan usaha kertas &#34;KR&#34; di

Kelurahan yang memiliki perumahan penduduk terbanyak adalah Kelurahan Olak Kemang, sebanyak 712 bangunan, diikuti oleh Kelurahan Ulu Gedong 391 bangunan, Kelurahan

Sungai Lueng Putu yang melintasi pemukiman penduduk di Kecamatan Bandar Baru dan bermuara di garis pantai Kecamatan Bandar Baru Kabupaten Pidie Jaya.. Sumber : BPBD Kabupaten

Naiknya indeks yang diterima petani lebih dipengaruhi oleh peningkatan subkelompok padi sebesar 3,17 persen, sedangkan naiknya indeks yang dibayar dominan dipengaruhi oleh

Secara umum kecenderungan menunjukan bahwa setiap Kecamatan memiliki daya pengembangan yang cukup kuat bagi pembangunan di wilayah Bagian Timur Kabupaten Konawe