MAHARANI Merangkum Materi Struktur Data F4
MAHARANI Merangkum Materi Struktur Data F4
OLEH:
MAHARANI
NIM.2237004
Kumu, ..............................
MAHARANI
NIM.2237004
ii
DAFTAR ISI
KATA PENGANTAR..................................................................................................II
DAFTAR ISI................................................................................................................III
iv
BAB IX KUNJUNGAN PADA POHON BINER......................................................45
10.1 GRAPH.....................................................................................................................49
10.2 GRAPH BERLABEL...................................................................................................50
10.3 DERAJAT GRAPH.....................................................................................................50
10.4 MULTIGRAPH..........................................................................................................51
10.5 KETERHUBUNGAN...................................................................................................51
10.6 GRAPH TERARAH (DIRECTED GRAPH / DIGRAPH).................................................52
10.7 GRAPH TIDAK TERARAH (UNDIRECT GRAPH)........................................................53
10.8 CRITICAL PATH.......................................................................................................53
10.9 MINIMUM SPANNING TREE.....................................................................................54
10.10 MATRIKS PENYAJIAN GRAPH.................................................................................54
DAFTAR PUSTAKA...................................................................................................57
v
BAB I
KONSEP STRUKTUR DATA & ARRAY
1.1 Pengertian Struktur Data
Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh
organisasi serta operasi yang didefinisikan terhadapnya. Pemakaian Struktur Data yang tepat
didalam proses pemrograman, akan menghasilkan Algoritma yang lebih jelas dan tepat sehingga
menjadikan program secara keseluruhan lebih sederhana.
KONSEP DASAR TIPE DATA
Pada garis besarnya, Data dapat dikategorikan menjadi :
1. Type Data Sederhana / Data Sederhana
Terdiri dari :
a. Data Sederhana Tunggal
Misalnya : Integer, Real/Float, Boolean dan Character
1) Integer
Merupakan Bilangan Bulat dan tidak mengandung pecahan. seperti :
...-3,-2,-1,0,1,2,3,....
2) Real/Float
Type data yang merupakan bilangan pecahan. Jenis Data float ditulis
dgn menggunakan titik(koma) desimal. Misalnya : 0.32 4,35 -131.128 Type
Real dapat juga ditulis dengan Rumus :
M = Pecahan, R = Radix,
e = Exponen, X = Hasil
Bilangan, Misalnya : 3.2 * 10-1 = 0.32
4.35 * 102 = 435
3) Boolean
Type data yang hanya mempunyai dua bentuk keluaran yaitu nilai
True dan False (Benar dan Salah) yang dinyatakan dengan 1 dan 0,
Sehingga satuan data yang terpakai cukup satu bit saja. Operator yang
digunakan adalah : And, Or dan Not.
1
4) Character
Type data yang terdiri dari aksara (simbol) yang meliputi digit
numerik, character alfabetik dan special character. Untuk menuliskan tipe
char, karakter perlu ditulis di dalam tanda petik tunggal ( ‘ ). Contoh :
‘A’ _ karakter berupa huruf
A ‘1’ _ karakter berupa angka 1 ‘*’ _
karakter 3ymbol *
b. Data Sederhana Majemuk
Misalnya : String
String merupakan type data majemuk yang terbentuk dari kumpulan
character sebanyak 256 (default) dengan jangkauan niai 0 - 255. Kumpulan
character yang digunakan untuk membentuk String dinamakan alfabet.
Pemberian nilai String diapit dengan tanda petik ganda (“). Bentuk umum
penulisan tipe data ini adalah : tipe_data pengenal [panjang] ;
pengenal = nama variabel
panjang = bilangan bulat yg menunjukan jumlah
karakter Contoh : char nama[15] ;
2. Fungsi pada Operasi STRING
1) Strcpy()
Digunakan untuk menyalin nilai
string. Contoh menggunakan program C++:
#include
<iostream.h> #include
<conio.h> #include
<string.h> #include
<stdio.h> main()
{
char
asal[100]; char
hasil[100]; clrscr();
cout<<"Masukan kalimat : ";
gets(asal); strcpy(hasil,asal);cout<<endl;
cout<<"Kalimat asal : "<<asal<<endl;
cout<<"Kalimat hasil : "<<hasil<<endl;
getch(); }
2
2) Strcat
Digunakan untuk menggabungkan nilai
string. Contoh menggunakan program c++:
int main() {
char string1 [] ="Belajar";
char string2 [] ="Logika Algortima";
cout<<"Menggabungkan String"<<endl;
cout<<"-------------------"<<endl;
cout<<"string1 :
"<<string1<<endl; cout<<"string2 :
"<<string2<<endl; strcat(string1, string2);
cout<<"\nSetelah digabung, string1 sekarang menjadi:
"<<string1<<endl;
getche(); }
Hasil Tampilan dari Program diatas sebagai berikut :
3) Strcmp
Digunakan untuk membandingkan 2 nilai
string. Contoh dalam penggalan program c++:
#include <iostream.h>
#include <stdio.h> #include
<conio.h> main()
{
char sa[]="Logika";
char sb[]="Logika Algoritma";
char sc[]="Logika Algoritma & Pemprograman";
/*Melakukan perbandingan terhadap dua string dan penampilan
nilainya*/
printf("Nilai Yang dibandingkan sa,sb : %d\
n",strcmp(sa,sb)); printf("Nilai Yang dibandingkan sa,sc : %d\
n",strcmp(sa,sc)); printf("Nilai Yang dibandingkan sb,sa : %d\
n",strcmp(sb,sa)); getch();
return 0;
}
3
4) Strlen
Digunakan untuk mengetahui panjang nilai
string. Contoh dalam penggalan program c++:
#include <iostream.h>
#include <conio.h> #include
<string.h> main()
{
char nama[50] = "Logika
Algoritma"; char kosong[50] = "";
clrscr();
cout << "jumlah karakter dari nama adalah " << strlen(nama) << endl;
cout << "jumlah karakter dari kosong adalah " << strlen(kosong) << endl;
getch();}
5) Strchr
Digunakan untuk mencari nilai karakter dalam
string. Contoh dalam penggalan program C++:
#include <stdio.h>
#include <conio.h>
#include <string.h> int
main(void){
char str [100]="Aisyah
Zahra"; char karakter='Z';
char *hasil;
hasil=strchr(str,karakter); printf("Hasil
Peubah :%s\n",hasil);
printf("Karakter %c ditemukan pada indeks ke-%d",karakter,(hasil-
str));
getch();
return 0; }
4
1.1.1 Struktur Data
Terdiri dari :
a. Struktur Data Sederhana Misalnya
Array dan Record
1) Array
Adalah tipe tersetruktur yang terdiri dari sejumah komponen yang
mempunyai tipe yang sama. Jenis Array dibedakan menjadi 3 jenis: array 1
dimensi, 2 dimensi dan multidimensi
2) Record
Sebuah record merupakan koleksi satuan data yang heterogen, yakni
terdiri dari berbagai type. Satuan data sering disebut sebagai field dari
record. Field dipanggil dengan namanya masing-masing.
b. Struktur Data Majemuk Terdiri dari :
a. Linier
Misalnya : Stack, Queue dan Linear Linked List.
b. Non Linier
Misalnya : Pohon (Tree), Pohon Biner (Binary Tree), Pohon Cari Biner
(Binary Search Tree), General Tree serta Graph.
1.2 Konversi Bilangan
Array / Larik : Struktur Data Sederhana yang dapat didefinisikan sebagai pemesanan
alokasi memory sementara pada komputer. Array dapat didefinisikan sebagai suatu
himpunan hingga elemen yang terurut dan homogen. Terurut : Dapat diartikan bahwa
elemen tersebut dapat diidentifikasi sebagai elemen pertama, elemen kedua dan seterusnya
sampai elemen ke-n. Homogen : Adalah bahwa setiap elemen dari sebuah. Array tertentu
haruslah mempunyai type data yang sama. Sebuah Array dapat mempunyai elemen yang
5
seluruhnya berupa integer atau character atau String bahkan dapat pula terjadi suatu Array
mempunyai elemen berupa Array.
1.3.2 Karakteristik Array
Contoh :
void main()
{ int bil [5];
clrscr;
cout<<"Masukkan 5 bilangan genap :
"<<endl; for (int i = 0; i < 5; i++)
{ cout<<"Bilangan
"; cout<< i + 1 <<" : ";
cin>> bil[i]; cout<<endl;
}
cout<<endl;
cout<<"5 bilangan genap yang dimasukkan “
<<endl; for (int i = 0; i < 5; i++)
cout<<" "<<bil[i];
getch();
}
6
2) Rumus untuk menentukan jumlah elemen dalam Array :
Dimana :
Keterangan :
8
3) Pemetaan Array Dimensi Dua
Contoh Pemetaan :
Suatu Array X dideklarasikan sebagai berikut : Float X[4][3],
dengan alamat index X[0][0] berada di 0011(H) dan ukuran type data
float = 4. Tentukan berapa alamat array X[3][2] berdasarkan cara
pandang baris dan kolom ?
9
Gambar 1.3 Tampilan Program Array Dimensi Dua
10
BAB II
SISTEM BILANGAN
Basis yang digunakan sistem bilangan tergantung dari jumlah nilai bilangan yang
dipergunakan.
1. Sistem Bilangan Desimal
Sistem bilangan desimal menggunakan basis 10 (deca). Menggunakan 10
macam simbol bilangan berbentuk digit angka: 0,1,2,3,4,5,6,7,8,9. Dasar penulisan:
Bentuk nilai desimal dapat berupa integer (bilangan bulat) dan pecahan.
Dapat ditulis dalam bentuk eksponensial yaitu ditulis dengan mantissa dan exponent.
Contoh:
Penulisan base/radix dituliskan setelah absolut digit, yaitu A10, atau A(D).
Dalam hal ini yang dituliskan adalah A10. Contoh nilai 435210 dan 762,1510 dapat
diartikan:
11
Contoh penulisan: 3478
4. Sistem Bilangan Hexadecimal
Sistem bilangan hexadesimal menggunakan basis 16 (hexa). Menggunakan 16
macam simbol bilangan berbentuk digit angka:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Penulisan base/radix dituliskan setelah absolut digit,
yaitu A16 atau A(H). Dalam hal ini yang dituliskan adalah A16. Dituliskan:
Contoh penulisan: A7816
12
2.3.2 EBCDIC (Extended Binary Coded Decimal Interchange Code)
EBCDIC dikembangkan oleh IBM, yang diterapkan pada berbagai komputer mainframe.
Sebuah karakter dinyatakan dengan 8 bit. Karakter yang tersedia sebanyak 28 = 226 karakter.
Digunakan pada komputer generasi ketiga.
13
2.3.4 Unicode
Sebuah karakter Unicode dinyatakan dengan 16 bit. Karakter yang tersedia sebanyak 65.536
karakter, meliputi huruf, angka, dan spesial karakter, termasuk simbol Yunani, karakter grafis,
simbol Arab dan Cina.
Dengan cara membagi bilangan desimal dengan 8 (basis oktal) sampai tidak
bisa dibagi lagi. Cara yang digunakan sama dengan bilangan biner. Contoh nilai 14710
akan dikonversikan menjadi Oktal.
Dengan cara membagi bilangan desimal dengan 16 (basis hexa) sampai tidak
bisa dibagi lagi. Cara yang digunakan sama dengan bilangan biner.
Contoh nilai 12310 akan dikonversikan menjadi Hexa
14
4. Konversi dari Bilangan Biner ke Desimal
Dengan cara mengalikan masing-masing bit biner dalam bilangan sesuai
dengan radix dan position value-nya. Contoh bit 11 01012 akan dikonversikan
menjadi Desimal.
Dengan cara membagi digit biner tersebut ke dalam tiga digit dari kanan.
Ketiga digit tersebut kemudian dikonversikan menjadi decimal. Contoh bit 1010
10112 akan dikonversikan menjadi Oktal.
Dengan cara membagi digit biner tersebut ke dalam empat digit dari kanan.
Keempat digit tersebut kemudian dikonversikan menjadi decimal. Contoh bit
101010112 akan dikonversikan menjadi Hexa.
15
Maka dituliskan menjadi 718 = 0011 10012
9. Konversi dari Bilangan Oktal ke Hexadesimal
Konversi ini tidak dapat dilakukan secara langsung, tetapi harus
dikonversikan terlebih dahulu ke Desimal atau Biner. Contoh bit 2438 akan
dikonversikan menjadi Hexa.
Maka dituliskan menjadi 2438 = A316
Dengan cara mengkonversikan setiap satu digit hexa menjadi empat digit
biner. Contoh bit 8F16 akan dikonversikan menjadi Biner
16
7
BAB III
REPRESENTASI DATA
Untuk keperluan pengolahan dan penyimpanan data komputer, hanya bilangan biner yang
dapat merepresentasikan bilangan Integer direpresentasikan selain oleh nilai bilangannya juga
dengan adanya tambahan tanda (Signed Integer). Berikut ini tipe-tpe representasi integer :
17
8
b. Pengurangan pada Sign-Magnitude mempunyai aturan:
Kelemahan Sign-Magnitude:
−010 = 100000002
0+0=0
1+0=1
0+1=1
1 + 1 = 0 (carry out 1)
Maksud dari carry out, hasilnya tidak bisa memuat lebih dari 1 digit, tetapi disimpan ke
dalam kolom sebelah yang lebih tinggi nilainya (digit paling kiri yang diabaikan).
1. Penjumlahan Biner dengan Komplemen Dua
Ada beberapa kasus yang dapat dilakukan dengan komplemen dua:
18
9
Contoh: 8 + (-4).
Caranya bilangan -4 akan diubah ke dalam bentuk komplemen dua,
sehingga biner 4 (0100) menjadi:
Contoh: 8 + (-11).
Caranya bilangan -11 akan diubah ke dalam bentuk komplemen dua,
sehingga biner 11 (1101) menjadi:
Contoh: -8 + (-7)
Caranya bilangan -8 dan -7 akan diubah ke dalam bentuk
komplemen dua, jadi biner 8 (1000) dan 7 (0111) menjadi:
19
0
BAB IV
ARRAY DIMENSI BANYAK
Contoh :
20
1
Tringular Array dapat merupakan Upper Tringular (seluruh elemen di bawah diagonal
utama = 0), ataupun Lower Tringular (seluruh elemen di atas diagonal utama = 0). Dalam Array
Lower Tringular dengan N baris, jumlah maksimum elemen <> 0 pada baris ke-I adalah = I,
karenanya total elemen <> 0, tidak lebih dari
21
2
Contoh :
Diketahui suatu array segitiga atas memiliki 3 baris dan kolom, tentukan
berapakah jumlah elemen yang bukan nol pada array tersebut.
I= N(N+1) / 2
I= 3 (3+1) / 2
= 12 / 2
=6
Contoh bentuk array nya adalah seperti dibawah ini :
Suatu Array Upper Tringular dan Array Lower Tringular dapat dengan order
yang sama, dapat disimpan sebagai suatu array dengan order yang berbeda,
Contohnya :
Sparse Array
Suatu Array yang sangat banyak elemen nol-nya, contohnya adalah Array A
pada Gambar berikut :
22
BAB V
SINGLE LINKED LIST (NON CIRCULAR)
5.2 Pointer
Type Data dapat berupa sembarang type data, misalnya char, int atau float.
Sedangkan Nama variabel merupakan nama variabel pointer Contoh penggunaan pointer
dalam program C++:
Void main()
{
int x,y,*z;
x = 75; //nilai x = 75
y = x; //nilai y diambil dari nilai x
z = &x; //nilai z menunjuk kealamat pointer dari
nilai x
getch();
}
Salah satu Struktur Data Dinamis yang paling sederhana adalah Linked List atau
Struktur Berkait atau Senarai Berantai, yaitu suatu kumpulan komponen yang disusun secara
berurutan dengan bantuan Pointer. Linked List (Senarai Berantai) disebut juga dengan
Senarai Satu Arah (One-Way List). Masing-masing
23
Berikut ini merupakan perbedaan karakteristik Array dengan Linked List :
Setiap simpul dalam suatu Linked List terbagi menjadi dua bagian,yaitu :
1. Medan Informasi
Berisi informasi yang akan disimpan dan diolah.
Berikut ini merupakan contoh dari Penyajian Linked List Dalam Memory :
24
5.4 Single Linked List Non Circular
Keterangan:
a. Pembuatan struct bernama TNode yang berisi 2 field, yaitu field data bertipe
integer dan field next yang bertipe pointer dari TNode
b. Setelah pembuatan struct, buat variabel head yang bertipe pointer dari TNode
yang berguna sebagai kepala linked list.
c. Digunakan perintah new untuk mempersiapkan sebuah node baru berserta alokasi
memorinya, kemudian node tersebut diisi data dan pointer nextnya ditunjuk ke
NULL.
TNode *baru;
Dibutuhkan satu buah variabel pointer : head yang akan selalu menunjuk pada node
pertama. Berikut contohnya :
Gambar 5.7 Contoh Single Linked List Non Circular Menggunakan Head
25
1. Deklarasi Pointer Penunjuk Head Single Linked List
Manipulasi linked list tidak dapat dilakukan langsung ke node yang dituju, melainkan harus
menggunakan suatu pointer penunjuk ke node pertama (Head) dalam linked list. Deklarasinya
sebagai berikut:
TNode *head;
Fungsi Inisialisasi Single Linked List void init()
{
head = NULL;
}
int isEmpty()
{
if (head == NULL) return 1; else return 0;
}
26
Gambar 5.8 Ilustrasi penambahan node didepan
4. Menambah Node di Belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali, node langsung
ditunjuk oleh head. Penambahan di belakang membutuhkan pointer bantu untuk mengetahui node
terbelakang. Kemudian, dikaitkan dengan node baru. Untuk mengetahui data terbelakang perlu
digunakan perulangan.Berikut contoh listing penambahan node di belakang dengan menggunakan
C++ :
27
5. Menghapus Node di Depan
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer,
maka harus dilakukan penggunakan suatu pointer lain (hapus) yang digunakan untuk menunjuk
node yang akan dihapus, barulah kemudian menghapus pointer hapus dengan menggunakan
perintah delete. Sebelum data terdepan dihapus, terlebih dahulu head harus menunjuk ke node
berikutnya agar list tidak putus, sehingga node setelah head lama akan menjadi head baru. Jika head
masih NULL maka berarti data masih kosong!. Berikut contoh listing menghapus node didepan
dengan menggunakan C++ :
Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk
node yang akan dihapus, pointer bantu untuk menunjuk node sebelum node yang dihapus
yang akan menjadi node terakhir. Pointer bantu digunakan untuk menunjuk ke nilai NULL.
Pointer bantu selalu bergerak sampai sebelum node yang akan dihapus, kemudian pointer
hapus diletakkan setelah pointer bantu. Selanjutnya pointer hapus akan dihapus, pointer
bantu akan menunjuk ke NULL. Berikut ini contoh listing menghapus node di belakang
dengan menggunakan C++ :
28
Ilustrasi penghapusan node dibelakang sebagai berikut:
29
5.7 Singled Linked List Non Circular Menggunakan Head dan Tail
Dibutuhkan dua variabel pointer : head dan tail. Head selalu menunjuk pada node pertama,
sedangkan tail selalu menunjuk pada node terakhir. Kelebihan dari Single Linked List dengan
Head & Tail adalah pada penambahan data di belakang, hanya dibutuhkan tail yang mengikat node
baru saja tanpa harus menggunakan perulangan pointer bantu.
30
Gambar 5. 14 Ilustrasi penambahan node didepan dengan head dan tail
31
6. Menghapus Node di Depan (Dengan Head dan Tail)
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh
pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan pointer hapus pada head,
kemudian dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi
head baru, kemudian menghapus pointer hapus dengan menggunakan perintah delete. Jika
tail masih NULL maka berarti list masih kosong!. Berikut contoh listing dengan
menggunakan C++ untuk menghapus Node di depan dengan Head dan Tail :
Ilustrasi Menghapus Node di Depan (Dengan Head dan Tail) sebagai berikut :
32
Ilustrasi Menghapus Node di Belakang (Dengan Head dan Tail) sebagai berikut:
33
BAB VI
STACK ATAU TUMPUKAN
6.1 Pengertian Stack atau tumpukan
Merupakan bentuk khusus dari Linier List yang pemasukan dan penghapusan elemennya
hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari List (Top). Prinsip Stack adalah
LAST-IN-FIRST-OUT (LIFO).
Deklarasi MAX_STACK
#define MAX_STACK 5
typedef struct
STACK{ int top;
int data[5];
};
STACK tumpuk;
3. Inisialisasi
a. Pada mulanya isi top dengan-1, karena array dalam C/C++ dimulai dari 0, berarti
stack adalah KOSONG
b. TOP adalah variable penanda dalam STACK yang menunjukkan elemen teratas
Stack.
c. TOP of STACK akan selalu bergerak hingga mencapai MAX of STACK
sehingga menyebabkan stack PENUH
34
4. Operasi Stack
A. ISEMPTY
Digunakan untuk memeriksa apakah stack masih dalam kondisi kosong. Dengan
cara memeriksa TOP of STACK. Jika TOP masih = -1 maka berarti stack masih
kosong.
B. ISFULL
Digunakan untuk memeriksa apakah kondisi stack sudah penuh. Dengan
cara memeriksa TOP of Stack. Jika TOP of STACK = MAX_STACK-1 maka
FULL (Penuh). Jika TOP of STACK < MAX_STACK-1 maka belum penuh
C. PUSH
Untuk menambahkan item pada posisi paling atas (TOP). Digunakan
untuk memasukkan elemen ke dalam stack dan selalu menjadi elemen teratas
stack. Dengan cara :
1) Menambah satu (increment) nilai TOP of STACK setiap ada penambahan
elemen stack selama stack masih belum penuh
2) Isikan nilai baru ke stack berdasarkan indeks TOP of STACK setelah
ditambah satu (diincrement)
36
BAB VII
QUEUE (ANTRIAN)
A. CREATE
37
B. ISEMPTY
Untuk memeriksa apakah Antrian penuh atau kosong. Dengan cara memeriksa nilai
Tail, jika Tail = -1 maka antrian kosong (empty). Head adalah tanda untuk kepala antrian
(elemen pertama dalam antrian) yang tidak akan berubah-ubah. Pergerakan pada Antrian
terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail
C. ISFULL
Untuk mengecek apakah Antrian sudah penuh atau belum. Dengan cara : Mengecek
nilai Tail. Jika tail = MAX-1 berarti antrian sudah penuh (MAX-1 adalah batas elemen array
dalam program C++)
D. ENQUEUE
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu dilakukan
pada elemen paling belakang. Penambahan elemen selalu menggerakan variable Tail dengan
cara menambahkan Tail terlebih dahulu.
38
Berikut merupakan penggalan listing enqueue dengan menggunakan C++ :
E. DEQUEUE
Digunakan untuk menghapus elemen terdepan (head) dari Antrian. Dengan
cara: menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1.
Penggeseran dilakukan dengan menggunakan looping. Berikut merupakan penggalan
listing dequeue dengan menggunakan C++ :
F. CLEAR
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan
Head= -1. Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus
arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga
elemen-elemen Antrian tidak lagi terbaca sehingga mengembalikan antrian seperti
keadaan semula. Berikut merupakan penggalan listing clear dengan menggunakan C+
+:
39
BAB VIII
STRUKTUR POHON & KUNJUNGAN POHON BINER
2. Succesor
Node yang berada dibawah node tertentu. (contoh : E dan F merupakan
succesor dari B)
3. Ancestor
Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang
sama. (contoh : A dan B merupakan ancestor dari F)
4. Descendant
Seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang
sama. (contoh : F dan B merupakan ancestor dari A)
5. Parent
Predesesor satu level diatas satu node (contoh : B merupakan parent dari F)
6. Child
Succesor satu level dibawah satu node (contoh : F merupakan child dari B)
7. Sibling
Node yang memiliki parent yang sama dengan satu node (contoh : E dan F
adalah sibling)
8. Subtree
Bagian dari tree yang berupa suatu node beserta descendant-nya (contoh :
Subtree B, E, F dan Subtree D, G, H)
40
9. Size
Banyaknya node dalam suatu tree (contoh : gambar tree diatas memiliki size =
8)
10. Height
Banyaknya tingkat/level dalam suatu tree (contoh : gambar tree diatas
memiliki height = 3)
11. Root (Akar)
Node khusus dalam tree yang tidak memiliki predesesor (Contoh : A)
12. Leaf (Daun)
Node-node dalam tree yang tidak memiliki daun (contoh : Node E,F,C,G,H)
13. Degree (Derajat)
Banyaknya child yang dimiliki oleh suatu node (contoh : Node A memiliki
derajat 3, node B memiliki derajat 2)
1. Jika Pohon mempunyai Simpul sebanyak n, maka banyaknya ruas atau edge adalah
(n-1).
2. Mempunyai Simpul Khusus yang disebut Root, jika Simpul tersebut memiliki derajat
keluar >= 0, dan derajat masuk = 0.
3. Mempunyai Simpul yang disebut sebagai Daun / Leaf, jika Simpul tersebut berderajat
keluar = 0, dan berderajat masuk = 1.
4. Setiap Simpul mempunyai Tingkatan / Level yang dimulai dari Root yang Levelnya
= 1 sampai dengan Level ke – n pada daun paling bawah. Simpul yang mempunyai
Level sama disebut Bersaudara atau Brother atau Stribling.
5. Pohon mempunyai Ketinggian atau Kedalaman atau Height, yang merupakan Level
tertinggi
6. Pohon mempunyai Weight atau Berat atau Bobot, yang banyaknya daun (leaf) pada
Pohon.
7. Banyaknya Simpul Maksimum sampai Level N adalah :
41
Hutan (Forest) adalah kumpulan Pohon yang tidak saling berhubungan. Diketahui
suatu bentuk Pohon Berakar T sebagai berikut :
Dalam gambar Pohon T diatas dapat dibentuk 2 buah hutan (forest), bila
simpul P dihilangkan, yaitu : Hutan 1 : Q,R,S Hutan 2 : T,U,V,W
g. Banyaknya Simpul Maksimum yang dapat terbentuk sampai Level 4 (bila
simpul pada pohon dianggap penuh) adalah :
2 (N) – 1
2 (4) – 1 = 16 – 1 = 15
= 2 (2-1) = 2
42
Gambar 8.3 Banyak Simpul setiap Level
8.2 Pohon Biner (Binary Tree)
Struktur ini biasanya digunakan untuk menyajikan data yang mengandung hubungan
hirarkial antara elemenelemennya. Bentuk Pohon Berakar yang lebih mudah dikelola dalam
komputer adalah Pohon Biner (Binary Tree) yang lebih dikenal sebagai Pohon Umum (General
Tree) yang dapat didefinisikan sebagai kumpulan simpul yang mungkin kosong atau mempunyai
akar dan dua Subpohon yang saling terpisah yang disebut dengan Subpohon Kiri / cabang kiri (Left
Subtree) dan Subpohon Kanan / cabang kanan (Right Subtree).
Karakteristik Pohon Binar (Binary Tree) :
43
3. Pohon Biner Similer
Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda.
Dalam setiap simpul selalu berisi dua buah Pointer untuk menunjuk ke cabang Kiri dan
cabang Kanan dan informasi yang akan disimpan dalam simpul tersebut.
44
Gambar 8.10 Ilustrasi Pohon Biner
8.2.4 Penyajian Pohon Biner
Tree dapat dibuat dengan menggunakan linked list secara rekursif. Linked list yang
digunakan adalah double linked list non circular. Data yang pertama kali masuk akan menjadi node
root. Data yang lebih kecil dari data node root akan masuk dan menempati node kiri dari node root,
sedangkan jika lebih besar dari data node root, akan masuk dan menempati node di sebelah kanan
node root. Bila diberikan untai HAKJCBL, maka proses untuk dapat membentuk pohon biner dari
untai diatas adalah:
1. Karakter pertama ‘H’ ditempatkan sebagai akar (root)
2. Karakter ‘A’,karena lebih kecil dari ‘H’, maka akan menempati cabang kiri.
3. Karakter ‘K’, karena lebih besar dari ‘H’, maka akan menempati cabang kanan.
4. Karakter ‘J’, lebih besar dari ‘H’ dan kecil dari ‘K’, maka menempati cabang kiri
‘K’.
5. Karakter ‘C’,karena lebih besar dari ‘A’, maka akan menempati cabang kanan.
6. Karakter ‘B’, karena lebih kecil dari ‘C’, maka akan menempati cabang kiri.
7. Karakter ‘L’, lebih besar dari ‘K’, maka menempati cabang kiri kanan.
45
BAB IX
KUNJUNGAN PADA POHON BINER
46
Berikut ini merupakan pengganlan listing menggunakan C++ untuk
kunjungan secara preorder :
47
9.1.3 Kunjungan PostOrder
48
9.2 Aplikasi Pohon Biner
Pada bagian ini akan dibahas tentang bagaimana menyusun sebuah Pohon Binar yang
apabila dikunjungi secara PreOrder akan menghasilkan Notasi Prefix, kunjungan secara InOrder
menghasilkan Notasi Infix, dan kunjungan PostOrder menghasilkan Notasi Postfix.
*+AB-BC (Gambar.b)
^-*+ABC-DE+FG (Gambar.c)
Jika dilakukan kunjungan secara InOrder, akan diperoleh Notasi Infixnya, yaitu :
(A+(B*C)) (Gambar.a)
((A+B) * (B-C)) (Gambar.b)
Jika dilakukan kunjungan secara PostOrder, akan diperoleh Notasi Postfixnya, yaitu
: ABC*+ (Gambar.a)
AB+BC-* (Gambar.b)
AB+C*DE--FG+^ (Gambar.c)
49
BAB X
GRAPH DAN MATRIK PENYAJIAN GRAPH
10.1 Graph
Graph merupakan salah satu dari beberapa struktur data yang paling sering diaplikasikan
dalam pemrogrman computer. Jika kita memutuskan untuk menggunakan penyimpanan data yang
bersifat eksternal, kita mungkin tidak terlalu membutuhkan graph, tetapi untuk beberapa
permasalahan dimana kita memerlukan representasi internal dalam memori computer untuk suatu
struktur data, graph tidak bisa dihindari penggunaannya.
Secara konseptual, graph merupakan suatu struktur data yang agak berbeda dengan pohon
(tree). Dalam kenyataannya, pohon merupakan salah satu jenis graph; pohon merupakan kasus
khusus dari graph. Dalam pemrograman computer untuk berbagai terapan, graph sering digunakan
dalam berbagai cara yang relative lebih bermanfaat dibandingkan dengan pohon. Struktur-struktur
data memiliki algoritma yang terkait pada struktur data yang bersangkutan. Sebagai contoh, pohon
biner dibentuk dengan cara seperti itu karena bentuknya memudahkan pemrograman untuk
melakukan pencarian data dan melakukan penyisipan data. Suatu Graph mengandung 2 himpunan,
yaitu :
1. Himpunan V yang elemennya disebut simpul (Vertex atau Point atau Node atau
Titik)
2. Himpunan E yang merupakan pasangan tak urut dari simpul. Anggotanya
disebut Ruas (Edge atau rusuk atau sisi). Graph seperti dimaksud diatas, ditulis
sebagai G(E,V).
Banyaknya simpul (vertex) disebut Order, sedangkan banyaknya ruas (edge) disebut Size
dari Graph.
Contoh :
Gambar berikut menanyakan Graph G(E,V) dengan :
a. V mengandung 4 simpul, yaitu simpul A,B,C,D.
Gambar dibawah ini menyatakan suatu Multigraph. Disini, ruas e2 pada kedua titik
ujungnya adalah simpul yang sama, yaitu simpul A. Ruas semacam ini disebut Gelung atau
Self-Loop. Sedangkan ruas e5 dan e6 mempunyai titik ujung yang sama, yaitu simpul-simpul
B dan C. Kedua ruas ini disebut ruas berganda atau ruas sejajar.
50
Gambar 10.2 Contoh Multigraph
51
Suatu Graph yang tidak mengandung ruas sejajar maupun self-loop, sering disebut
juga sebagai Graph sederhana atau simple Graph. Suatu Graph G’(E’,V’) disebut Sub
Graph dari G(E,V), bila E’ himpunan bagian dari E dan V’ himpunan bagian dari V. Jika E’
mengandung semua ruas dari E yang titik ujungnya di V’, maka G’ disebut Subgraph yang
direntang oleh V’(Spanning Subgraph).
Contoh Sub Graph
Graph G disebut berlabel jika ruas dan atau simpulnya dikaitkan dengan suatu besaran
tertentu. Khususnya jika setiap Ruas e dari G dikaitkan dengan suatu bilangan non negatif d(e),
maka d(e) disebut bobot atau panjang dari ruas e. Contoh : Gambar berikut ini menyajikan
hubungan antar kota. Disini simpul menyatakan kota dan label d(e) menyatakan jarak antara dua
kota.
Derajat simpul V, ditulis d(v) adalah banyaknya ruas yang menghubungi v. Karena setiap
ruas dihitung dua kali ketika menentukan derajat suatu Graph, maka : Jumlah derajat semua simpul
suatu Graph (derajat) = dua kali banyaknya ruas Graph (Size) Atau dapat dituliskan :
52
Gambar 10.6 Euler Graph
Pada gambar diatas Jumlah Semua Simpul = 4, maka Jumlah Derajat Semua Simpul = 8.
Jika Derajat masing-masing simpul pada Graph berjumlah Genap maka Graph tersebut disebut
EULER Graph.
10.4 Multigraph
Suatu simpul disebut genap/ganjil tergantung apakah derajat simpul tersebut genap/ganjil.
Kalau terdapat self loop, maka dihitung 2 kali pada derajat simpul.
Pada gambar diatas, banyak ruas/size = 7, sedangkan derajat masing-masing simpul adalah :
d(A) = 2, d(B) = 5, d(C) = 3, d(D) = 3, d(E) = 1, d(F) = 0 maka, total jumlah derajat simpul adalah :
14. E disebut simpul bergantung/akhir, yaitu simpul yang berderajat satu. Sedangkan F disebut
simpul terpencil, yaitu simpul yang berderajat Nol.
10.5 Keterhubungan
Walk atau perjalanan dalam Graph G adalah barisan simpul dan ruas berganti- ganti :
V1,e1,V2,e2,......., e n-1, Vn. Disini ruas ei menghubungkan simpul Vi dan Vi+1. Banyaknya ruas
disebut Panjang Walk. Walk dapat ditulis lebih singkat dengan hanya menulis deretan ruas : e1,e2,
...., en-1 atau deretan simpul : V1, V2,. , Vn-1,
Vn dimana : V1 = simpul awal, Vn = simpul akhir. Walk disebut tertutup bila V1 = Vn.
1. Walk disebut tertutup, yang menghubungkan V1 dan Vn, yaitu setiap ruas
menghubungkan simpul awal dan akhir.
2. Trail adalah walk dengan semua ruas dalam barisan adalah berbeda
3. Path atau jalur adalah walk yang semua simpul dalam barisan adalah berbeda. Jadi
suatu path pastilah sebuah Trail.
53
Graph merupakan Walk Terbuka, karena tidak ada ruas yang menghubungkan Simpul U dan
T. Merupakan suatu Path atau Trail terbuka dengan derajat setiap simpulnya = 2, kecuali simpul
awal U dan simpul akhir T berderajat = 1.
Cycle atau sirkuit adalah suatu Trail tertutup dengan derajat setiap simpul = 2. Cycle dengan
panjang k disebut dengan k-cycle. Demikian pula jalur dengan panjang k disebut k-jalur.
Contoh :
Graph yang tidak mengandung Cycle disebut Acyclic. Contoh dari Graph Acyclic
adalah pohon atau Tree..
Suatu Graph G disebut terhubung jika untuk setiap 2 simpul dari Graph terdapat jalur yang
menghubungkan 2 simpul tersebut. Subgraph yang terhubung pada suatu Graph disebut komponen
dari G bila Subgraph tersebut tidak terkandung dalam subgraph terhubung lain yang lebih besar.
Contoh :
2. A mengandung 7 arkus, yaitu (1,4) ,(2,1), (2,1),(4,2), (2,3), (4,3) dan (2). Arkus (2,2)
disebut gelung (self-loop), sedangkan arkus (2,1) muncul lebih dari satu kali, disebut
arkus sejajar atau arkus berganda.
55
10.9 Minimum Spanning Tree
Merupakan Spanning Tree yang mempunyai Bobot dan tidak mempunyai arah dengan hasil
penjumlahan bobotnya adalah minimum. Lihat gambar Graph G berikut :
Langkah yang dilakukan untuk membentuk minimum spanning tree adalah : Bentuk kembali
semua simpul tetapi tanpa ruas. Gambar dan telusuri ruas dengan bobot paling kecil, seterusnya
(secara ascending) hingga semua simpul terhubung.
Matriks Adjacency merupakan matriks simetri. Untuk Graph dengan ruas sejajar,
Matriks Adjacency didefinisikan sebagai berikut : P, bila ada p buah ruas menghubungkan
aij = (Vi, Vj)(p>0) dan 0, bila dalam hal lain.
Matriks Incidence dari Graph G, yaitu Matriks yang menghubungkan Vertex dengan
Edge, tanpa self-loop didefinisikan sebagai Matriks M berukuran (NXM) sebagai berikut : 1,
bila ada ruas ej berujung di simpul Vi dan mij = 0, dalam hal lain.
56
Gambar 10.17 Matriks Incidence
Penelusuran Graph Dapat dilakukan dengan 2 cara, yaitu :
57
2. Beradth First Search (BFS)
Berbeda dengan cara BFS, dengan BFS penelusuran akan diawasi dari Node-1,
kemudian melebar pada Adjacent Node dari Node-1 dan diteruskan pada Node-2, Node- 3
dan seterusnya.
58
DAFTAR PUSTAKA
Frieyadie. 2006. Panduan Pemrograman C++. Andi : Yogyakarta Kadir, Abdul. 2003.
Kristanto, Andri. 2003. Struktur Data Dengan C++. Penerbit Graha Ilmu. Yogyakarta
Nugroho, Adi. 2009. Algoritma Dan Struktur Data Dalam Bahasa Java. Andi : Yogyakarta
Sjukani. Moh. 2009. Struktur Data (Algoritma & struktur Data 2) Dengan C, C++.
59