• Tidak ada hasil yang ditemukan

STRUKTUR DATA. Pengajar Jaidan Jauhari,, MT. Alamat Halaman 1

N/A
N/A
Protected

Academic year: 2021

Membagikan "STRUKTUR DATA. Pengajar Jaidan Jauhari,, MT. Alamat Halaman 1"

Copied!
132
0
0

Teks penuh

(1)

Halaman 1

STRUKTUR DATA

STRUKTUR DATA

Pengajar

Pengajar

Jaidan

Jaidan

Jauhari

Jauhari

, MT

, MT

Alamat

Alamat EmailEmail

jaidan_j@ilkom.unsri.ac.id

jaidan_j@ilkom.unsri.ac.id

jaidan_j@yahoo.com

jaidan_j@yahoo.com

Disarikan

Disarikan Dari Dari BerbagaiBerbagaiSumberSumber, , TerutamaTerutama Dari Diktat Dari Diktat StrukturStruktur Data Data InformatikaInformatika ITB

(2)

SILABUS MATERI KULIAH

SILABUS MATERI KULIAH

z Pengantar Struktur Data z Review Record dan Array z Stack (Tumpukan)

z Queue (Antrian)

z Linked List dan Variasi List z MultiList

z Pohon Biner z Graph

(3)

Halaman 3

BUKU SUMBER

BUKU SUMBER

1. Inggriani Liem. 1997. Diktat Kuliah Algoritma dan

Pemrograman Prosedural. Bandung : ITB

2. Inggriani Liem. 2003. Diktat Kuliah Struktur Data.

Bandung : ITB

3. Rinaldi Munir. 2003. Algoritma dan Pemrograman II.

Bandung : Penerbit Informatika

4. Bambang Wahyudi. 2004. Struktur Data dan Algoritma.

Yogyakarta : Andi Offset

5. Dwi Sanjaya. 2001. Bertualang dengan Struktur Data di

Planet Pascal. Yogyakarta : JJ Learning

6. P. Insap Santoso.1997. Struktur Data dengan Turbo

(4)

Komponen

Komponen PenilaianPenilaian

z Tugas 20%

z Ujian 1 20 % (Pertemuan ke-4) z Ujian 2 20% (Pertemuan ke-8) z Ujian 3 20% (Pertemuan ke-12) z Ujian Akhir Semester 20%

(5)

Halaman 5

Aturan

Aturan

dan

dan

Sanksi

Sanksi

-

-

sanksi

sanksi

z Kehadiran minimal 80%, kurang dari 80%

tidak lulus (mendapat nilai E)

z Keterlambatan maksimal 10 menit (Lebih dari 10 menit tidak

diijinkan memasuki ruangan)

z Pengumpulan Tugas yang melebihi waktu yang telah ditentukan

akan diberikan nilai nol

z Kecurangan dalam bentuk apapun akan mendapatkan nilai E

z Mahasiswa berpakaian rapi dan sopan, yang ditunjukkan antara lain

1. Memakai sepatu tertutup 2. Memakai baju berkerah

3. Tidak memakai aksesoris yang tidak diijinkan

4. Tidak memakai pakaian yang kurang dasar atau lebih dasar 5. dan lain-lain

z Selama perkuliahan berlangsung mahasiswa tidak diijinkan

meninggalkan ruang kuliah kecuali sangat terpaksa dan itupun harus membuat surat ijin dan hanya boleh satu kali

(6)

PENGERTIAN STRUKTUR DATA

PENGERTIAN STRUKTUR DATA

Struktur data adalah cara menyimpan atau

merepresentasikan data di dalam komputer agar bisa dipakai secara efisien

Sedangkan data adalah representasi dari fakta dunia nyata.

Fakta atau keterangan tentang kenyataan yang

disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau

(7)

Halaman 7

Secara garis besar type data dapat dikategorikan menjadi :

1. Type data sederhana

a. Type data sederhana tunggal, misalnya Integer, real, boolean dan karakter

b. Type data sederhana majemuk, misalnya String

2. Struktur Data, meliputi

a. Struktur data sederhana, misalnya array dan record

(8)

b. Struktur data majemuk, yang terdiri dari

Linier : Stack, Queue, serta List dan Multilist

Non Linier : Pohon Biner dan Graph

Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat,

sehingga menjadikan program secara

(9)

Halaman 9

Struktur data yang ″standar″ yang biasanya digunakan dibidang informatika adalah :

z List linier (Linked List) dan variasinya z Multilist

z Stack (Tumpukan) z Queue (Antrian) z Tree ( Pohon ) z Graph ( Graf )

(10)

REVIEW RECORD (REKAMAN)

REVIEW RECORD (REKAMAN)

Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.

Rekaman disebut juga tipe terstruktur. Contoh :

1. type Titik : record <x : real, y : real>

jika P dideklarasikan sebagai Titik maka mengacu field pada P adalah P.x dan P.y.

(11)

Halaman 11

2. Didefinisikan tipe terstruktur yang mewakili Jam yang dinyatakan sebagai jam (hh), menit (mm) dan detik (ss), maka cara menulis type Jam adalah :

type JAM : record

<hh : integer, {0…23} mm : integer, {0…59}

ss : integer {0…59}

>

Jika J adalah peubah (variabel) bertipe Jam

maka cara mengacu tiap field adalah J.hh, J.mm dan J.ss

(12)

Terjemahan dalam bahasa C :

1. type Titik : record <x : real, y : real> diterjemahkan menjadi :

typedef struct { float x; float y; } Titik; 2. type JAM : record

<hh : integer, {0…23} mm : integer, {0…59} ss : integer {0…59} > Diterjemahkan menjadi : typedef struct { int hh; /*0…23*/ int mm; /*0…59*/ int ss; /*0…59*/

(13)

Halaman 13

REVIEW ARRAY (LARIK)

REVIEW ARRAY (LARIK)

1. Pendahuluan

z Larik adalah struktur data statik yang

menyimpan sekumpulan elemen yang bertipe sama.

z Setiap elemen diakses langsung melalui

indeksnya.

z Indeks larik harus tipe data yang menyatakan

(14)

z Banyaknya elemen larik harus sudah diketahui

sebelum program dieksekusi.

z Tipe elemen larik dapat berupa tipe sederhana,

tipe terstruktur atau tipe larik lain.

(15)

Halaman 15

Cara Pendefinisian Array 1. Sebagai Peubah

Contoh :

L : array[1..50] of integer

NamaMhs : array[‘a’..’j’] of string 2. Sebagai tipe baru

Contoh :

type LarikInt : array[1..100] of integer P : LarikInt

(16)

3. Mendefinisikan ukuran maksimum elemen larik sebagai konstanta

Contoh :

Const Nmaks = 100

type Larikint : array[1..Nmaks] of integer P : LarikInt

Cara menterjemahkan ke bahasa C :

#define Nmaks 100

typedef int Larikint[Nmaks+1]; Larikint P;

(17)

Halaman 17

Cara Mengacu Elemen Larik

z Elemen larik diacu melalui indeksnya.

Nilai indek harus terdefinisi.

z Contoh cara mengacu elemen larik adalah :

L[4] {mengacu elemen keempat dari larik L }

NamaMhs[‘b’] {mengacu elemen kedua dari larik NamaMhs}

P[k] {mengacu elemen ke-k dari larik P, asalkan nilai k sudah terdefinisi }

(18)

Menginisialisasi Larik

z menginisialisasi elemen larik adalah memberikan harga awal untuk seluruh elemen larik, misalnya menginisialisasi dengan nilai 0 seperti di bawah ini :

Procedure InisDgn0(output A:larik, input N:integer)

{menginisialisasi setiap elemen larik A[1..N] dengan nol} {K. Awal : N adalah banyak elemen efektif larik,

nilainya terdefinisi}

{K. Akhir : seluruh elemen larik A bernilai nol}

Deklarasi : K : integer Deskripsi : for k Å 1 to N do A[k] Å 0 endfor

(19)

Halaman 19

Mengisi elemen larik dari piranti masukan

z Elemen larik dapat diisi dengan nilai yang dibaca dari piranti masukan seperti contoh di bawah ini :

Procedure BacaLarik(output A:larik, input N:integer)

{mengisi elemen larik A[1..N] dengan nilai yang dibaca dari piranti masukan}

{K. Awal : N adalah jumlah elemen efektif larik, nilainya terdefinisi}

{K. Akhir : seluruh elemen larik A berisi nilai-nilai yang dibaca dari piranti masukan} Deklarasi : K : integer Deskripsi : for k Å 1 to N do read (A[k]) endfor

(20)

Larik Bertype Terstruktur

Larik tidak hanya dapat berisi data bertype tunggal, tapi dapat juga berisi data yang bertipe

terstruktur Contoh :

const Nmaks = 100

type Mahasiswa : record <nim : integer,

nama_mhs : string, KodeMK : string, Nilai : char >

(21)

Halaman 21

Contoh Cara mengacu elemen TabMhs : 1. TabMhs[2].Nim

mengacu field Nim dari elemen kedua larik

2. Write(TabMhs[k].KodeMK)

menuliskan field KodeMK dari elemen ke k dari larik

(22)

Tugas

Tugas

1

1

Buatlah dalam notasi algoritma atau bahasa C :

1.Definisikan sebuah type terstruktur untuk

menyatakan data nasabah disebuah bank. Data nasabah terdiri atas field Nomor Account, Nama Nasabah, Alamat Nasabah, Kota Nasabah, dan Nomor Telpon Nasabah.

(23)

Halaman 23

2.Dari soal nomor 1 buatlah program dalam bahasa pemrograman berbasis bahasa C, untuk memasukkan data nasabah sebanyak N, dengan N diinputkan dari papan ketik, kemudian menuliskan kembali semua data nasabah dalam bentuk matrik.

Petunjuk :

Gunakan notasi pengulangan untuk menyelesaikan permasalahan tersebut Tugas dikumpulkan pada pertemuan berikutnya disertai listing program dan contoh keluarannya

(24)

ADT (Abstract Data Type)

ADT (Abstract Data Type)

z ADT adalah definisi type dan sekumpulan

primitif (operasi dasar) terhadap type tersebut.

z Type diterjemahkan menjadi type terdefinisi

dalam bahasa pemrograman yang

bersangkutan, misalnya menjadi record dalam Pascal/Ada dan Struct dalam bahasa C

(25)

Halaman 25

Primitif dalam konteks pemrograman

prosedural, diterjemahkan menjadi fungsi dan prosedur.

Primitif dikelompokkan menjadi :

1. Konstruktor/Kreator, pembentuk nilai type. Biasanya namanya diawali dengan Make.

2. Selektor, untuk mengakses komponen type. Biasanya namanya diawali dengan

(26)

3. Prosedur Pengubah nilai komponen 4. Validator komponen type, yang

dipakai untuk mengetes apakah dapat membentuk type sesuai batasan.

5. Destruktor/Dealokator, yaitu untuk

menghancurkan nilai objek, sekaligus memori penyimpannya

6. Baca/tulis, untuk interface dengan

(27)

Halaman 27

7. Operator Relasional terhadap type tersebut untuk mendefinisikan lebih besar, lebih kecil, sama dengan dan sebagainya.

8. Aritmatika terhadap type tersebut, dalam pemrograman biasanya hanya terdefinisi untuk bilangan numerik.

9. Konversi dari type tersebut ke type dasar dan sebaliknya

(28)

ADT biasanya diimplementasi menjadi dua buah modul, yaitu :

1. Definisi/spesifikasi type dan primitif

- Spesifikasi type sesuai dengan bahasa yang dipakai

- Spesifikasi dari primitif sesuai dengan kaidah dalam konteks prosedural, yaitu :

a. Fungsi : nama, domain, range, dan pre kondisi jika ada

b. Prosedur : Keadaan Awal, Keadaan Akhir dan proses yang dilakukan

2. Body/realisasi dari primitif, berupa kode program dalam bahasa yang bersangkutan. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan Selektor dan

(29)

Halaman 29

4. Linked List (List Linier)

4. Linked List (List Linier)

4.1. Definisi

List linier adalah sekumpulan elemen

bertype sama, yang mempunyai

keterurutan tertentu, yang setiap

elemennya terdiri dari 2 bagian :

Type Elmtlist = record

< Info : InfoType,

Next : address >

(30)

Dengan Info Type adalah sebuah type

terdefenisi yang menyimpan informasi

sebuah elemen list ; Next adalah address

dari elemen berikutnya ( suksesor ).

Dengan demikian, jika didefinisikan First

adalah alamt elemen pertama list, maka

elemen berikutnya dapat diakses secara

suksesif dari elemen pertama tersebut

(31)

Halaman 31

Jadi, sebuah list linier dikenali :

z elemen pertamanya, biasanya melalui alamat

elemen pertama yang disebut : First

z alamat elemen berikutnya ( suksesor ), jika

kita mengetahui alamat sebuah elemen , yang dapat diakses melalui field NEXT

z 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 .

z elemen terakhirnya. Ada berbagai cara untuk

(32)

Jika L adalah list , dan P adalah address :

Alamat elemen pertama list L dapat diacu

dengan notasi :

First (L)

Elemen yang diacu oleh P dapat dikonsultasi

informasinya dengan notasi :

Info(P)

Next(P)

(33)

Halaman 33

Beberapa defenisi :

1. List L adalah List kosong , jika First (L) = Nil 2. Elemen terakhir dikenali, dengan salah satu

(34)

II. Skema traversal 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.

(35)

Halaman 35

Karena Urutan akses adalah dari elemen

pertama sampai dengan elemen

terakhir,

maka traversal list secara

natural dilakukan dari elemen pertama,

suksesornya, dan seterusnya sampai

(36)

Skema traversal yang dipakai adalah Sbb :

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

(37)

Halaman 37

Deklarasi :

P : address { address untuk traversal , type

terdefenisi }

Deskripsi : Inisialisasi

P ← First ( L ) { First Element } While ( P ≠Nil ) do

Proses ( P )

P ← Next ( P ) { Next element } endwhile

(38)

Procedure SKEMAListTransversal 2( Input L : List ) { K. Awal : List L terdefenisi , mungkin kosong } { K. Akhir : semua elemen list L “dikunjungan “

dan telah diproses }

{ Proses : Transversal sebuah list linier yang

diidentifikasi oleh elemen pertama L , Dengan MARK dan pemrosesan

khusus pada list kosong } Deklarasi :

(39)

Halaman 39

Deklarasi

P : address { address untuk traversal , type

terdefenisi }

Deskripsi

If (First ( L ) = Nil) then

Write ( ‘List kosong ‘ )

else

(40)

Insialisasi

P ← First ( L ) { First Element }

Repeat

Proses ( P )

P ← Next ( P ) { Next element }

until P=Nil Terminasi

(41)

Halaman 41

III. 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, atau berdasarkan alamat.

III.1. Search suatu Nilai, output adalah address

Search ini sering dipakai 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.

(42)

Procedure SKEMAListSearch1 ( Input L : List, X : InfoType, Output P :

address, Found: Boolean )

{ K. Awal : List linier L sudah terdefinisi dan siap dikonsultasi, X terdefenisi }

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

(43)

Halaman 43

{Proses : Sequential Search harga X pada sebuah list linier L, Semua elemen diperiksa

dengan intruksi yang sama, versi

dengan Boolean}

Deklarasi Deskripsi

(44)

P ← First ( L ) Found ← false

While ( P ≠ Nil ) and ( not found ) do if X = Info (P) then

Found ←True else

P ← Next (P) endif

endwhile { P = Nil or Found}

(45)

Halaman 45

III. 2. Search suatu Elemen yang

beralamat tertentu

Procedure SKEMAList Search@( Input L : List, P : address, 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 @ P pada sebuah list linier L, Semua elemen diperiksa dengan intruksi yang sama }

(46)

Deklarasi

Pt : address

Deskripsi

Pt ← First ( L ) Found ← false

While ( Pt ≠ Nil ) and ( not found ) do if Pt = P then

Found ← true else

Pt ← Next (Pt) endif

(47)

Halaman 47

IV. Definisi fungsional list linier dan

algoritmanya

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

(48)

IV. 1. Pengetesan List Kosong

Pemeriksaan apakah sebuah list kosong sangat penting, karena Keadaan Awal dan

Keadaan Akhir beberapa prosedur harus didefinisikan berdasarkan keadaan list.

Operasi pada list kosong sering kali membutuhkan penanganan khusus

Realisasi algoritmik dari definisi fungsional ini adalah sebuah fungsi sebagai berikut.

(49)

Halaman 49

Function IsEmptyList (L : List ) → boolean

{ Test apakah sebuah list L kosong,

Mengirimkan true jika list kosong, false

jika tidak kosong}

Deklarasi

Deskripsi

(50)

IV.2 Pembuatan sebuah elemen pada

list linier

Pembuatan sebuah list berarti membuat

sebuat list KOSONG, yang selanjutnya

siap diproses (ditambah elemennya,

dsb). Realisasi algoritmik dari

defenisi funfsional ini adalah sebuah

prosedur sebagai berikut.

(51)

Halaman 51

Procedure CreateList( Output L : List ) {K. Awal : Sembarang }

K. Akhir : terbentuk list L yang kosong : First (L) diinisialisasi dengan NIL )

Proses : Membuat list kosong}

Deklarasi

Deskripsi

(52)

IV. 3 Penyisipan sebuah elemen

pada list linier

Fungsi insert (penyisipan) harus dijabarkan lebih rinci, karena dapat menjadi penyisipan sebagai 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

(53)

Halaman 53 IV. 2.1. INSERT-First (Address)

Menambahkan sebuah elemen yang diketahui alamatnya sebagai elemen pertama list.

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}

Deklarasi Deskripsi

Next (P) ← First (L) First (L) ← P

(54)

IV.2.2 INSERT-First (Nilai)

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}

Deklarasi P : address Deskripsi Alokasi (P) If P ≠ Nil then Info (P) ← E

(55)

Halaman 55 IV.2.2. INSERT-AFTER

Menyisipkan sebuah elemen beralamat P sebagai

suksesor dari sebuah elemen list linier yang beralamat Prec

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}

Deklarasi Deskripsi

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

(56)

IV. 2.3. INSERT – Last

Menyisipkan sebuah elemen beralamat P sebagai elemen terakhir sebuah list linier. Ada dua kemungkinan list kosong atau tidak kosong

Procedur InsertLast@(Input/Output L: List, Input P : address)

{K. Awal : List L mungkin kosong, P sudah dialokasi, P ≠ Nil, Next (P) = Nil

K. Akhir : P adalah elemen terakhir list L

(57)

Halaman 57 Deklarasi

Last : address { address untuk traversal}

Deskripsi

If Fisrt (L) = Nil then { insert sebagai elemen pertama} InsertFirst(L, P)

Else

{ Traversal list sampai address terakhir} Last ← First (L)

While (Next (Last ) ≠ Nil ) do Last ← Next (Last )

endwhile {Next ( Last) = Nil, Last adalah elemen terakhir; insert P after last }

InsertAfter (P, Last) endif

(58)

Procedure InsertLast(Input/output L :List, Input E : Infotype)

{ K. Awal : List L mungkin kosong, P sudah dialokasi, P ≠ Nil, Next(P)=Nil

K. Akhir : P adalah elemen terakhir list L

Proses : Insert sebuah elemen beralamat P sebagai

elemen terakhir dari list linier L yang mungkin kosong }

Deklarasi

Last : address { address untuk traversal }

Deskripsi

Alokasi (P)

If (P ≠ Nil) then Info(P) ←E

(59)

Halaman 59

IV.3. Penghapusan sebuah elemen pada list linier

Penghapusan harus dijabarkan lebih rinci, Karena penghapusan elemen dapat merupakan

pertama, setelah sebuah address P atau

penghapusan elemen terakhir. Perbedaan ini melehirkan 3 operasi dasar penghapusan

elemen list yang diturunkan dari definisi fungsional inimenjadi realisasi algoritma. Operasi penghapusan dapat mengakibatkan list

kosong, jika list semula hanya terdiri dari satu elemen.

(60)

IV.3.1. DELETFirst : menghapus elemen pertama list linier

a. Elemen yang dihapus dicatat alamatnya

Procedure DeleteFirst@ (Input/Output L : List, Output P : address)

{K. Awal : List L tidak kosong, minimal 1 elemen pertama pasti ada }

{K. Akhir : menghapus elemen pertama L

P adalah @ elemen pertama L sebelum

penghapusan, L yang baru adalah Next (L)

Deklarasi Deskripsi

(61)

Halaman 61

Procedure DeleteFirst (Input/Output L : List, Output E : InfoType)

{K. Awal : List L tidak kosong, minimal 1 elemen pertama pasti ada }

{K. Akhir : menghapus elemen pertama L

E adalah Nilai elemen pertama L sebelum penghapusan, L yang baru adalah Next (L)

Deklarasi Deskripsi

P ← First (L) E ← Info (P)

First (L) ← Next ( First (L) ) Dealokasi (P)

(62)

IV. 3.2. Delete After :

Penghapusan suksesor sebuah elemen :

Procedure DeleteAfter ( Input Prec : adrress, Output P : address )

{ K. Awal : List tidak kosong, Prec adalah elemen list , Next (Prec) ≠ Nil } Prec ≠elemen terakhir K. Akhir : Menghapus suksesor Prec, P adalah @

suksesor Prec sebelum penghapusan, Next (Prec) yang baru adalah suksesor dari

suksesor Prec sebelum penghapusan }

Deklarasi Deskripsi

(63)

Halaman 63

Dengan primitip ini, maka penghapusan sebuah beralamat P dapat dilakukan dengan : mencari predesesor dari P, yaitu alamat Prec memakai DeleteAfter (Prec)

Procedure DeleteP ( Input/Output L ; List, Output P : address )

{ K. Awal : List L tidak kosong , P adalah elemen list L K. Akhir : Menghapus P dari list, P mungkin

elemen pertama, “tengah” atau terakhir }

Deklarasi

Prec : address { alamat predesesor }

(64)

{ Cari predesesor P }

if (P = First (L) then {Delete list dengan satu elemen }

DeleteFirst (L,P) else

Prec ← First (L)

While (Next(Prec) ≠ P ) do Prec ← Next (Prec)

endwhile { Next (Prec) = P , hapus P } DeleteAfter (Prec , P)

(65)

Halaman 65 IV. 3.3. DELETELast :

Menghapus elemen terakhir list dapat dilakukan jika alamat dari elemen sebelum elemen terakhir

diketahui. Persoalan selanjutnya menjadi persoalan DeleteAfter, kalau last bukan satu- satunya elemen list linier. Ada dua kasus, yaitu list menjadi kosong atau tidak.

Procedure DeleteLast (Input L : List, Output P : address)

{K. Awal : List L tidak kosong, minimal mengandung 1 elemen

K. Akhir : menghapus elemen terakhir dari list, list mungkin menjadi kosong

Proses : P adalah alamat elemen terakhir list sebelum penghapusan }

(66)

Deklarasi

Last , preclast :address { address untuk traversal }

Deskripsi

{ Find last dan address sebelum last } Last ← First (L)

Preclast ← Nil { predesesor dari L tak terdefenisi } While ( Next ( Last ) ≠ Nil do { Traversal list sampai @ terakhir }

Preclast ← Last ; Last ← Next ( last )

endwhile { Next ( Last ) = Nil, Last adalah elemen terakhir; preclast = sebelum last }

P ← Last

If Preclast = Nil then { list dg 1 elemen, jadi kosong } First(L) ← Nil

(67)

Halaman 67

IV. 5. Konkatenasi dua buah list linier

Concat adalah menggabungkan dua list. Dalam contoh berikut list kedua disambungkan ke list pertama. Jadi Last (L1) menjadi predesesor First (L2). Realisasi

algoritma adalah sebuah prosedur sebagai berikut :

Procedure CONCAT (Input L1, L2 : List, Output : L3 : List )

{K. awal : L1 ≠ L2, L1 ≠ L3,dan L3 ≠ L2; L1, L2 mungkin kosong

K. Akhir : L3 adalah hasil konkatenasi (menyambung) dua buah list linier, L2 ditaruh dibelakang L1 }

(68)

Deklarasi

Last1 : address { alamat elemen terakhir list pertama }

Deskripsi

Cratelist (L3) {inisialisasi list hasil } If Fist (L1) = Nil then

First (L3) ← First (L2)

Else { Traversal list 1 sampai address terakhir, Hubungkan last dengan Fisrt 2}

First (L3) ← First (L1) Last1 ← First (L1)

While ( Next (Last 1 ) ≠ Nil ) do Last1 ← Next (Last 1)

endwhile {Next ( Last 1) ← First (L2)} Next(Last1) ← First (L2)}

(69)

Halaman 69

Bagian Deklarasi dari algoritma pada List Linier : Deklarasi

type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtL

type ElmtL = record

<Info : InfoType, Next : Address >

type List = record <First : Address > {Deklarasi Nama Peubah}

L : List

(70)

Soal

Soal

-

-

Soal

Soal

Latihan

Latihan

I. Apakah perbedaan struktur data list linier ditinjau dari sudut pandang operasinya, jika dibandingkan dengan struktur data stack

dan queue?

II. Untuk data yang bagaimanakah yang dapat direpresentasikan dengan menggunakan

struktur data list linier?

III. Diketahui sebuah list linier dengan elemen bertipe integer, buatlah :

1. Sebuah prosedur untuk menghitung jumlah elemen list yang genap

(71)

Halaman 71

3. Prosedur untuk menghitung banyaknya elemen list yang positif (lebih besar dari nol)

4. Prosedur untuk mencetak elemen list yang genap

IV. Diketahui sebuah list dengan elemen bertype integer terurut membesar, buatlah :

1. Fungsi untuk mengirimkan elemen pertama list

2. Fungsi untuk mencari elemen list yang minimum

3. Fungsi untuk menghitung banyaknya elemen yang lebih besar dari 100

(72)

5. Stack (

5. Stack (

Tumpukan

Tumpukan

)

)

5.1. Definisi

STACK (Tumpukan) adalah list linier yang : 1. Dikenali elemen puncaknya (TOP)

2. Aturan penyisipan dan penghapusan elemennya tertentu :

(73)

Halaman 73

Karena aturan penyisipan dan penghapusan semacam itu, TOP adalah satu-satunya alamat tempat terjadi

operasi. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus.Dikatakan

bahwa elemen Stack akan tersusun secara LIFO (Last In First Out).

Maka secara lojik, sebuah STACK dapat

digambarkan sebagai list linier yang setiap elemennya adalah

Type ElmtS = record

<Info : InfoType, Next : address >

(74)

dengan InfoType terdefinisi yang menentukan informasi yang disimpan pada setiap

elemen stack, dan address adalah “alamat” dari elemen

Selain itu alamat elemen terbaru (TOP) dicatat, sedangkan alamat elemen yang paling

“bawah”, yaitu yang paling lama biasanya diebut BOTTOM.

TOP adalah elemen pertama list, supaya

(75)

Halaman 75

Sehingga jika S adalah sebuah Stack, dan P adalah address maka

¾ Top (S) adalah alamat elemen TOP, dimana

operasi penyisipan/penghapusan dilakukan.

¾ Info (P) adalah informasi yang disimpan pada

alamat P

¾ Next (P) adalah alamat suksesor P

¾ ElmtS (P) adalah sebuah elemen stack yang

beralamat P

¾ Stack kosong adalah Stack dengan Top (S) =

(76)

Bagian Deklarasi dari algoritma pada Stack : Deklarasi

type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtS

type ElmtS = record

<Info : InfoType, Next : Address >

type Stack = record <TOP : Address> {Deklarasi Nama Peubah}

(77)

Halaman 77

Pada stack, jarang sekali dilakukan

traversal, karena keunikan Stack justru

pada operasi yang hanya menyangkut

elemen TOP. Namun dibutuhkan

traversal misalnya untuk mencetak isi

Stack.

5.3. Search pada Stack

Pada stack, elemen yang diproses hanyalah

elemen pada TOP. Maka hampir tidak pernah dilakukan search.

5.2. Traversal

(78)

5.4.

5.4.

Operasi

Operasi

dan

dan

fungsi

fungsi

dasar

dasar

pada

pada

STACK.

STACK.

a. Test STACK kosong

Mengetahui bahwa stack kosong atau

tidak sangat penting, sebab semua operasi akan dilakukan berdasarkan kosong atau tidaknya suatu Stack. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang melakukan test terhadap Stack

(79)

Halaman 79

function StackEmpty (S : STACK) →

Boolean

{ TEST stack kosong : Mengirim true, jika

tumpukan kosong, false jika tumpukan tidak kosong}

Deklarasi Deskripsi

(80)

b. Pembuatan STACK kosong

Membuat Stack kosong diperlukan untuk memulai memakai stack. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang

melakukan inisialisasi stack sebagai berikut

Procedure CreateEmptyS (Output S : STACK)

{K. Awal : sembarang,

K. Akhir : sebuah stack S yang kosong siap dipakai terdefinisi

Proses : Membuat stack kosong }

Deklarasi Deskripsi

(81)

Halaman 81

c.Penambahan sebuah elemen pada

STACK (Push)

Penambahan selalu dilakukan pada TOP, dan karena alamat TOP diketahui maka prosesnya sederhana. Berikut ini akan diberikan skema

prosedur penyisipan tersebut. Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur yang melakukan penambahan elemen stack sebagai berikut. Prosedur pertama menambahkan suatu ElmtS yang diketahui

alamatnya dan yang kedua menambahkan suatu nilai ElmtS yang diberikan.

(82)

procedure Push@ (Input/Output S : STACK Input P : address)

{Menambahkan sebuah elemen baru pada TOP sebuah stack, dengan elemen yang diketahui alamatnya}

{K.Awal : Stack mungkin kosong, P terdefinisi (berarti terdefinisi informasinya, Next (P) = Nil}

{K.Akhir : Top (S) adalah P}

Deklarasi Deskripsi

{ insert sebagai elemen pertama } Next (P) ← TOP (S)

(83)

Halaman 83

procedure Push( Input / Output S:STACK Input E: InfoType ) { Menambahkan sebuah elemen baru pada TOP sebuah stack,

dengan elemen yang diketahui informasinya }

{ K. Awal : Stack mungkin kosong , E terdefenisi , alokasi alamat selalu berhasil }

{ K. Akhir : TOP (S) berisi E )

Deklarasi

P : address

Deskripsi

Alokasi ( P ) { alokasi selau berhasil } Info(P) ← E

{ insert sebagai elemen pertama } Next(P) ← TOP(S)

(84)

d. Penghapusan sebuah elemen pada STACK (Pop)

Penghapusan elemen Stack selalu dilakukan pada TOP , hanya saja harus diperhitungkan bahwa mugkin Stack akan menjadi kosong akibat

terjadinya penghapusan. Jika Stack menjadi

kosong , maka harga TOP harus diganti . Realisasi algoritma dari definisi funsional ini adalah salah satu dari dua buah prosedur yang melakukan pengambilan elemen stack sebagai berikut .

Prosedur pertama mengambil suatu Elmts dengan menyimpan alamatnya dan yang kedua mengambil nilai , dan membebaskan alamat ( dealokasi ) yang

(85)

Halaman 85 procedure PopStack@(Input/Output S : STACK

Output P : address)

{K.Awal : Stack tidak kosong

K.Akhir : Alamat elemen Top (S) disimpan pada P, sehingga informasinya dapat diakses melalui P

Proses : Menghapus elemen stack, stack tidak boleh kosong dan mungkin menjadi kosong }

Deklarasi Deskripsi

P ← TOP (S)

(86)

procedure PopStack(Input/Output S : STACK Output E : InfoType)

{K.Awal : Stack tidak kosong

K.Akhir : Alamat elemen Top (S) disimpan pada E, alamat TOP yang lama didealokasi

Proses : Menghapus elemen stack, stack tidak boleh kosong dan mungkin menjadi kosong }

Deklarasi P : address Deskripsi P ← TOP (S) E ← Info(P) TOP (S) ← Next(TOP(S))

(87)

Halaman 87

Soal

Soal

-

-

Soal

Soal

Latihan

Latihan

1. Mengapa cara penyusunan elemen pada Stack sering disebut tersusun secara

LIFO?

2. Mengapa pada Stack Traversal dan Search jarang dilakukan?

3. Penghapusan elemen pada Stack selalu dilakukan pada elemen yang paling atas, bagaimana jika terpaksa harus menghapus elemen yang paling bawah?

(88)

4. Buatlah sebuah fungsi untuk menghitung jumlah elemen stack yang genap, jika diketahui sebuah stack dengan elemen bertype integer.

5. Buatlah fungsi/prosedur untuk mencetak elemen stack yang ganjil

6. Buatlah juga fungsi untuk menghitung rata-rata elemen Stack yang genap

7. Buatlah sebuah fungsi untuk mengirimkan elemen pertama Stack

8. Buatlah sebuah fungsi untuk mengirimkan elemen Stack yang maksimum jika diketahui

(89)

Halaman 89

6. Queue (

6. Queue (

Antrian

Antrian

)

)

6.1. Definisi

Queue (Antrian) adalah list linier yang :

1. Dikenali elemen pertama (Head) dan elemen terakhirnya (Tail)

2. Aturan penyisipan dan penghapusan elemennya disefinisikan sebagai berikut :

- Penyisipan selalu dilakukan setelah elemen terakhir

- Penghapusan selalu dilakukan pada elemen pertama

3. Satu elemen dengan elemen lain dapat diakses melalui informasi Next

(90)

Struktur data ini banyak dipakai dalam informatika misalnya untuk merepresentasi :

1. Antrian job dalam sistem operasi 2. Antrian dalam dunia nyata

Maka secara lojik, sebuah Queue dapat

digambarkan sebagai list linier yang setiap elemennya adalah :

Type ElmtQ = record

<Info : InfoType, Next : address >

(91)

Halaman 91

dengan InfoType terdefinisi yang menentukan

informasi yang disimpan pada setiap elemen queue, dan address adalah “alamat” dari

elemen

Selain itu alamat elemen Pertama (Head) dan elemen terakhir (Tail) dicatat.

Maka jika Q adalah Queue dan P adalah Address, penulisan untuk Queue adalah :

Head(Q) Tail(Q) Next(P) Info(P)

(92)

Bagian Deklarasi dari algoritma pada Queue : Deklarasi

type InfoType = … {Sebuah type terdefinisi} type Address pointer to ElmtQ

type ElmtQ = record

<Info : InfoType, Next : Address >

type Queue = record <Head : Address, Tail : Address> {Deklarasi Nama Peubah}

(93)

Halaman 93

Pada queue, jarang sekali dilakukan

traversal, karena keunikan Queue justru

pada operasi yang hanya menyangkut

elemen pertama dan terakhir. Namun

dibutuhkan traversal misalnya untuk

mencetak isi Antrian.

6.3. Search pada Queue

Pada Queue, elemen yang diproses hanyalah elemen pada pertama dan terakhir. Maka hampir tidak pernah dilakukan search.

6.2. Traversal

(94)

6.4.

6.4.

Operasi

Operasi

dan

dan

fungsi

fungsi

dasar

dasar

pada

pada

Queue.

Queue.

a. Test Queue kosong

Mengetahui bahwa Queue kosong atau tidak sangat penting, sebab semua operasi akan

dilakukan berdasarkan kosong atau tidaknya suatu Queue. Realisasi algoritma dari definisi fungsional ini adalah sebuah fungsi yang

melakukan test terhadap Queue sebagai berikut :

(95)

Halaman 95

function IsQEmpty (Q : Queue) → Boolean

{ TEST Queue kosong : Mengirim true, jika antrian kosong, false jika antrian tidak

kosong} Deklarasi Deskripsi

(96)

b. Pembuatan Queue kosong

Membuat Queue kosong diperlukan untuk memulai memakai Queue. Realisasi algoritma dari definisi fungsional ini adalah sebuah prosedur yang

melakukan inisialisasi Queue sebagai berikut :

Procedure CreateEmptyQ (Output Q : Queue)

{K. Awal : sembarang,

K. Akhir : sebuah queue Q yang kosong terbentuk Proses : Membuat queue kosong }

Deklarasi Deskripsi

(97)

Halaman 97

c.Penambahan sebuah elemen pada

Queue

Penambahan selalu dilakukan pada ekor, dan karena alamat ekor diketahui maka prosesnya sederhana, yaitu hanya

InsertLast.

Berikut ini akan diberikan skema prosedur penyisipan tersebut.

(98)

Realisasi algoritma dari definisi fungsional ini adalah salah satu dari dua buah prosedur yang melakukan penambahan elemen

Queue sebagai berikut :

Prosedur pertama menambahkan suatu

Elemen Queue yang diketahui alamatnya dan yang kedua menambahkan suatu nilai Elemen queue yang diberikan.

(99)

Halaman 99

procedure InsertQ@ (Input/Output Q : Queue

Input P : address)

{K.Awal : Queue mungkin kosong, P terdefinisi (berarti terdefinisi informasinya, Next (P) = Nil

K.Akhir : P menjadi elemen Tail dari Q dan Tail yang baru adalah P

Proses : Insert sebuah elemen beralamat P pada Tail dari antrian Q }

(100)

Deskripsi

If IsQEmpty(Q) then

Head(Q) ← P

Tail(Q) ← P

else

Next(Tail(Q)) ← P

Tail(Q) ← P

endif

(101)

Halaman 101

procedure InsertQ(Input/Output Q : Queue

Input E : InfoType)

{K.Awal : Queue mungkin kosong, E

terdefinisi

K.Akhir : Elemen Tail dari Q yang baru

bernilai E

Proses : Insert sebuah elemen nilai pada

Tail dari antrian Q }

(102)

Deskripsi Alokasi (P) Info (P) ← E If IsQEmpty(Q) then Head(Q) ← P Tail(Q) ← P else Next(Tail(Q)) ← P Tail(Q) ← P endif

(103)

Halaman 103

d. Penghapusan Elemen Pada QueuE

Penghapusan elemen pada queue selalu dilakukan pada elemen pertama, hanya saja perlu diperhitungkan bahwa mungkin queue

menjadi kosong akibat terjadinya

penghapusan. Jika queue menjadi kosong, maka harga Tail harus diganti. Jika akibat penghapusan queue tidak kosong, maka elemen terakhir tidak berubah.

(104)

Berikut adalah skema penghapusan tersebut. Prosedur pertama melakukan penghapusan ElmtQ yang berada di Head danyang dicatat adalah alamatnya, yaitu P. Prosedur yang kedua menghapus elemen Head dari queue dan menyimpannya pada suatu elmtQ serta membebaskan alamat yang tadinya dipakai oleh elemen Head tersebut.

(105)

Halaman 105

procedure DeleteQ@(Input/Output Q : Queue Output P : address)

{K.Awal : Queue tidak kosong

K.Akhir : P bukan lagi elemen dari Q, P ≠ Nil, Next(P) = Nil

Proses : Menghapus elemen Head dari antrian, antrian tidak boleh kosong dan

mungkin menjadi kosong }

Deklarasi Deskripsi

(106)

P ← Head(Q)

Head(Q) ← Next(Head(Q))

if (Head(Q) = Nil) then

Tail(Q) ← Nil

endif

(107)

Halaman 107

procedure DeleteQ(Input/Output Q : Queue Output E : InfoType)

{K.Awal : Queue tidak kosong

K.Akhir : Jika P adalah Head(Q). P bukan lagi elemen dari Q, P ≠ Nil,

Next(P) = Nil

Proses : Menghapus elemen Head dari antrian, antrian tidak boleh kosong dan

mungkin menjadi kosong }

Deklarasi Deskripsi

(108)

P ← Head(Q)

E ← Info(Head(Q))

Head(Q) ← Next(Head(Q))

if (Head(Q) = Nil) then

Tail(Q) ← Nil

endif

Next(P) ← Nil

Dealokasi(P)

(109)

Halaman 109

Soal

Soal

-

-

Soal

Soal

1. Mengapa cara penyusunan elemen pada Queue Sering disebut tersusun secara FIFO?

2. Mengapa pada Queue Traversal dan Search jarang dilakukan?

3. Penghapusan elemen pada Queue selalu

dilakukan pada elemen yang paling depan, bagaimana jika terpaksa harus menghapus elemen yang paling belakang?

(110)

4. Buatlah sebuah fungsi untuk menghitung jumlah elemen queue yang ganjil, jika diketahui sebuah queue dengan elemen bertype integer.

5. Buatlah fungsi/prosedur untuk mencetak elemen queue yang genep

6. Buatlah juga fungsi untuk menghitung rata-rata elemen queue yang ganjil

7. Buatlah sebuah fungsi untuk mengirimkan elemen pertama queue

8. Buatlah sebuah fungsi untuk mengirimkan elemen queue yang maksimum jika diketahui elemen queue

(111)

Halaman 111

7.

7.

Pohon

Pohon

(Tree)

(Tree)

7.1. Definisi Rekurens Dari Pohon

Sebuah pohon adalah himpunan terbatas tidak kosong, dengan elemen yang dibedakan sebagai berikut :

1. Sebuah elemen yang dibedakan dari yang lain yang disebut sebagai AKAR (root) dari pohon

2. Elemen yang lain (jika masih ada) dibagi-bagi menjadi beberapa sub himpunan yang disjoint dan masing-masing sub himpunan tersebut adalah pohon yang disebut sebagai sub pohon dari pohon tersebut.

(112)

Beberapa Istilah 1. Hutan

Hutan adalah sequence (list) dari pohon

2. Simpul (Node)

Simpul adalah elemen dari pohon yang

memungkinkan akses pada sub pohon dimana simpul tersebut berfungsi sebagai Akar

3. Cabang

Cabang adalah hubungan antara Akar dengan sub pohon

(113)

Halaman 113

4. Ayah

Akar dari sebuah pohon adalah Ayah dari sub pohon

5. Anak

Anak dari sebuah pohon adalah Sub pohon

6. Saudara

Saudara adalah simpul-simpul yang mempunyai Ayah yang sama

7. Daun

Daun adalah simpul terminal dari pohon. Semua simpul selain Daun adalah simpul bukan terminal

(114)

8. Jalan (Path)

Jalan adalah suatu urutan tertentu dari Cabang

9. Derajat

Derajat sebuah pohon adalah banyaknya anak dari dari pohon tersebut.

Jika sebuah simpul berderajat N disebut pohon N-aire

1 disebut pohon 1-aire/uner 2 disebut pohon 2-aire/biner

(115)

Halaman 115

10. Tingkat (Level)

Level pohon adalah panjangnya jalan dari Akar sampai dengan simpul yang

bersangkutan. Panjang dari jalan adalah banyaknya simpul yang dikandung pada

jalan tersebut. Akar mempunyai tingkat sama dengan 1.

Dua buah simpul disebut sebagai Sepupu jika mempunyai tingkat yang sama dalam sebuah pohon.

(116)

11. Kedalaman (Tinggi)

Kedalaman (Tinggi) dari pohon adalah nilai maksimum dari tingkat simpul yang ada pada pohon tersebut. Kedalaman adalah panjang maksimum jalan dari Akar menuju ke sebuah daun

12. Lebar

Lebar sebuah Pohon adalah maksimum banyaknya simpul yang ada pada suatu Tingkat (Level)

(117)

Halaman 117

7.2. Struktur Pohon Biner

Definisi

Sebuah pohon biner (Binary Tree) adalah himpunan terbatas yang :

¾ Mungkin kosong atau

¾ Terdiri dari sebuah simpul yang disebut

sebagai Akar dan dua buah himpunan lain yang disjoint yang merupakan pohon biner yang disebut sebagai Sub Pohon Kiri (Left)

dan Sub Pohon Kanan (Right) dari pohon biner tersebut.

(118)

Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai

dalam berbagai terapan. Karakteristik yang dimiliki oleh pohon biner adalah bahwa

setiap simpul paling banyak hanya

memiliki dua buah anak, dan mungkin tidak punya anak.

Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum.

(119)

Halaman 119

Notasi Prefiks, Infiks dan Postfiks 1. Notasi Prefiks

Notasi Prefiks ditulis dengan cara mengikuti alur sebagai berikut :

(120)

2. Notasi Infiks

Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :

(121)

Halaman 121

3. Notasi Posfiks

Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :

(122)

Rekonstruksi Algoritma

{Deklarasi Type}

Type Infotype = … {terdefinisi}

Type node = record <Info : infotype, Left : address, Right: address > Type BinTree : address

(123)

Halaman 123

function Akar (P : BinTree)→ infotype {Mengirimkan nilai Akar pohon biner P} function Left (P : BinTree)→ infotype

{Mengirimkan anak kiri pohon biner P} function Right (P : BinTree)→ infotype

(124)

function IsEmpty(P : BinTree)→boolean { Test apakah sebuah pohon kosong,

mengirimkan True jika kosong dan False jika tidak}

procedure MakeTree(input Akar : infotype, L : BinTree, R : BinTree, output P : BinTree) { K. Awal : sembarang

K. Akhir: Terbentuk sebuah pohon biner

Proses : Menghasilkan sebuah pohon biner dari Akar, L dan R}

(125)

Halaman 125

{Traversal}

Procedur PreOrder(input P : BinTree) {K. AWAL : P terdefinisi

K. AKHIR : Semua simpul P sudah

diproses secara preorder} Procedure InOrder(input P : BinTree)

{K. AWAL : P terdefinisi

K. AKHIR : Semua simpul P sudah diproses secara inorder}

(126)

Procedure PostOrder(input P : BinTree) {K. AWAL : P terdefinisi

K. AKHIR : Semua simpul P sudah

diproses secara postorder}

Procedure PrintTree(input P : BinTree, h : integer) {K. AWAL : P terdefinisi, h adalah jarak indentasi

K. AKHIR : Semua simpul P sudah ditulis dengan indentasi}

(127)

Halaman 127

{Search}

function Search(P : BinTree, X : infotype)→boolean {Mengirimkan True jika ada node P bernilai X, false

jika tidak}

{fungsi lain}

function NbElmt(P : BinTree)→integer

{Mengirimkan banyaknya elemen (node) pohon biner P}

(128)

function NbDaun(P : BinTree) →integer

{ Mengirimkan banyaknya daun pohon biner P} function IsUnerLeft(P : BinTree) →boolean

{ Mengirimkan True jika pohon biner tidak

kosong P adalah pohon unerleft yaitu hanya mempunyai sub pohon kiri}

function IsUnerRight(P : BinTree) →boolean { Mengirimkan True jika pohon biner tidak

kosong P adalah pohon unerright yaitu hanya mempunyai sub pohon kanan}

(129)

Halaman 129

function IsBin(P : BinTree)→boolean

{ Mengirimkan True jika pohon biner tidak

kosong P adalah pohon biner yaitu mempunyai sub pohon kanan dan sub pohon kiri}

function IsSkewLeft(P : BinTree)→boolean

{ Mengirimkan True jika pohon biner P adalah pohon condong kiri}

function IsSkewRight(P : BinTree)→boolean { Mengirimkan True jika pohon biner P adalah

(130)

function Tinggi(P : BinTree)→integer

{ Mengirimkan tinggi dari pohon biner P}

function Level(P : BinTree, X : infotype)→integer { Mengirimkan level dari node X yang merupakan

salah satu simpul dari pohon biner P} {Operasi Lain}

(131)

Halaman 131

Procedure AddDaunTerkiri(input/output P:BinTree, input X: infotype)

{K. AWAL : P boleh kosong

K. AKHIR : P bertambah simpulnya, dengan X adalah simpul daun terkiri}

Procedure AddDaun(input/output P:BinTree, input X, Y : infotype, input Kiri : boolean)

{K. AWAL : P tidak boleh kosong, X adalah salah satu daun pohon Biner P

K. AKHIR : P bertambah simpulnya, dengan Y adalah anak kiri X (jika kiri) atau

(132)

Procedure DelDaunTerkiri(input/output

P:BinTree, output X: infotype) {K. AWAL : P tidak kosong

K. AKHIR: P dihapus daun terkirinya dan

didealokasi, dengan X adalah info yang semula disimpan pada daun terkiri yang dihapus}

Procedure DelDaun(input/output P:BinTree, output X: infotype)

{K. AWAL : P tidak kosong, X adalah salah satu daun

Referensi

Dokumen terkait

Pada bab III diuraikan penurunan dinamika model dari sensor pressurizer sebagai bagian komponen pada reaktor air tekan_ Perancangan Simulasi Monte Carlo untuk deteksi kegagalan

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

Nilai pendidikan karakter yang terkandung dalam tari Topeng Lengger Kinayakan meliputi nilai pendidikan karakter hubungannya dengan Tuhan, diri sendiri, sesama, dan

Penelitian yang dilakukan oleh Siska (2011) tentang penerapan metode bermain peran (role playing) untuk meningkatkan keterampilan sosial dan keterampilan berbicara anak usia

Hasil penelitian menunjukkan bahwa terdapat miskonsepsi siswa konsep kesetimbangan dinamis berkriteria rendah, konsep kesetimbangan homogen dan heterogen berkriteria

Apabila Allah hendak mengeluarkan mereka dari neraka, berkatalah orang-orang Yahudi, orang-orang Nasrani, dan para penghuni neraka dari kalangan agama lain dan para penyembah

Sebaiknya penataan koleksi perpustakaan dilakukan setiap hari. Jangan ditunda untuk menatanya, agar taman bacaan tersebut kelihatan rapi, sehingga yang akan mencari informasi

Selanjutnya untuk mengetahui akan kewajiban setiap orang Islam baik bagi orang laki-laki dan perempuan dalam menuntut ilmu menurut perspektif para kyai Bangkalan, yang hal