Anda di halaman 1dari 132

STRUKTUR DATA

Pengajar
Jaidan Jauhari, MT
Alamat Email
jaidan_j@ilkom.unsri.ac.id
jaidan_j@yahoo.com

Disarikan Dari Berbagai Sumber, Terutama Dari Diktat Struktur Data Informatika
ITB Karangan Dr. Inggriani Liem
Halaman

SILABUS MATERI KULIAH


z
z
z
z
z
z
z
z

Pengantar Struktur Data


Review Record dan Array
Stack (Tumpukan)
Queue (Antrian)
Linked List dan Variasi List
MultiList
Pohon Biner
Graph

Halaman

BUKU SUMBER
1.
2.
3.
4.
5.
6.

Inggriani Liem. 1997. Diktat Kuliah Algoritma dan


Pemrograman Prosedural. Bandung : ITB
Inggriani Liem. 2003. Diktat Kuliah Struktur Data.
Bandung : ITB
Rinaldi Munir. 2003. Algoritma dan Pemrograman II.
Bandung : Penerbit Informatika
Bambang Wahyudi. 2004. Struktur Data dan Algoritma.
Yogyakarta : Andi Offset
Dwi Sanjaya. 2001. Bertualang dengan Struktur Data di
Planet Pascal. Yogyakarta : JJ Learning
P. Insap Santoso.1997. Struktur Data dengan Turbo
Pascal. Yogyakarta : Andi Offset

Halaman

Komponen Penilaian
z
z
z
z
z

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

Halaman

Aturan dan Sanksi-sanksi


z
z
z
z
z

Kehadiran minimal 80%, kurang dari 80%


tidak lulus (mendapat nilai E)
Keterlambatan maksimal 10 menit (Lebih dari 10 menit tidak
diijinkan memasuki ruangan)
Pengumpulan Tugas yang melebihi waktu yang telah ditentukan
akan diberikan nilai nol
Kecurangan dalam bentuk apapun akan mendapatkan nilai E
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
Selama perkuliahan berlangsung mahasiswa tidak diijinkan
meninggalkan ruang kuliah kecuali sangat terpaksa dan itupun
harus membuat surat ijin dan hanya boleh satu kali
Halaman

PENGERTIAN STRUKTUR DATA


Struktur data adalah cara menyimpan atau
merepresentasikan data di dalam komputer agar
bisa dipakai secara efisien
Sedangkan data adalah representasi dari
nyata.

fakta dunia

Fakta atau keterangan tentang kenyataan yang


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

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

Halaman

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
keseluruhan lebih efisien dan sederhana.
Halaman

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 )

Halaman

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

10

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, {023}
mm : integer, {059}
ss : integer {059}
>
Jika J adalah peubah (variabel) bertipe Jam
maka cara mengacu tiap field adalah J.hh, J.mm
dan J.ss
Halaman

11

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, {023}
mm
: integer, {059}
ss
: integer {059}
>
Diterjemahkan menjadi :
typedef struct
{ int hh; /*023*/
int
mm; /*059*/
int
ss; /*059*/
} Jam;
Halaman

12

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
keterurutan misalnya integer atau karakter.
Halaman

13

z
z
z

Banyaknya elemen larik harus sudah diketahui


sebelum program dieksekusi.
Tipe elemen larik dapat berupa tipe sederhana,
tipe terstruktur atau tipe larik lain.
Nama lain array adalah Larik, tabel atau vektor

Halaman

14

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
Halaman

15

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;
Halaman

16

Cara Mengacu Elemen Larik


z

Elemen larik diacu melalui indeksnya.


Nilai indek harus terdefinisi.

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

17

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

Halaman

18

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

Halaman

19

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 >
TabMhs : array[1..Nmaks] of Mahasiswa
Halaman

20

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

Halaman

21

Tugas 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.
Untuk setiap field definisikan type data yang cocok

Halaman

22

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
Halaman

23

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

Halaman

24

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
Get.
Halaman

25

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
input/output device
Halaman

26

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
Halaman

27

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
Konstruktor

Halaman

28

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 >
Halaman

29

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
Halaman

30

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
mengenali elemen akhir
Halaman

31

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)
Halaman

32

Beberapa defenisi :
1. List L adalah List kosong , jika First (L) = Nil
2. Elemen terakhir dikenali, dengan salah satu
cara adalah karena Next(Last) =Nil

Halaman

33

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

34

Karena Urutan akses adalah dari elemen


pertama sampai dengan elemen
terakhir, maka traversal list secara
natural dilakukan dari elemen pertama,
suksesornya, dan seterusnya sampai
dengan elemen terakhir.

Halaman

35

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

Halaman

36

Deklarasi :
P : address { address untuk traversal , type
terdefenisi }

Deskripsi :
Inisialisasi
P First ( L )
While ( P Nil ) do
Proses ( P )
P Next ( P )
endwhile
Terminasi

{ First Element }

{ Next element }

Halaman

37

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 :
Halaman

38

Deklarasi
P : address { address untuk traversal , type
terdefenisi }

Deskripsi
If (First ( L ) = Nil) then
Write ( List kosong )
else
Halaman

39

Insialisasi
P First ( L )
Repeat
Proses ( P )
P Next ( P )
until P=Nil
Terminasi

Halaman

{ First Element }

{ Next element }

40

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

42

{Proses : Sequential Search harga X pada sebuah


list linier L, Semua elemen diperiksa
dengan intruksi yang sama, versi
dengan
Boolean}
Deklarasi
Deskripsi

Halaman

43

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}
{Jika Found maka P adalah address dimana
harga yang dicari diketemukan}
Halaman

44

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

45

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
endwhile { Pt = Nil or Found}
{ Jika Found maka P adalah elemen list}
Halaman

46

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
Halaman

47

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

48

Function IsEmptyList (L : List ) boolean


{ Test apakah sebuah list L kosong,
Mengirimkan true jika list kosong, false
jika tidak kosong}
Deklarasi
Deskripsi
return(First (L) = Nil)

Halaman

49

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.

Halaman

50

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
First (L) Nil

Halaman

51

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
belum dialokasi).
Halaman

52

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
Halaman

53

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
Next (P) First (L)
First (L) P
Halaman

54

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

Halaman

55

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
Proses : Insert sebuah elemen beralamat P sbg elemen
terakhir dari list linier L yg mungkin kosong }
Halaman

56

Deklarasi
Last : address

{ address untuk traversal}

Deskripsi
If

Fisrt (L) = Nil then


InsertFirst(L, P)

{ insert sebagai elemen pertama}

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
Halaman

57

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
InsertLast@(L,P)
Halaman

58

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

59

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
P First (L)
First (L) Next ( First (L) )
Halaman

60

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)
Halaman

61

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
P Next (Prec)
Next (Prec) Next (Next (Prec))
Halaman

62

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 }

Deskripsi
Halaman

63

{ 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)
endif
Halaman

64

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

65

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
Else
Next ( preclast ) Nil
endif
Halaman

66

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

67

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)}
endif
Halaman

68

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
P : Address
Halaman

69

Soal-Soal 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
2. Prosedur untuk menghitung rata-rata
elemen list yang ganjil
Halaman

70

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
Halaman

71

5. Stack (Tumpukan)
5.1. Definisi
STACK (Tumpukan) adalah list linier yang :
1. Dikenali elemen puncaknya (TOP)
2. Aturan penyisipan dan penghapusan
elemennya tertentu :
-Penyisipan selalu dilakukan di atas TOP
-Penghapusan selalu dilakukan pada TOP
Halaman

72

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 >
Halaman

73

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
penambahan dan penghapusan dengan
mudah dan efisien dapat dilakukan.
Halaman

74

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) =
Nil ( tidak terdefinisi )
Halaman

75

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}
S : Stack
P : Address
Halaman

76

5.2. Traversal pada Stack


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

77

5.4. Operasi dan fungsi dasar


pada 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
sebagai berikut :
Halaman

78

function StackEmpty (S : STACK)


Boolean
{ TEST stack kosong : Mengirim true, jika
tumpukan kosong, false jika tumpukan tidak
kosong}
Deklarasi
Deskripsi
return (Top (S) = Nil)
Halaman

79

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
Top (S) Nil
Halaman

80

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

81

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)
TOP (S) P
Halaman

82

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)
TOP(S) P
Halaman

83

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
tadinya dipakai
Halaman

84

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)
TOP (S) Next(TOP(S))
Halaman

85

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))
Dealokasi (P)
Halaman

86

Soal-Soal 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?
Halaman

87

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
elemen Stack terurut mengecil bertype integer
Halaman

88

6. Queue (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
Halaman

89

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 >
Halaman

90

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)
Halaman

91

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}
Q : Queue
P : Address
Halaman

92

6.2. Traversal pada Queue


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

93

6.4. Operasi dan fungsi dasar


pada 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 :
Halaman

94

function IsQEmpty (Q : Queue) Boolean


{ TEST Queue kosong : Mengirim true, jika
antrian kosong, false jika antrian tidak
kosong}
Deklarasi
Deskripsi
return ((Head(Q) = Nil) and (Tail(Q) = Nil))

Halaman

95

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
Head(Q) Nil
Tail(Q) Nil
Halaman

96

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.

Halaman

97

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

98

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 }
Deklarasi
Halaman

99

Deskripsi
If IsQEmpty(Q) then
Head(Q) P
Tail(Q) P
else
Next(Tail(Q)) P
Tail(Q) P
endif
Halaman

100

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 }
Deklarasi
Halaman

101

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
Halaman

102

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.

Halaman

103

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.

Halaman

104

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
Halaman

105

P Head(Q)
Head(Q) Next(Head(Q))
if (Head(Q) = Nil) then
Tail(Q) Nil
endif
Next(P) Nil

Halaman

106

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
Halaman

107

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)
Halaman

108

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?
Halaman

109

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
terurut membesar dan bertype integer
Halaman

110

7. Pohon (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) dibagibagi menjadi beberapa sub himpunan yang
disjoint dan masing-masing sub himpunan
tersebut adalah pohon yang disebut sebagai
sub pohon dari pohon tersebut.
Halaman

111

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

Halaman

112

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
Halaman

113

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
Halaman

114

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

115

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)
Halaman

116

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

117

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.

Halaman

118

Notasi Prefiks, Infiks dan Postfiks


1. Notasi Prefiks
Notasi Prefiks ditulis dengan cara mengikuti
alur sebagai berikut :

Halaman

119

2. Notasi Infiks
Notasi ini ditulis dengan cara mengikuti alur
sebagai berikut :

Halaman

120

3. Notasi Posfiks
Notasi ini ditulis dengan cara mengikuti alur
sebagai berikut :

Halaman

121

Rekonstruksi Algoritma
{Deklarasi Type}
Type Infotype = {terdefinisi}
Type node = record <Info : infotype,
Left : address,
Right: address >
Type BinTree : address
{Primitif}
Halaman

122

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
{Mengirimkan anak kanan pohon biner P}

Halaman

123

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

124

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

125

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}

Halaman

126

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

127

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

128

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
pohon condong kanan}
Halaman

129

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}

Halaman

130

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
sebagai anak kanan X (jika not kiri)}
Halaman

131

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
K. AKHIR : X dihapus dari P}
Halaman

132

Anda mungkin juga menyukai