• Tidak ada hasil yang ditemukan

IKG2A3/ Pemrograman Terstruktur 2

N/A
N/A
Protected

Academic year: 2021

Membagikan "IKG2A3/ Pemrograman Terstruktur 2"

Copied!
22
0
0

Teks penuh

(1)

IKG2A3/ Pemrograman Terstruktur 2

ZK Abdurahman Baizal

KK Algoritma dan Komputasi

Representasi Fisik List Linier

Representasi Fisik List Linier

(2)

Setelah representasi logic, perlu dilakukan represntasi fisik untuk implementasi

Representasi list linier secara "fisik", artinya

implementasi list linier dalam struktur data yang nantinya dapat ditangani oleh pemroses bahasa-bahasa pemrograman

(3)

Representasi fisik :

–Kontigu

 Keterurutan elemen list secara eksplisit, berdasarkan urutan

indeks tabel

 Implementasi : tabel

 Alokasi memory : statis (dalam C dan pascal)

–Berkait :

 Keterurutan elemen list secara implisit, perlu didefinisikan  Implementasi : tabel, pointer

 Alokasi memory : dinamis

(4)

Setiap elemen tabel mengandung informasi info, sedangkan informasi mengenai Next tidak perlu lagi disimpan secara eksplisit, karena secara

implisit sudah tersirat dalam struktur data yang menjadi tempat penyimpanannya

(5)

{List direpresentasi pada tabel secara kontigu}

Kamus :

constant IndexMin : integer = 1 constant IndexMax : integer = 100 constant Nil : integer = 0

type InfoType : ... {ElmType : terdefinisi } TabElmtList : array[IndexMin..IndexMax] of Info type address : integer [IndexMin..IndexMax,Nil] {Deklarasi nama untuk variabel kerja}

N : address

{alamat elemen terakhir. Karena field NEXT tidak ada secara eksplisit, maka satu-satunya jalan untuk mengenali elemen terakhir adalah dengan @-nya}

{Deklarasi alamat}

P : address {address untuk traversal}

{Maka First(L)..Last(L) adalah indeks efektif elemen tabel anggota list. Next(P) menjadi P ← P + 1, Next(P) tidak terdefinisi untuk P=N, Info(P) menjadi TabElmtList[P].Info}

(6)

Representasi Fisik List Linier BERKAIT dengan Pointer

Kamus :

{List direpresentasi dg pointer}

Address : ^ElmtList

type InfoType : ……….{terdefinisi}

type ElmtList : <Info: InfoType, Next: address> type List : <First: address>

{Deklarasi nama untuk variable keja}

P: address {address untuk traversal}

{Maka penulisan First(L) menjadi L.First Next(P) menjadi P^.Next

(7)

Representasi Fisik List Linier BERKAIT

dengan Pointer

procedure CreateNewElmt (input X: InfoType; output P: address)

{Mengalokasi sebuah tempat di memori untuk menyimpan X}

{I.S. Terdefinisi X}

{F.S. Telah dialokasi sebuah tempat di memori dengan alamat P, X telah ditempatkan di P} Kamus : Algoritma : new(P) P^.Info  X P^.Next  nil

(8)

Jika bahasa pemrograman tidak menyediakan struktur

pointer (dengan primitif Allocate, Free, Saturate), maka kita dapat melakukan implementasi fisik alamat dengan indeks tabel.

Representasi berkait pada dasarnya menggunakan alokasi memory dinamis. Dalam beberapa bahasa pemrograman, alokasi memory pada tabel adalah statis

Oleh karena itu kita harus mendefinisikan suatu tabel

GLOBAL, yang setiap elemennya adalah elemen list yang

diacu oleh alamat → supaya alokasi memory jadi dinamis

Representasi Fisik List Linier BERKAIT dengan tabel

(9)

Representasi Fisik List Linier BERKAIT dengan tabel

Kamus :

{List direpresentasi secara berkait dg tabel} type InfoType : ... { terdefinisi }

type ElmtList : <info: InfoType, Next: address > type Address : integer [IndeksMin..IndexMax, Nil] {TABEL MEMORI LIST, GLOBAL}

constant IndexMin : integer = 1 constant IndexMax : integer = 100 constant Nil : integer = 0

{Nil:address tak terdefinisi, di luar [IndexMin..IndexMax]} TabElmt : array[IndexMin..IndexMax] of ElmtList

FirstAvail : Address {alamat pertama list siap pakai} {Maka penulisan First(L) menjadi First

Next(P) menjadi TabElmtList[P].Next Info (P) menjadi TabElmtList[P].Info }

(10)

Representasi Fisik List Linier BERKAIT

dengan tabel

Kamus (lanjutan): procedure InitTab

{Inisialisasi tabel yang akan dipakai sebagai memori list}

procedure AllocTab (Output P : address) :

{Mengambil sebuah elemen siap pakai P pada awal list FirstAvail}

procedure DeAllocTab(Input P : address) :

(11)

Representasi Fisik List Linier BERKAIT dengan tabel

procedure InitTab

{Inisialisasi tabel yang akan dipakai sebagai memori list} {I.S. Sembarang}

{F.S. TabElmt[IndexMin..IndexMax] siap dipakai sebagai elemen list berkait, Elemen pertama yang available adalah

FirsAvail=1. Next[i]=i+1 untuk i [IndexMin..IndexMax-1], Next[IndexMax]=Nil} Kamus P: address Algoritma : P traversal [IndexMin..IndexMax-1] TabElmt[P.Next] ← P + 1 TabElmt[IndexMax].Next ← Nil FirstAvail ← IndexMin

(12)

Representasi Fisik List Linier BERKAIT dengan tabel

procedure AllocTab(Output P: address)

{Mengambil sebuah elemen siap pakai P pada awal list FirstAvail} {I.S. FirstAvail mungkin kosong}

{F.S. Jika FirstAvail tidak Nil, P adalah FirstAvail dan FirstAvail yang baru adalah Next[FirstAvail]

Jika FirstAvail =Nil, tuliskan pesan ‘Tidak tersedia lagi elemen siap pakai,P=Nil }

Kamus : Algoritma :

if (not MemFull) then

P ← TabElmt[FirstAvail]

FirstAvail ← TabElmt[FirstAvail].Next else

(13)

Representasi Fisik List Linier BERKAIT dengan tabel

procedure DeAllocTab(Input P: address)

{Mengembalikan sebuah elemen P pada awal list FirstAvail} {I.S. FirstAvail mungkin kosong. P ≠ Nil}

{F.S. FirstAvail = P}

Kamus : Algoritma :

TabElmtp.Next ← FirstAvail FirstAvail ← P

(14)

Ilustrasi dari urut-urutan pemanggilan dan status pemakaian memori list tersebut dapat dilihat pada gambar berikut

1 9 8 7 6 5 4 3 2 FirstAvail 1 9 8 7 6 5 4 3 2 FirstAvail FirstAvail First 2 1

(15)

Terdefinisi sebuah list L, mungkin kosong. Jika L tidak kosong elemen-elemen L unik, artinya tidak ada 2 atau lebih elemen yang sama. Akan

disisipkan sebuah info baru X ke dalam list L sebagai elemen terakhir jika pada L belum ada elemen dengan info X.

(16)

procedure InsertX1 (input/output L: List; input X: InfoType)

{I.S. Terdefinisi X dan L, mungkin kosong. Jika L tidak kosong, L terurut membesar berdasar info}

{F.S. Jika sebelumnya X belum ada di L maka X disisipkan menjadi di L sebagai elemen terakhir, L tetap terurut membesar berdasar info} Kamus P,Pt: address Algoritma : if IsEmpty(L) then CreateNewElement(X,P) InsertFirst(L,P) else Pt  L.First while (Pt^.info<>X)and(Pt^.next<>NIL) do Pt  Pt^. next {(Pt^.info=X) or (Pt^.next=NIL) }

(17)

Studi Kasus 1

procedure CreateNewElmt (input X: InfoType; output P: address)

{Mengalokasi sebuah tempat di memori untuk menyimpan X} {I.S. Terdefinisi X}

{F.S. Telah dialokasi sebuah tempat di memori dengan alamat P, X telah ditempatkan di P} Kamus : Algoritma : new(P) P^.Info  X P^.Next  nil

(18)

Terdefinisi sebuah list L, mungkin kosong. Jika L tidak kosong elemen-elemen L terurut membesar berdasar info. Akan disisipkan sebuah info baru X ke dalam list L. Setelah penyisipan X, list L tetap terurut membesar berdasarkan info

(19)

procedure InsertX2 (input/output L: List; input X: InfoType)

{I.S. Terdefinisi X dan L, mungkin kosong. Jika L tidak kosong, L terurut membesar berdasar info}

{F.S. X telah disisipkan di L, L tetap terurut membesar berdasar info}

Kamus Prec, Pt, P : address Algoritma : CreateNewElmt(X,P) if IsEmpty(L) then InsertFirst(L,P) else Prec  NIL Pt  L.First while (Pt^.info<=X)and(Pt^.next<>NIL) do Prec  Pt Pt  Pt^.next {(Pt^.info > X) or (Pt^.next=NIL) }

if Pt^.info<=X then {Pt Elemen terakhir} Insert-After(Pt,P) {P menjadi elemen terakhir} else

if Prec=NIL then {Pt Elemen pertama} InsertFirst(L,P) {P menjadi elemen pertama} else

(20)

Misal diketahui 2 list L1 dan L2 yang tidak terurut. Buatlah sebuah algoritma untuk membuat sebuah list baru L3 yang elemen-elemennya merupakan irisan dari elemen L1 dan L2 (Elemen L3 unik)

Misal diketahui 2 list L1 dan L2 yang tidak terurut. Buatlah sebuah algoritma untuk membuat sebuah list baru L3 yang elemen-elemennya merupakan union dari elemen L1 dan L2 (Elemen L3 unik)

(21)

Diktat Kuliah IF2181 Struktur Data, Inggriani Liem, ITB, 2003.

(22)

Gambar

Ilustrasi dari urut-urutan pemanggilan dan status pemakaian memori list tersebut dapat dilihat pada gambar berikut

Referensi

Dokumen terkait

Oleh karena itu simulasi pulse combustion menggunakan Computational Fluid Dynamics (CFD) dilakukan dalam penelitian ini dengan menganalisa pengaruh inlet pulse dan

Penelitian ini bertujuan untuk mengetahui konsumsi zat besi, zink, dan vitamin A pada anak 6-23 bulan, faktor yang berhubungan dengan konsumsi dan dampaknya pada

Untuk itu diperlukan suatu pengembangan sistem yang dimulai dari proses penetapan kebutuhan sistem, pemodelan sistem serta penetapan software yang akan digunakan, dengan harapan

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

Berbeda dengan logika digital biasa, jika logika biasa memiliki batas keanggotaan yang tegas, seperti ya- tidak atau high-low atau 1-0, pada logika fuzzy ini dapat mengeluarkan

Dengan menggunakan cara yang sama panjang maksimum partikel bergerak pada ESP jenis elektroda plat sejajar dapat dirumuskan,sehingga didapatkan persamaan pada saat

tidak penerapan sistem e-procurement di Kabupaten Bojonegoro dapat dilihat dari ukuran indikator tujuan yang tercantum pada Peraturan Presiden Nomor 54 Tahun 2010