Anda di halaman 1dari 70

DAFTAR ISI

DAFTAR ISI…..................................................................................................................... 0

Bab 1. PENGENALAN STRUKTUR DATA…...................................................................., 1

1.1. Pengenalan Struktur Data............................................................................................ 1

1.2. Pengenalan Algoritma.................................................................................................. 2

1.3. Pengenalan Array…….................................................................................................. 3

1.4. Pointer …………..…….................................................................................................. 4

1.5. Struktur….…………….................................................................................................. 5

1.6. Kesimpulan………...….................................................................................................. 6

1.7. Soal Latihan…….…….................................................................................................. 7

Bab 2. STRUCTURE DATA LINEAR............................................................................... 19

3.1. Pengertian Struktur Data............................................................................................ 19

3.2. Review Record (Rekaman)........................................................................................,,20

3.3. Latihan Tugas..... ....................................................................................................... 24

Bab 3. ABSTRACT DATA TYPE (ADT)............................................................................ 25

3.1. Linked List.................................................................................................................. 26

3.2. Stack (Tumpukan)..................................................................................................... 41

3.3. Queue (Antrian).......................................................................................................... 47

Bab 4. STRUKTUR DATA LANJUT.................................................................................. 54

4.1. Definisi Tree.............................................................................................................. 54

4.2. Jenis-jenis Tree........................................................................................................ 57

4.3. Operasi-operasi pada Binary Tree............................................................................ 61

4.4. Binary Search Tree................................................................................................... 62

4.5. Graph ………………………………………………………………………………………. 63

DAFTAR ISTILAH.............................................................................................................. 69

DAFTAR RUJUKAN.......................................................................................................... 69

0
BAB I
Pengenalan Struktur Data dan Algoritma

Tujuan:

1. Mahasiswa memahami apakah yang dimaksud dengan struktur data

2. Mahasiswa memahami apakah yang dimaksud dengan algoritma

3. Mengingat kembali array, struktur, pointer dalam bahasa C

1.1 Pengenalan Struktur Data

Struktur data adalah sebuah skema organisasi, seperti struktur dan array, yang diterapkan

pada data sehingga data dapat diinterprestasikan dan sehingga operasioperasi spesifik

dapat dilaksanakan pada data tersebut

1.2 Pengenalan Algoritma

Algoritma adalah barisan langkah-langkah perhitungan dasar yang mengubah masukan

(dari beberapa fungsi matematika) menjadi keluaran.

Contoh: Perkalian

Input: integer positif a, b

Output: a * b

Algoritma perkalian:

Contoh kasus : a = 365, b = 24

Metode 1 : 365 * 24 = 365 + (365 * 23)


= 730 + (365 * 22)
= 8760 + (365 * 0)
= 8760
Metode 2 : 365
24
1460
730
8760
Manakah algoritma yang lebih baik ?

1
1.3 Pengenalan Array

Array adalah organisasi kumpulan data homogen yang ukuran atau jumlah elemen

maksimumnya telah diketahui dari awal. Array umumnya disimpan di memori komputer

secara kontigu (berurutan).

Deklarasi dari array adalah sebagai berikut:

int A[5]; artinya variabel A adalah kumpulan data sebanyak 5 bilangan bertipe integer.

Operasi terhadap elemen di array dilakukan dengan pengaksesan langsung. Nilai di

masing-masing posisi elemen dapat diambil dan dapat disimpan tanpa melewati posisi

lain.

Terdapat dua tipe operasi, yaitu:

1. Operasi terhadap satu elemen/posisi dari array

2. Operasi terhadap array sebagai keseluruhan

Dua operasi paling dasar terhadap satu elemen/posisi adalah

1. Penyimpanan nilai elemen ke posisi tertentu di array

2. Pengambilan nilai elemen dari posisi tertentu di array

1.3.1 Penyimpanan dan Pengambilan Nilai

Biasanya bahasa pemrograman menyediakan sintaks tertentu untuk penyimpanan dan

pengambilan nilai elemen pada posisi tertentu di array.

Contoh:

A[10] = 78, berarti penyimpanan nilai 78 ke posisi ke-10 dari array A

C = A[10], berarti pengambilan nilai elemen posisi ke-10 dari array A

1.3.2 Keunggulan dan Kelemahan Array

Keunggulan array adalah sebagai berikut:

1. Array sangat cocok untuk pengaksesan acak. Sembarang elemen di array dapat diacu

secara langsung tanpa melalui elemen-elemen lain.

2
2. Jika berada di suatu lokasi elemen, maka sangat mudah menelusuri ke elemen elemen

tetangga, baik elemen pendahulu atau elemen penerus

3. Jika elemen-elemen array adalah nilai-nilai independen dan seluruhnya harus terjaga,

maka penggunaan penyimpanannya sangat efisien

Kelemahan array adalah sebagai berikut:

Array mempunyai fleksibilitas rendah, karena array mempunyai batasan sebagai berikut:

1. Array harus bertipe homogen. Kita tidak dapat mempunyai array dimana satu elemen

adalah karakter, elemen lain bilangan, dan elemen lain adalah tipe-tipe lain

2. Kebanyakan bahasa pemrograman mengimplementasikan array statik yang sulit diubah

ukurannya di waktu eksekusi. Bila penambahan dan pengurangan terjadi terus-

menerus, maka representasi statis

a. Tidak efisien dalam penggunaan memori

b. Menyiakan banyak waktu komputasi

c, Pada suatu aplikasi, representasi statis tidak dimungkinkan

1.4 Pointer

Misalnya kita ingin membuat beberapa penunjuk ke blok penyimpan yang berisi integer.

Deklarasi pada C adalah:

int *IntegerPointer;

Tanda asterik (*) yang berada sebelum nama variable IntegerPointer menandakan ‘pointer

pada suatu int’. Jadi deklarasi diatas berarti ‘definisikan sebuah tipe yang terdiri dari

pointer bertipe integer yang bernama IntegerPointer’.

Apabila didepannya ditambahkan typedef sebagai berikut

Typedef int *IntegerPointer;

Berarti IntegerPointer merupakan suatu tipe pointer berbentuk integer.

Apabila akan mendeklarasikan dua variable A dan B sebagai penunjuk ke bilangan

integer :

3
IntegerPointer A, B;

Berarti kompiler C akan berisi nilai dari variable A dan B yang ‘menunjuk ke integer’.

Untuk membuat beberapa penunjuk ke beberapa penyimpan integer yang kosong dan

untuk membuat A dan B menunjuk tempat tersebut, digunakan prosedur dinamis untuk

alokasi penyimpan yang disebut malloc

A = (IntegerPointer *) malloc (sizeof(int));

A:

B = (int *) malloc (sizeof(int));

A:

B:

Misalnya kita akan menyimpan integer 5 pada blok penyimpan yang ditunjuk pointer pada

variable A. Untuk menuimpan angka 5 pada blok penyimpan integer itu melalui pointer A,

digunakan pernyataan :

*A = 5;

A:

B:

Linked list adalah salah satu struktur data yang paling fundamental. Linked list terdiri dari

sejumlah kelompok elemen (linked) dengan urutan tertentu. Linked list sangat berguna

untuk memelihara sekelompok data, semacam array, tetapi linked list lebih

menguntungkan dalam beberapa kasus. Linked list lebih efisien dalam proses penyisipan

(insertion) dan penghapusan (deletion). Linked list juga menggunakan pengalokasian

penyimpan secara dinamis, dimana penyimpan dialokasikan pada saat waktu berjalan

(runtime).

4
1.5 Struktur

Struktur adalah koleksi dari variabel yang dinyatakan dengan sebuah nama, dengan sifat

setiap variabel dapat memiliki tipe yang berlainan. Struktur biasa dipakai untuk

mengelompokkan beberapa informasi yang berkaitan menjadi sebuah satu kesatuan.

Contoh sebuah struktur adalah informasi data tanggal, yang berisi: tanggal, bulan dan

tahun.

1.5.1 Mendeklarasikan Struktur

Contoh pendefinisian tipe struktur adalah sebagai berikut:

struct data_tanggal

int tanggal;

int bulan;

int tahun;

};

yang mendefinisikan tipe struktur bernama data_tanggal, yang terdiri dari tiga buah

elemen (field) berupa : tanggal, bulan dan tahun.

Pendefnisian dan pendeklarasian struktur dapat juga ditulis sebagai berikut:

struct data_tanggal

int tanggal;

int bulan;

int tahun;

} tgl_lahir;

5
Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah sebagai berikut

struct nama_tipe_struktur

tipe field1;

tipe field2;

tipe fieldn;

}variabel_struktur1, ... , variabel_strukturM;

Masing-masing tipe dari elemen struktur dapat berlainan. Adapun variabel_struktur1

sampai dengan variabel_strukturM menyatakan bahwa variabel struktur yang

dideklarasikan bisa lebih dari satu. Jika ada lebih dari satu variabel, antara variabel

struktur dipisahkan dengan tanda koma.

1.5.2 Mengakses Elemen Struktur

Elemen dari struktur dapat diakses dengan menggunakan bentuk

variabel_struktur.nama_field

Antara variabel_struktur dan nama_field dipisahkan dengan operator titik (disebutoperator

anggota struktur). Contoh berikut merupakan instruksi untuk mengisikan data pada field

tanggal

tgl_lahir.tanggal = 30;

1.6 Kesimpulan

1. Struktur data adalah sebuah skema organisasi yang diterapkan pada data sehingga

data dapat diinterprestasikan dan sehingga operasi-operasi spesifik dapat

dilaksanakan pada data tersebut

6
2. Apabila kita membuat program dengan data yang sudah kita ketahui batasnya, maka

kita bisa menggunakan array (tipe data statis), namun apabila data kita belum kita

ketahui batasnya, kita bisa menggunakan pointer (tipe data dinamis)

3. Untuk sekumpulan data dengan tipe data yang berlainan, namun merupakan satu-

kesatuan, kita dapat menggunakan struktur untuk merepresentasikannya

1.7 Latihan

1. Masalah aritmatika polinom adalah membuat sekumpulan subrutin manipulasi terhadap

polinom simbolis (symbolic Polynomial). Terdapat empat operasi aritmatika polinom

dasar antara lain:

a. Penambahan

b. Pengurangan

c. Perkalian

d. Turunan

Representasikan bilangan polinom dengan array dan buatlah prosedur-prosedur yang

melakukan kelima operasi aritmatika di atas.

2. Representasikan soal di atas dengan menggunakan pointer

3. Bilangan kompleks berbentuk a + bi, dimana a dan b adalah bilangan nyata dan i2 = -1.

Terdapat empat operasi aritmatika dasar untuk bilangan kompleks, yaitu:

• Penambahan : (a+bi) + (c+di) = (a+c) + (b+d)i

• Pengurangan : (a+bi) - (c+di) = (a-c) + (b-d)i

• Perkalian : (a+bi) * (c+di) = (ac-bd) + (ad+bc)i

• Pembagian : (a+bi) / (c+di) = [(ac+bd) / (a2+b2)] + [(bc-ad)/(c2+d2)]i

Tulis program yang membaca dua bilangan kompleks dan simbol operasi yang perlu

dilakukan, kemudian lakukan operasi yang diminta.

Gunakan struktur untuk merepresentasikan bilangan kompleks dan gunakan prosedur

untuk implementasi tiap operasi.

7
Objektif

a) Mengetahui maksud struktur data dan menjelaskan penggunaannya dalam

pemrograman

b) Mengetahui operasi yang terkait dengan struktur data dan metode pemrograman

paling umum yang terkait dengan struktur tersebut.

c) Mengetahui metode dan notasi yang digunakan untuk menspesifikasi apa-apa yang

perlu dikerjakan oleh program dan bagaimana program ini melakukan pekerjaan

tersebut.

Jenis/Tipe Data (Data Type), terdiri dari

� Set nilai data

� Set operasi yang bisa diterapkan pada nilai tersebut

Klasifikasi Jenis Data

� Simple Data Type (Jenis Data Sederhana)

� Item data individual

� Data Structures / data aggregates (struktur data)

� Kombinasi dari item data individual

� Membentuk item data lain

Jenis Data Sederhana

a) Numerik, terdiri dari :

� Numerik integer (bilangan bulat)

� Numerik real (bilangan riil)

� Karakter, terdiri dari :

� Alfabet : a .. z, A .. Z

� Angka : 0 .. 9

� Simbol khusus : + ? ‘ ! [ ] { } … dll

8
b) Boolean (logika), terdiri dari :

� True

� False

c) Identifier

� Dalam bahasa pemrograman, item data diidentifikasi menurut namanya, bukan

menurut alamat lokasinya dalam memori

� Identifier akan merupakan konstanta jika ia selalu dikaitkan dengan nilai data yang

sama

� Identifier akan merupakan variabel jika nilai datanya yang terkait bisa berubah

� Literal, nilai data yang tertera dalam program namun bukan sebagai identifier

d) Deklarasi Data

� Jenis data konstanta dan variabel harus didefinisikan dalam program sehingga :

� operasi yang tepat dapat dijalankan pada nilai data dan

� Jumlah ruang penyimpanan yang tepat bisa ditentukan

� Statement untuk mendefinisikan jenis data disebut declarative statement

� Beberapa bahasa pemrograman memiliki sintaks pendeklarasian yang berbeda

� Beberapa contoh program (pendeklarasian data) yang akan diberikan ditulis dalam

pseudo-code

Contoh

Constants

pi = 3.141592654

Variables

i, qty : integer

harga_satuan, harga_beli : real

status : boolean

nama : character(25)

9
Struktur Data

� Kelompok item data yang terorganisasi yang dianggap sebagai suatu unit

� Disebut juga sebagai jenis data kompleks (complex data type) atau data aggregates

� Beberapa struktur data :

� Array (larik)

� String

� Record

� List (daftar)

� Tree

Array (Larik)

� Set item data yang disusun secara baik menjadi rangkaian dan diacu atau ditunjuk oleh

satu identifier

� Contoh : Nilai = (56 42 89 65 48)

� Item data individual dalam array bisa ditunjuk secara terpisah dengan menyatakan

posisinya dalam array itu

� Nilai(1) menunjuk 56

� Nilai(2) menunjuk 42

� Bilangan yang ditulis dalam tanda kurung menandakan posisi item individual dalam

array (disebut juga subscript / indeks)

Array (Larik)

� Variabel bisa digunakan sebagai subscript, misalnya Nilai(i).

� Jika i = 2 maka menunjuk ke Nilai(2) yaitu 42

� Jika i = 4 maka menunjuk ke Nilai(4) yaitu 65

� Item data individual dalam suatu array sering disebut elemen

� Matriks

� Array yang hanya berisi bilangan dan tidak ada data alfabetisnya

10
� Klasifikasi Array

� Array 1 dimensi

� Array multi dimensi

Array Multi Dimensi

� Mempunyai elemen-elemen yang disusun ke dalam baris dan kolom dan digunakan

sebagai tabel data

� Contoh : Nilai ujian dari mahasiswa satu kelas untuk beberapa mata kuliah bisa

ditempatkan dalam array 2 dimensi

A(1,2) = 44

A(2,2) = 36

A(3,2) = 73

A(4,2) = 86

A(5,2) = 51

A(1,1) = 56

A(2,1) = 42

A(3,1) = 89

A(4,1) = 65

A(5,1) = 48

A=

Siswa ke B. Inggris (kolom 1) Matematika (kolom 2)

1 56 44

2 42 36

3 89 73

4 65 86

5 48 51

Deklarasi Array

11
� Array 1 dimensi

� Array 2 dimensi

Variables

Nilai: array [1..5] of integer

A : array [1..4] of real

Variables

A : array [1..5, 1..2] of integer

Penanganan Array

� Metode dasar penanganan array :

� Mencari nilai terbesar

� Mencari nilai terkecil

� Menghitung nilai rata-rata

� Menghitung nilai total

� Menghitung jumlah nilai di bawah rata-rata

� Menyortir Array (Sort)

� Buble sort

� Straight selection sort

� Mencari/Meneliti Array (Search)

� Linear search

Penanganan Array

� Contoh : Nilai ujian mahasiswa akan dibaca dalam array. Kemudian akan ditampilkan

nilai terbesar, nilai terkecil, nilai rata-rata, nilai total, dan jumlah nilai di bawah rata-rata.

� Tahapan penanganan array

� Input nilai data ke dalam array

� Mengkalkulasi nilai terbesar, terkecil, total, dan ratarata

� Mengkalkulasi jumlah nilai di bawah rata-rata

12
� Menampilkan hasilnya (output)

String

� Rangkaian karakter yang ditangani sebagai unit data tunggal

� Contoh (string literal) :

� “ABC, 32fl2. 3h”

� “Kucing dalam karung”

� Contoh (variabel string) :

� A = “Universitas”

� B = “LambungMangkurat”

� Berada dalam bentuk array karakter 1 dimensi

String

� Fixed-length string (String yang panjangnya tetap)

� Mempunyai jumlah tempat karakter yang tetap yang tersedia (bisa digunakan) untuk

penyimpanan data

� Variable-length string (String yang panjangnya berubah-ubah)

� Memberi data sejumlah spasi (ruang) sesuai yang ia perlukan

� Fixed-length string

� Variable-length string

posisi karakter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

isi A N D R I A M R I I N A J O K O D E D I

komentar string ke 1 string ke 2 string ke 3 string ke 4 string ke 5

posisi karakter 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

isi A N D R I * A M R I * I N A * J O K O * A L *

komentar string ke 1 string ke 2 string ke 3 string ke 4 string ke 5 tempat sisa

Deklarasi String

� Fixed-length string

13
� Variable-length string

Variables

nama : string[5]

Variables

nama : string

Operasi pada String

� Concatenation

�Penggabungan dua atau lebih string

�Contoh :

A = “Universitas”

B = “LambungMangkurat”

C=A+B

maka

C = “UniversitasLambungMangkurat”

Operasi pada String [2]

� Substring

�Mengambil bagian dari suatu string

�Contoh A = “Universitas”

B = “LambungMangkurat”

C = Left(A, 3)

D = Right(B, 5)

E = Substr(A, 4, 5)

maka

C = “Uni”

D = “darma”

E = “versi”

14
Record

� Seperti array 1 dimensi

� Terdiri dari serangkaian item data yang terkait

� Item data berurutan yang ada dalam record bisa mempunyai jenis yang berbeda

� Contoh : Mengorganisasikan 3 item data yang berbeda ke dalam struktur data tunggal

� NIP : string(8)

� Nilai : real

� Lulus : boolean

Deklarasi Record

mahasiswa : record

NIP : string(8)

Nilai : real

Lulus : boolean

end record

� Setiap elemen memiliki identifier sendiri

� Elemen dari suatu record disebut field

� Penunjukan ke setiap field dari suatu record bisa dilakukan dengan :

� Notasi “dot” (titik)

� Notasi “with”

Begin

mahasiswa.NIM := ‘20151234’

mahasiswa.Nilai := 90.5

mahasiswa.Lulus := True

End

Begin

with mahasiswa

15
do

NIM := ‘20151234’

Nilai := 90.5

Lulus := True

end with

End

Array Record (Tabel)

� Kumpulan dua atau lebih record

� Deklarasi Array Record

Variable

Mahasiswa : Array [1..5] of record

NIP : string(8)

Nilai : real

Lulus : boolean

End record

PDE - Struktur Data 26

List

� Memberikan cara yang fleksibel untuk penanganan item data secara urut

� Perubahan terhadap urutan tersebut dapat dicapai (dilakukan) dengan perpindahan

data yang minimal dan kehilangan ruang penyimpanan yang sedikit

a) Contoh : Kalimat "Abdoel does not like computer game" dituliskan sebagai suatu list,

seperti berikut : Abdoel does not like computer game

b) Beberapa istilah

� DATUM : item data dalam list

� POINTER : penunjuk yang menyambungkan item data satu dengan yang lain

� NODE / elemen : elemen dari suatu list yang terbentuk dari datum dan pointer

16
� TERMINATOR : pointer terakhir dari list

� START POINTER : menyatakan tempat datum pertama

� FREE STORAGE POINTER: menyatakan di mana datum berikut mengarah atau

menuju

Deklarasi List

� List dapat dideklarasikan sebagai sebuah array record

Variable

kalimat : Array [1..7] of record

Datum : string

Next : integer

End record

78

67

Last datum; -1 is a

terminator

5 “cake” -1

4 “like” 5 Next datum is in row 5

3 “not” 4 Next datum is in row 4

2 “does” 3 Next datum is in row 3

1 “Ahmad” 2 Next datum is in row 2

Pointer to Comment

Next

Datum

Row Datum

Number

Start

17
Pointer

Free

storage

Pointer

Operasi pada List

� Deletion : penghapusan elemen suatu list

� Ketika elemen suatu list dihapus, tempat penyimpanan yang telah dikosongkan dapat

digunakan lagi

� Insertion : penyisipan elemen ke dalam suatu list

� Search : pencarian elemen dalam suatu list

Tree

� Struktur data hirarki

� Dikonstruksi menggunakan aturan preseden untuk item data, misal : menggunakan

rangkaian alfabet atau numerik

Beberapa Istilah :

� NODE : elemen dari suatu tree

� Setiap node memiliki (sedikitnya) dua pointer yaitu left pointer dan right pointer

� ROOT NODE : datum pertama yang ditempatkan dalam tree

� PARENT NODE : node yang memiliki node di bawahnya (sub-node)

� CHILD NODE : node yang berada di bawah parent

� LEAF NODE : node yang tidak mempunyai child

� Contoh : bilangan-bilangan ini (56 42 89 65 48) ditempatkan ke dalam tree

Catatan :

� Node paling kiri berisi bilangan terkecil

� Node paling kanan berisi bilangan terbesar

18
BAB II

STRUKTUR DATA

2.1 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 simbol

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

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.

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

� List linier (Linked List) dan variasinya

� Multilist

� Stack (Tumpukan) dan � Queue (Antrian)

� Tree (Pohon)

� Graph (Graf)

19
2.2 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.

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

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}

20
mm : integer, {0…59}

ss : integer {0…59}

>

Diterjemahkan menjadi :

typedef struct

{ int hh; /*0…23*/

int mm; /*0…59*/

int ss; /*0…59*/

} Jam;

REVIEW ARRAY (LARIK)

Pendahuluan

� Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe

sama.

� Setiap elemen diakses langsung melalui indeksnya.

� Indeks larik harus tipe data yang menyatakan keterurutan misalnya integer atau

karakter.

� 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

Cara Pendefinisian Array

1. Sebagai Peubah

Contoh :

L : array[1..50] of integer

NamaMhs : array[‘a’..’j’] of string

2. Sebagai tipe baru

Contoh :

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

P : LarikInt

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;

Cara Mengacu Elemen Larik

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

Menginisialisasi Larik

� 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,

22
nilainya terdefinisi}

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

Deklarasi :

K : integer

Deskripsi :

for k � 1 to N do

A[k] � 0

endfor

Mengisi elemen larik dari piranti masukan

� 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

Larik Bertype Terstruktur

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

bertipe terstruktur

Contoh :

const Nmaks = 100

23
type Mahasiswa : record

<nim : integer,

nama_mhs : string,

KodeMK : string,

Nilai : char >

TabMhs : array[1..Nmaks] of Mahasiswa

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

2.3 Latihan Tugas

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

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
BAB III
ADT (ABSTRACT DATA TYPE)

3.1 Definisi ADT

Definisi ADT (Abstract Data Type)

� ADT adalah definisi type dan sekumpulan primitif (operasi dasar) terhadap type

tersebut.

� Type diterjemahkan menjadi type terdefinisi dalam bahasa pemrograman yang

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

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

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

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

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

3. Realisasi fungsi dan prosedur harus sedapat mungkin memanfaatkan Selektor dan

Konstruktor

3.2 Linked List (List Linier)

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 >

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

Jadi, sebuah list linier dikenali:

� elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut : First

� alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen ,

yang

dapat diakses melalui field NEXT

26
� setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu.Untuk

mengacu sebuah elemen , alamat harus terdefenisi . Dengan alamat tersebut Informasi

yang tersimpan pada elemen list dapat diakses

.� elemen terakhirnya. Ada berbagai cara untuk mengenali elemen akhir

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)

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

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.

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.

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}

27
Deklarasi

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

Terminasi

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 :

Deklarasi

P : address { address untuk traversal , type terdefenisi }

Deskripsi

If (First ( L ) = Nil) then

Write ( ‘List kosong ‘ )

else

Halaman 40

Insialisasi

28
P ← First ( L ) { First Element }

Repeat

Proses ( P )

P ← Next ( P ) { Next element }

until P=Nil

Terminasi

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.

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.

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 }

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

dengan intruksi yang sama, versi dengan Boolean}

Deklarasi

Deskripsi

P ← First ( L )

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

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 }

Deklarasi

Pt : address

Deskripsi

Pt ← First ( L )

Found ← false

While ( Pt ≠ Nil ) and ( not found ) do

if Pt = P then

Found ← true

else

30
Pt ← Next (Pt)

endif

endwhile { Pt = Nil or Found}

{ Jika Found maka P adalah elemen list}

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

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.

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)

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.

31
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 52

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

2.2 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

32
Next (P) ← First (L)

First (L) ← P

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 55

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

33
Proses : Insert sebuah elemen beralamat P pada List linier L}

Deklarasi

Deskripsi

Next (P) ← Next (Prec)

Next (Prec) ← P

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 }

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;

34
insert P after last }

InsertAfter (P, Last)

endif

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)

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.

DELETFirst : menghapus elemen pertama list linier

a. Elemen yang dihapus dicatat alamatnya

Procedure DeleteFirst@ (Input/Output L : List, Output

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

Delete After :

Penghapusan suksesor sebuah elemen :

Procedure DeleteAfter ( Input Prec : adrress, Output

P : address )

{ K. Awal : List tidak kosong, Prec adalah elemen list

36
, 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 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 }

Deskripsi

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

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

DeleteAfter (Prec , P)

endif

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 }

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

38
Else

Next ( preclast )← Nil

endif

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 }

Deklarasi

Last1 : address { alamat elemen terakhir list pertama }

Deskripsi

Cratelist (L3) {inisialisasilist 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)}

39
Next(Last1) ← First (L2)}

endif

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

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

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

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

3.3 Stack (Tumpukan)

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

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 >

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. Sehingga jika S adalah sebuah Stack, dan P adalah address

maka

� Top (S) adalah alamat elemen TOP, dimana operasi penyisipan/penghapusan

dilakukan.

41
� 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 )

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

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.

Search pada Stack

Pada stack, elemen yang diproses hanyalah elemen pada TOP. Maka hampir tidak

pernah dilakukan search.

Traversal pada Stack

Operasi dan fungsi dasar pada STACK.

a. Test STACK kosong

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

function StackEmpty (S : STACK) →

Boolean

{ TEST stack kosong : Mengirim true, jika tumpukan kosong, false jika tumpukan tidak

kosong}

Deklarasi

Deskripsi

return (Top (S) = Nil)

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

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

43
yang melakukan penambahan elemen stack sebagai berikut. Prosedur pertama

menambahkan suatu ElmtS yang diketahui alamatnya dan yang kedua menambahkan

suatu nilai ElmtS yang diberikan.

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

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 }

44
Next(P) ← TOP(S)

TOP(S) ← P

Halaman 84

d. Penghapusan sebuah elemen pada

STACK (Pop)

a) 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.

b) Prosedur pertama mengambil suatu Elmts dengan menyimpan alamatnya dan yang

kedua mengambil nilai , dan membebaskan alamat (dealokasi) yang tadinya dipakai

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

procedure PopStack(Input/Output S : STACK

Output E : InfoType)

{K.Awal : Stack tidak kosong

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

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?

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

46
3.4 Queue (Antrian)

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

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 >

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)

Bagian Deklarasi dari algoritma pada Queue :

Deklarasi

47
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

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.

Search pada Queue

Pada Queue, elemen yang diproses hanyalah elemen pada pertama dan terakhir. Maka

hampir tidak pernah dilakukan search.

a.. Traversal pada Queue

b. 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 :

function IsQEmpty (Q : Queue) → Boolean

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

Deklarasi

48
Deskripsi

return ((Head(Q) = Nil) and (Tail(Q) = Nil))

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

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

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

Deklarasi

Deskripsi

If IsQEmpty(Q) then

Head(Q) ← P

Tail(Q) ← P

else

Next(Tail(Q)) ← P

Tail(Q) ← P

endif

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

Deskripsi

Alokasi (P)

Info (P) ← E

If IsQEmpty(Q) then

Head(Q) ← P

Tail(Q) ← P

else

Next(Tail(Q)) ← P

50
Tail(Q) ← P

endif

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.

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.

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

P ← Head(Q)

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

if (Head(Q) = Nil) then

Tail(Q) ← Nil

endif

Next(P) ← Nil

51
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

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)

3.5 Soal-Soal Latihan

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?

4. Buatlah sebuah fungsi untuk menghitung jumlah elemen queue yang ganjil, jika

diketahui sebuah queue dengan elemen bertype integer.

52
5. Buatlah fungsi/prosedur untuk mencetak elemen queue yang genap

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

53
BAB IV

STRUKTUR DATA NON LINEAR

4.1. Pohon (Tree)

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.

Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan

hubungan yang bersifat hierarkis (hubungan one to many) antara elemen-elemen. Tree

bias didefinisikan sebagai kumpulan simpul/node dengan elemen khusus yang disebut

Root. Node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan

satu sama lain (disebut Subtree). Untuk lebih jelasnya, di bawah akan diuraikan istilah

istilah umum dalam tree.

Predecessor Node yang berada di atas node tertentu

Successor Node yang berada dibawah node tertentu

Ancestor Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang

sama

Descendant Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur

yang sama

Parent Predecessor satu level di atas suatu node

Child Successor satu level di bawah suatu node

54
Sibling Node-node yang memiliki parent yang sama dengan suatu node

Subtree Bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki

semua karakteristik dari tree tersebut.

Size Banyaknya node dalam suatu tree

Height Banyaknya tingkatan / level dalam suatu tree

Root Satu-satunya node khusus dalam tree yang tak punyak

predecessor

Leaf Node-node dalam tree yang tak memiliki successor

Degree Banyaknya child yang dimiliki suatu node

Jenis-jenis Tree

Binary Tree

Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal

dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut

tiap node dalam binary tree hanya boleh memiliki paling banyak dua child.

Jenis- Jenis Binary Tree :

Full Binary Tree

Jenis binary tree ini tiap nodenya (kecuali leaf) memiliki dua child dan tiap subtree harus

mempunyai panjang path yang sama.

Complete Binary Tree

Jenis ini mirip dengan Full Binary Tree, namun tiap subtree boleh memiliki panjang path

yang berbeda dan setiap node kecuali leaf hanya boleh memiliki 2 child.

Skewed Binary Tree

Skewed Binary Tree adalah Binary Tree yang semua nodenya (kecuali leaf) hanya

memiliki satu child.

Implementasi Binary Tree

55
Binary tree dapat diimplementasikan dalam C++ dengan menggunakan double linkedlist.

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

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

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

10. Tingkat (Level)

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

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)

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

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.

Notasi Prefiks, Infiks dan Postfiks

1. Notasi Prefiks

Notasi Prefiks ditulis dengan cara mengikuti alur sebagai berikut :

57
2. Notasi Infiks

Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :

3. Notasi Posfiks

Notasi ini ditulis dengan cara mengikuti alur sebagai berikut :

Rekonstruksi Algoritma

{Deklarasi Type}

Type Infotype = … {terdefinisi}

Type node = record <Info : infotype,

Left : address,

Right: address >

Type BinTree : address

{Primitif}

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}

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}

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

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}

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

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}

59
function IsUnerRight(P : BinTree) →boolean

{ Mengirimkan True jika pohon biner tidak kosong P adalah pohon unerright yaitu hanya

mempunyai sub pohon kanan}

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}

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}

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

Procedure DelDaunTerkiri(input/output

P:BinTree, output X: infotype)

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

4.3. Operasi-operasi pada Binary Tree

Create Membentuk binary tree baru yang masih kosong

Clear Mengosongkan binary tree yang sudah ada

Empty Function untuk memeriksa apakah binary tree masih kosong

Insert Memasukkan sebuah node ke dalam tree. Ada tiga pilihan

insert : sebagai root, left child, atau right child. Khusus insert

sebagai root, tree harus dalam keadaan kosong

Find Mencari root, parent, left child, atau right child dari suatu node. (tree tidak boleh

kosong).

Update Mengubah isi dari node yang ditunjuk oleh pointer curret (Tree tidak boleh kosong)

Retrieve Mengetahui isi dari node yang ditunjuk oleh pointer current (Tree tidak boleh

kosong)

DeleteSub Menghapus sebuah subtree (node beserta seluruh descendantnya) yang

ditunjuk current. Tree tidak boleh kosong. Setelah itu, pointer current dakan berpindah ke

parent dari node yang dihapus.

Characteristic Mengetahui karakteristik dari suatu tree, yakni: size, height, serta average

length. Tree tidak boleh kosong.

61
Traverse Mengunjungi seluruh node-node pada tree, masing-masing sekali. Hasilnya

adalah urutan informasi secara linear yang tersimpan dalam tree. Ada tiga cara

traverse,yaitu PreOrder,

InOrder, dan PostOrder.

Langkah-langkah Tranverse :

· PreOrder : cetak isi node yang dikunjungi, kunjungi Left Child, kunjungi Right Child

· InOrder : kunjungi Left Child, cetak isi node yang dikunjungi, kunjungi Right Child

· PostOrder : kunjungi Left Child, kunjungi Right Child cetak isi node yang dikunjungi.

4.4. Binary Search Tree

Binary Tree ini memiliki sifat dimana semua left child harus lebih kecil dari pada right child

dan parentnya. Semua right child juga harus lebih besar dari left child serta parentnya.

Binary search tree dibuat untuk mengatasi kelemahan pada binary tree biasa, yaitu

kesulitan dalam searching / pendarian node tertentu dalam binary tree.

Pada dasarnya operasi dalam Binary Search Tree sama dengan Binary Tree biasa,

kecuali pada operasi insert, update, dan delete.

Insert

Pada Binary Search Tree insert dilakukan setelah lokasi yang tepat ditemukan (lokasi

tidak ditentukan oleh user sendiri ).

Update

Update ini seperti yang ada pada Binary Tree biasa, namun di sini update akan

berpengaruh pada posisi node tersebut selanjutnya. Bila update mengakibatkan tree

tersebut bukan Binary Search Tree lagi, harus dilakukan perubahan pada tree dengan

melakukan rotasi supaya tetap menjadi Binary Search Tree.

Delete

Seperti halnya update, delete dalam Binary Search Tree juga turut mempengaruhi struktur

dari tree tersebut.

62
AVL Tree

AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1

antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan

Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat

dipersingkat dan disederhanakan.

Selain AVL Tree, terdapat pula Height Balanced n Tree, yakni Binary Search Tree yang

memiliki perbedaan level antara subtree kiri dan subtree kanan maksimal adalah n

sehingga dengan kata lain AVL Tree adalah Height Balanced 1 Tree.

Untuk memudahkan dalam menyeimbangkan tree, digunakan simbol-simbol Bantu :

- (tanda minus) : digunakan apabila Subtree kiri lebih panjang dari Subtree kanan.

+ (tanda plus) : digunakan apabila Subtree kanan lebih panjang dari Subtree kiri.

0 (nol) : digunakan apabila Subtree kiri dan Subtree kanan mempunyai

height yang sama.

4.5 Graph

Materi

a) Basic theorema and program

b) Shortest path problem

c) Depth First Search

d) Breadth First Search

Prinsip

a) Struktur data non-linier.

b) Penambahan atau penghapusan elemen data tidak mengakibatkan strukturnya

tumbuh atau menyusut secara linier (garis lurus).

c) Strukturnya bersifat hierarkis multidimensi  2 dimensi atau lebih.

d) Umumnya diimplementasikan dengan array multidimensi atau linked list multilink.

63
Komponen penyusun :

a. Vertices (node)

b. Edges (arc/ link)

Jenis :

a) Weighted/ non weighted graph

b) Directed/ non directed graph

Traversal (penelusuran) :

a) DFS (Depth First Search)

b) BFS (Breadth First Search)

Contoh kasus : path lintasan terpendek

64
DAFTAR ISTILAH-ISTILAH

Algoritma : Langkah-langkah menyelesaikan suatu masalah yang disusun secara logis

dan berurutan

Animasi : Gambar yang tampak bergerak, terdiri dari banyak gambar gambar tunggal

(disebut frame) yang ditampilkan satu per satu secara bergantian dengan cepat sehingga

objek dalam

gambar tampak seolah-olah bergerak.

Array : Struktur data yang memiliki banyak elemen di dalamnya, dengan masing-masing

elemen memiliki tipe data yang sama.

Clear : Menghapus secara keseluruhan, biasanya digunakan sebagai nama

fungsi/metode yang bertujuan untuk mengosongkan list atau menghapus keseluruhan

elemen.

Console : Istilah dalam komputer yang menunjuk pada antarmuka antara pemakai

dengan komputer yang berbasiskan teks. Cara kerja konsol sangat sederhana yaitu

menggunakan standar input untuk membaca input dari keyboard dan standar output untuk

menampilkan teks ke layer monitor.

Data : Informasi yang disimpan komputer, dapat berbentuk teks, gambar, suara, video,

dan sebagainya.

Delete : Menghapus sebuah elemen, biasanya digunakan sebagai nama fungsi/metode

yang bertujuan untuk menghapus sebuah elemen dalam suatu list/tree

Deret geometric : Deretan bilangan yang setiap bilangan merupakan hasil kali bilangan

sebelumnya dengan suatu konstanta.

Destruktor : Metode khusus dalam sebuah kelas untuk menghapus objek hasil instansiasi

kelas tersebut

Dimensi : Jumlah indek yang diperlukan untuk menyatakan sebuah elemen dalam array

65
Elemen : Sebuah data tunggal yang paling kecil dari sebuah array atau list. Data tunggal

disini tidak perlu data sederhana, melainkan bisa berupa kumpulan data atau list yang

lain.

Empty : Keadaan di mana list ada dalam keadaan kosong

Fibonacci : Barisan bilangan yang setiap bilangan merupakan jumlah dari dua bilangan

sebelumnya.

Field : Data yang dimiliki oleh sebuah objek

FIFO : First In First Out sifat suatu kumpulan data. jika sebuah elemen A dimasukkan

lebih dulu dari B maka A harus dikeluarkan dulu dari B

FPB : Faktor Persekutuan terbesar, faktor yang paling besar jika sejumlah bilangan

memiliki beberapa faktor yang sama.

Full : Keadaan di mana list penuh, tidak boleh menerima data lagi

Fungsi : Suatu modul atau bagian program yang mengerjakan suatu program tertentu.

Himpunan : Kumpulan dari objek-objek, misalnya sebuah himpunan dari buah-buahan

dapat terdiri dari pisang, mangga, jambu dll.

Indeks : Bilangan yang digunakan untuk menyatakan posisi suatu elemen dalam array

atau list.

Input : Data masukkan, dalam fungsi berarti parameter yang dimasukkan, sedangkan

dalam program secara keseluruhan berarti data yang dimasukkan pemakai, bisa melalui

parameter program, file maupun lewat keyboard

Insert : Memasukkan sebuah elemen baru ke dalam list. Biasanya insert dilakukan baik di

tengah-tengah list, awal, maupun di akhir list.

Iterasi : Perulangan dengan struktur perulangan, while, do while, maupun for.

Kelas : Suatu struktur yang digunakan sebagai template bagi objekobjek yang sama

sifatnya.

66
Kompilasi : Proses menerjemahkan bahasa sumber (source code) ke dalam bahasa lain,

biasanya bahasa mesin, untuk dapat dijalankan langsung oleh computer melalui system

operasi.

Kompiler : Program yang mengerjakan kompilasi.

Konstruktor : Metode khusus yang dimiliki suatu kelas untuk membentuk suatu objek

baru berdasarkan kelas tersebut

Library : Kumpulan fungsi, makro, template, dan kelas yang disediakan bersama compiler

C++.

LIFO : Last In Fisrt Out, sifat kumpulan data, kebalikan dari FIFO

Linked List : List yang didesain dengan cara mendefinisikan sebuah elemen yang

memiliki hubungan atau link dengan elemen lain yang dihubungkan dengan elemen yang

lain lagi.

Matriks : Dalam matematika berarti kumpulan bilangan yang disusun dalam bentuk kolom

dan baris.

Metode : Fungsi yang dimiliki suatu objek

Objek : Struktur data yang terdiri dari data yang lebih sederhana yang disebut field yang

memiliki operasi sendiri untuk menangani data-data yang dimilikinya.

Output : Data yang dihasilkan oleh program

Pointer : Type data khusus yang pada umumnya berukuran 32 bit yang berfungsi untuk

menampung bilangan tertentu yang menunjuk pada lokasi memory tertentu

Pop : Mengeluarkan satu elemen dari dalam list dengan cara menyalin data elemen

tersebut, kemudian menghapus elemen tersebut dari list biasanya digunakan untuk stack.

Prima : Bilangan yang tidak memiliki faktor selain 1 dan bilangan itu sendiri.

Push : Memasukkan sebuah elemen baru ke dalam list.

Queue : Struktur list dengan sifat FIFO, cara kerjanya seperti antrian manusia.

67
Record : Struktur data yang terdiri dari satu atau lebih elemen yang tipe data bisa

berbeda.

Rekursi : Jenis perulangan yang tidak menggunakan struktur perulangan, tetapi dengan

memanggil fungsi yang bersangkutan.

Sort : Menyusun elemen-elemen suatu list secara berurutan.

Source Code : Program yang ditulis menggunakan bahasa pemrograman tertentu. Kode

sumber belum dapat dijalankan oleh komputer dan perlu menjalani proses kompilasi

sehingga dapat dijalankan.

Stack : List yang memiliki sifar LIFO. Data yang hendak di keluarkan dari stack haruslah

data yang paling terakhir dari stack.

STL : Standar Templete Library merupakan kumpulan yang disertakan dalam setiap

compiler C++ yang memenuhi standar ANSI C++ yang menyediakan berbagai struktur

data, algoritma dan template yang sering dipakai.

Stream : Aliran merupakan konsep dalam C++ untuk input dan ouput data tanpa

memperdulikan isi data maupun media penampung data tersebut.

Struktur kontrol : Struktur yang digunakan untuk mengontrol jalannya program.

Teks : Data yang terdiri dari karakter-karakter yang dapat dibaca (huruf bilangan, tanda

baca).

Tree : Suatu struktur data yang setiap elemen terhubung sedemikian rupa sehingga

berbentuk seperti pohon.

Contoh Program:

Output:

68
DAFTAR RUJUKAN

Heriyanto, Imam, Budi Raharjo (2003). Pemrograman Borland C++ Builder. Informatika

Bandung..

Indrajit, Richardus Eko. Manajemen Sistem Informasi dan Teknologi Informasi.

Indrajit, Richardus Eko. Kajian Strategis Analisa Cost-Benefit Investasi Teknologi

Informasi.

Lidya, Leoni, rinaldi Munir (2002). Algoritama dan Pemrograman dalam Bahas Pascal dan

C.

Informatika Bandung.

Sanjaya, Dwi (2005). Asyiknya Belajar Struktur Data di Planet C++. Elex Media

Komputindo.

Solichin, Achmad (2003). Pemrograman Bahasa C dengan Turbo C. Ilmu Komputer.Com.

Wahono, Romi Satria(2003). Cepat Mahir Bahasa. Ilmu Komputer.Com.

69

Anda mungkin juga menyukai