Modul StrukturData
Modul StrukturData
STRUKTUR DATA
Disusun Oleh :
Alhamdulillah, pertama penulis mengucapkan rasa syukur dan segala puji kepada
Allah SWT yang telah melimpahkan segala Rahmat dan KaruniaNYA, sehingga modul
Struktur Data ini dapat diselesaikan. Modul Struktur Data ini diharapkan dapat
mendukung mahasiswa dalam memahami matakuliah Struktur Data. Modul ini dibuat
berdasarkan sumber-sumber yang sudah banyak digunakan. Pada modul ini membahas
mengenai konsep Struktur Data secara umum. Modul ini membahas mengenai Konsep
Struktur Data & Array, Sistem Bilangan, Representasi Data, Array Dimensi Banyak,
Single Linked List (Non Circular), Stack, Queue, Struktur Pohon & Kunjungan Pohon
Biner, dan Graph . Akhir kata, penulis menyampaikan terimakasih yang tulus kepada
pihak-pihak yang telah memberikan bantuan dan dukungannya sehingga penulis dapat
menyelesaikan penulisan modul ini. Pada akhir kata, penulis memohon maaf yang
sebesar-besarnya jika dalam penulisan modul ini masih banyak kekurangan dan
kelemahannya. Penulis memohon adanya sumbangan ide, kritik dan saran untuk
ii
DAFTAR ISI
iii
6.2 Operasi Stack atau Tumpukan ............................................................................ 54
BAB VII QUEUE (ANTRIAN) ............................................................................................ 59
7.1 Pengertian Queue (Antrian) ................................................................................. 59
7.2 Deklarasi Queue .................................................................................................... 59
7.3 Operasi Pada Queue ............................................................................................. 60
BAB VIII STRUKTUR POHON & KUNJUNGAN POHON BINER ............................. 64
8.1 Pengertian Tree (Pohon) ...................................................................................... 64
8.2 Isilah Dasar dalam Pohon .................................................................................... 64
8.3 Isilah-Istilah dalam Pohon ................................................................................... 64
8.4 Sifat Utama Pohon Berakar ................................................................................. 66
8.5 Pohon Biner (Binary Tree) ................................................................................... 69
8.6 Istilah-istilah Pada Pohon Biner .......................................................................... 70
8.7 Deklarasi Pohon Biner .......................................................................................... 72
8.8 Penyajian Pohon Biner ......................................................................................... 72
BAB IX KUNJUNGAN PADA POHON BINER ............................................................... 74
9.1 Kunjungan Pada Pohon Biner ............................................................................. 74
9.2 Kunjungan Secara PreOrder (Depth First Order) ............................................... 74
9.3 Kunjungan Secara InOrder (Symetric Order)................................................... 76
9.4 Kunjungan PostOrder .......................................................................................... 77
9.5 Kunjungan Level Order ....................................................................................... 78
9.6 Aplikasi Pohon Biner ............................................................................................ 78
BAB X GRAPH DAN MATRIK PENYAJIAN GRAPH .................................................. 80
10.1 Graph ................................................................................................................. 80
10.2 Graph Berlabel .................................................................................................. 82
10.3 Derajat Graph ....................................................................................................... 83
10.4 Multigraph ............................................................................................................. 84
10.5 Keterhubungan ..................................................................................................... 84
10.6 Graph Terarah (Directed Graph / DiGraph) ..................................................... 87
10.7 Graph Tidak Terarah (Undirect Graph) ............................................................ 88
10.8 Critical Path .......................................................................................................... 88
10.9 Minimum Spanning Tree ..................................................................................... 89
10.10 Matriks Penyajian Graph ................................................................................ 89
iv
DAFTAR PUSTAKA ............................................................................................................ 93
v
BAB I
Struktur Data adalah : suatu koleksi atau kelompok data yang dapat
Pemakaian Struktur Data yang tepat didalam proses pemrograman, akan menghasilkan
Algoritma yang lebih jelas dan tepat sehingga menjadikan program secara keseluruhan
lebih sederhana.
Terdiri dari :
1) Integer
...-3,-2,-1,0,1,2,3,....
1
2
2) Real/Float
Type data yang merupakan bilangan pecahan. Jenis Data float ditulis
M = Pecahan, R = Radix,
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
4) Character
Type data yang terdiri dari aksara (simbol) yang meliputi digit
Contoh :
Misalnya : String
Pemberian nilai String diapit dengan tanda petik ganda (“). Bentuk umum
1) Strcpy()
#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) Strcat
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(); }
5
3) Strcmp
#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;
}
4) Strlen
#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
#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);
7
2. Struktur Data
Terdiri dari :
1) Array
2) Record
terdiri dari berbagai type. Satuan data sering disebut sebagai field dari
Terdiri dari :
a. Linier
8
b. Non Linier
Misalnya : Pohon (Tree), Pohon Biner (Binary Tree), Pohon Cari Biner
8, dan 9
5, 6, 7, 8, 9, A, B, C, D, E, dan F
Caranya dengan membagi bilangan tersebut dengan enam belas sampai bilangan
tersebut tidak bisa lagi dibagi enam belas (kurang dari enam belas) dengan
1.4 Array
1. Pengertian Array
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 seluruhnya berupa integer atau character atau String
bahkan dapat pula terjadi suatu Array mempunyai elemen berupa Array.
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();
}
tiga)
Contoh :
Dimana :
Contoh :
int A[5]; dengan alamat awal index berada di 0011 (H) dan ukuran
?
12
pemrograman.
& tiga)
Contoh :
Keterangan :
array,I : Baris
j : kolom
Contoh Pemetaan :
#include<stdio.h>
#include<conio.h>
main()
{
int a[3][5];
for (int i=0;i<3;i++)
{
for (int j=0;j<5;j++)
{
printf("%x ",&a[j][i]);
}
printf("\n");
}
getch();
}
SISTEM BILANGAN
Sistem bilangan adalah suatu cara untuk mewakili besaran dari suatu item fisik.
Konsep dasar sistem bilangan dikarakteristikkan oleh basis (radix), absolute digit dan
Basis yang digunakan sistem bilangan tergantung dari jumlah nilai bilangan
yang dipergunakan.
penulisan:
Bentuk nilai desimal dapat berupa integer (bilangan bulat) dan pecahan. Dapat
ditulis dalam bentuk eksponensial yaitu ditulis dengan mantissa dan exponent.
Contoh:
16
17
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:
setelah absolut digit, yaitu A2 atau A(B). Dalam hal ini yang dituliskan adalah
dituliskan setelah absolut digit, yaitu A8 atau A(O). Dalam hal ini yang dituliskan
absolut digit, yaitu A16 atau A(H). Dalam hal ini yang dituliskan adalah A16.
Dituliskan:
Komputer bekerja atas dasar sistem biner berupa 0 dan 1 yang disebut bit. Bit
merupakan satuan data terkecil dalam sistem komputer. Bit-bit dapat digunakan untuk
menyusun karakter apa saja. Sebuah karakter dinyatakan dengan 8 bit atau 16 bit.
1. Byte
2. Kilobyte (KB)
Biasa digunakan untuk berkas gambar berukuran kecil. 1 Kilobyte = 1024 byte
3. Megabyte (MB)
4. Gigabyte (GB)
5. Terabyte (TB)
6. Petabyte (PB)
1 PB = 1024 TB
kombinasi dari digit Biner. Komputer berbeda dalam menggunakan kode biner untuk
mewakili sebuah karakter. Ada beberapa kode yang akan dibahas, yaitu BCD,
Merupakan kode biner yang digunakan hanya untuk mewakili nilai digit
desimal saja. Sebuah karakter BCD dinyatakan dengan 4 bit Karakter yang
sebanyak 226 karakter, meliputi huruf, angka, dan spesial karakter, termasuk
4. Unicode
sebanyak 65.536 karakter, meliputi huruf, angka, dan spesial karakter, termasuk
Dengan cara membagi bilangan desimal dengan 2 (basis biner) sampai tidak
bisa dibagi lagi. Kemudian sisa pembagian diurutkan dari bawah ke atas dalam
Dengan cara membagi bilangan desimal dengan 8 (basis oktal) sampai tidak
bisa dibagi lagi. Cara yang digunakan sama dengan bilangan biner. Contoh nilai
Dengan cara membagi bilangan desimal dengan 16 (basis hexa) sampai tidak
bisa dibagi lagi. Cara yang digunakan sama dengan bilangan biner.
23
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
Dengan cara membagi digit biner tersebut ke dalam empat digit dari kanan.
Dengan cara mengalikan masing-masing bit octal dalam bilangan sesuai dengan
radix dan position valuenya. Contoh bit 3718 akan dikonversikan menjadi
Desimal.
Dengan cara mengkonversikan setiap satu digit octal menjadi tiga digit biner.
Konversi ini tidak dapat dilakukan secara langsung, tetapi harus dikonversikan
terlebih dahulu ke Desimal atau Biner. Contoh bit 2438 akan dikonversikan
menjadi Hexa.
Dengan cara mengalikan masing-masing bit hexa dalam bilangan sesuai dengan
radix dan position valuenya. Contoh bit 8F16 akan dikonversikan menjadi
Desimal.
Dengan cara mengkonversikan setiap satu digit hexa menjadi empat digit biner.
Konversi ini tidak dapat dilakukan secara langsung, tetapi harus dikonversikan
terlebih dahulu ke Desimal atau Biner sama dengan konversi dari oktal ke hexa.
REPRESENTASI DATA
pemrosesan data, dan operasi logik. Type data yang digunakan dalam komputer digital
diklasifikasikan:
biner.
3. Data Bit Tunggal: digunakan oleh operasi seperti SET, CLEAR, dan TEST.
27
28
biner yang dapat merepresentasikan bilangan Integer direpresentasikan selain oleh nilai
bilangannya juga dengan adanya tambahan tanda (Signed Integer). Berikut ini tipe-tpe
representasi integer :
diidentifikasikan sebagai tanda (sign). Jika bit paling kiri adalah nol maka
bilangan tersebut positif. Jika bit paling kiri adalah satu maka bilangan tersebut
negative.
Contoh:
+1810 = 000100102
−1810 = 100100102
Contoh pengurangan:
Kelemahan Sign-Magnitude:
+010 = 000000002
−010 = 100000002
00110110 = 11001001
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).
Contoh:
31
Contoh: 8 + (-4).
Contoh: 8 + (-11).
Contoh: -8 + (-7)
32
Digunakan untuk mengelola data dalam bentuk 3 dimensi atau tiga sisi.
Contoh :
Suatu Array X dideklarasikan sbb : int A [3][4][2]; maka jumlah elemen Array
33
34
Contoh :
awal index A[0][0][0] berada di 0011(H) dan ukuran type data int = 2 Tentukan
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
36
Contoh :
Diketahui suatu array segitiga atas memiliki 3 baris dan kolom, tentukan
I = N(N+1) / 2
I = 3 (3+1) / 2
= 12 / 2
=6
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
Untuk mengolah data yang banyaknya tidak bisa ditentukan sebelumnya, maka
disediakan satu fasilitas yang memungkinan untuk menggunakan suatu perubah yang
variable) adalah suatu perubah yang akan dialokasikan hanya pada saat diperlukan,
yaitu setelah program dieksekusi. Perbedaan Perubah Statis & Dinamis adalah pada
perubah statis, isi memory pada lokasi tertentu (nilai perubah) adalah data
sesungguhnya yang akan diolah. Sedangkan pada perubah dinamis, nilai perubah
adalah alamat lokasi lain yang menyimpan data sesungguhnya. Dengan demikian data
yang sesungguhnya dapat dimasukkan secara langsung. Dalam hal cara pemasukkan
5.2 Pointer
pemrograman C++, Type Data Pointer dideklarasikan dengan bentuk umum : Type
37
38
Type Data dapat berupa sembarang type data, misalnya char, int atau float.
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)
Setiap simpul dalam suatu Linked List terbagi menjadi dua bagian,yaitu :
1. Medan Informasi
Berisi alamat berikutnya. Bernilai 0, Jika Link tersebut tidak menunjuk ke Data
Linked List juga mengandung sebuah variable Penunjuk List, yang biasanya
diberi nama START (AWAL) yang berisi alamat dari simpul pertama dalam
List.
Berikut ini merupakan contoh dari Penyajian Linked List Dalam Memory :
Kata Single berarti field pointer-nya hanya satu dan satu arah,pada akhir node
Sedangkan Linked List merupakan node-node tersebut saling terhubung satu sama lain.
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya,
dan juga memiliki field yang berisi data. Node terakhir akan menunjuk ke NULL yang
akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
Deklarasi Node :
int data;
TNode *next;
};
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
alokasi memorinya, kemudian node tersebut diisi data dan pointer nextnya
ditunjuk ke NULL.
TNode *baru;
baru->data = databaru;
baru->next = NULL;
Dibutuhkan satu buah variabel pointer : head yang akan selalu menunjuk pada
Gambar 5.7 Contoh Single Linked List Non Circular Menggunakan Head
42
Manipulasi linked list tidak dapat dilakukan langsung ke node yang dituju,
melainkan harus menggunakan suatu pointer penunjuk ke node pertama (Head) dalam
TNode *head;
Fungsi Inisialisasi Single Linked List
void init()
{
head = NULL;
}
Jika pointer head tidak menunjuk pada suatu node maka kosong
int isEmpty()
{
if (head == NULL) return 1;
else return 0;
}
Penambahan node baru akan dikaitan di node paling depan, namun pada saat
pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara: node
head ditunjukkan ke node baru tersebut. Prinsipnya adalah mengkaitkan node baru
dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head
menggunakan C++ :
Penambahan data dilakukan di belakang, namun pada saat pertama kali, node
untuk mengetahui node terbelakang. Kemudian, dikaitkan dengan node baru. Untuk
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++ :
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
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
}
Linked list ditelusuri satu-persatu dari awal sampai akhir node. Penelusuran
dilakukan dengan menggunakan pointer bantu, karena pointer head yang menjadi tanda
awal list tidak boleh berubah/berganti posisi. Penelusuran dilakukan terus sampai
ditemukan node terakhir yang menunjuk ke nilai NULL. Jika tidak NULL, maka node
bantu akan berpindah ke node selanjutnya dan membaca isi datanya dengan
menggunakan field next sehingga dapat saling berkait. Jika head masih NULL berarti
data masih kosong!. Berikut ini contoh listing dengan menggunakan C++ untuk
void tampil(){
TNode *bantu;
bantu = head;
if(isEmpty()==0){
while(bantu!=NULL){
cout<<bantu->data<<" ";
bantu=bantu->next;
}
48
printf(“\n”);
} else printf(“Masih kosong\n“);
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
void init(){
head = NULL;
tail = NULL;
49
int isEmpty(){
else return 0;
Ilustrasi penambahan node didepan dengan head dan tail sebagai berikut :
50
Ilustrasi penambahan node dibelakang dengan head dan tail sebagai berikut :
51
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 mengahous Node di depan
Ilustrasi Menghapus Node di Depan (Dengan Head dan Tail) sebagai berikut :
Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk
oleh pointer, maka harus dilakukan penunjukkan terlebih dahulu dengan variable hapus
pada tail. Jika tail masih NULL maka berarti list masih kosong! Dibutuhkan pointer
bantu untuk membantu pergeseran dari head ke node berikutnya sampai sebelum tail,
sehingga tail dapat ditunjukkan ke bantu, dan bantu tersebut akan menjadi tail yang
baru. Setelah itu hapus pointer hapus dengan menggunakan perintah delete. Berikut
contoh listing dengan menggunakan C++ untuk mengahpus Node di belakang dengan
berikut:
menghapus semua elemen yang berada didalam linked list dengan head dan tail:
void clear()
{
TNode *bantu,*hapus;
bantu = head;
while(bantu!=NULL)
{
hapus = bantu;
bantu = bantu->next;
delete hapus;
}
head = NULL;
tail = NULL;
}
BAB VI
Merupakan bentuk khusus dari Linier List yang pemasukan dan penghapusan
elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir dari List (Top).
1. Deklarasi Stack
Deklarasi MAX_STACK
#define MAX_STACK 5
int top;
int data[5];
};
STACK tumpuk;
2. Inisialisasi
a. Pada mulanya isi top dengan-1, karena array dalam C/C++ dimulai dari 0,
54
55
teratas Stack.
3. Operasi Stack
a. ISEMPTY
b. ISFULL
belum penuh
c. PUSH
d. POP
Digunakan untuk menghapus elemen yang berada pada posisi paling atas
STACK.
stack berkurang 1
e. CLEAR
QUEUE (ANTRIAN)
Struktur Data Antrean (Queue) adalah suatu bentuk khusus dari List Linier
dengan operasi pemasukan data hanya diperbolehkan pada salah satu sisi, yang disebut
sisi Belakang / ekor (Tail) dan operasi penghapusan hanya diperbolehkan pada sisi
lainnya yang disebut sisi Depan / kepala (Head) dari LinkedList. Prinsip Antrean :
FIFO (First In First Out) atau FCFS (First Come First Serve) atau “Yang Tiba lebih
59
60
1. CREATE
2. 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
3. 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
4. ENQUEUE
5. DEQUEUE
Digunakan untuk menghapus elemen terdepan (head) dari Antrian. Dengan cara
: menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1. Penggeseran
6. CLEAR
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head
Antrian tidak lagi terbaca sehingga mengembalikan antrian seperti keadaan semula.
Pohon (Tree) termasuk struktur non linear yang didefinisikan sebagai data yang
Pohon atau Tree adalah salah satu bentuk Graph terhubung yang tidak
mengandung sirkuit. Karena merupakan Graph terhubung, maka pada Pohon (Tree)
selalu terdapat Path atau Jalur yang menghubungkan setiap simpul dalam dua pohon.
Pohon (Tree) dapat juga didefinisikan sebagai kumpulan elemen yang salah satu
elemennya disebut dengan Akar (Root) dan sisa elemen lain (Simpul) yang terpecah
menjadi sejumlah himpunan yang saling tidak berhubungan yang disebut dengan
64
65
1. Predesesor
Node yang berada diatas node tertentu. (contoh : B predesesor dari E dan F)
2. Succesor
succesor dari B)
3. Ancestor
Seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang
4. Descendant
Seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang
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 :
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)
Node-node dalam tree yang tidak memiliki daun (contoh : Node E,F,C,G,H)
Banyaknya child yang dimiliki oleh suatu node (contoh : Node A memiliki
Pembentukan Pohon
67
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
3. Mempunyai Simpul yang disebut sebagai Daun / Leaf, jika Simpul tersebut
4. Setiap Simpul mempunyai Tingkatan / Level yang dimulai dari Root yang
yang mempunyai Level sama disebut Bersaudara atau Brother atau Stribling.
Level tertinggi
6. Pohon mempunyai Weight atau Berat atau Bobot, yang banyaknya daun (leaf)
pada Pohon.
Hutan (Forest) adalah kumpulan Pohon yang tidak saling berhubungan. Diketahui
Level 1 = Simpul P
Dalam gambar Pohon T diatas dapat dibentuk 2 buah hutan (forest), bila
2 (N) – 1
2 (4) – 1 = 16 – 1 = 15
h. Banyaknya Simpul maksimum untuk setiap Level I (bila simpul pada pohon
= 2 (2-1) = 2
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 /
Berikut ini diberikan contoh gambar Pohon Binar (Binary Tree) dengan
Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki
Hampir sama dengan Pohon Biner Penuh, semua simpul (kecuali daun)
Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda.
Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun
Dalam setiap simpul selalu berisi dua buah Pointer untuk menunjuk ke cabang
Kiri dan cabang Kanan dan informasi yang akan disimpan dalam simpul tersebut.
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
:
73
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.
Kunjungan pada Pohon Biner merupakan salah satu operasi yang sering
dilakukan pada suatu Pohon Biner tepat satu kali (Binary Tree Traversal). Operasi
semacam ini, Ketiga kunjungan diatas disebut dengan Left To Right Oriented (LRO).
Jika kunjungan ke Cabang Kanan dilakukan lebih dahulu baru kemudian kunjungan ke
Cabang Kiri, maka Orientasi semacam ini disebut Right To Left Oriented (RLO).
Mempunyai Urutan :
1. Cetak isi simpul yang dikunjungi (simpul akar)
Contoh :
74
75
secara preorder :
76
secara inorder :
77
secara postorder :
78
Selain kunjungan yang dijelaskan diatas, masih ada satu macam kunjungan
masih ada satu macam kunjungan lagi yaitu kunjungan LevelOrder. Kunjungan dimulai
dari simpul yang ada pada tingkat 1 (Akar), diteruskan pada simpul di tingkat 2, tingkat
3 dan seterusnya. Secara singkat kunjungan Level Order ini dapat dijelaskan sebagai
berikut.
Pada saat Akar tersebut dikeluarkan dari antrean, cabang kiri dan cabang kanan
secara berturut-turut dimasukkan dalam antrean. Dengan kata lain jika suatu elemen
dikeluarkan dari antrean, maka cabang kiri dan kanan dari elemen yang baru saja
Pada bagian ini akan dibahas tentang bagaimana menyusun sebuah Pohon Binar
yang apabila dikunjungi secara PreOrder akan menghasilkan Notasi Prefix, kunjungan
Notasi Postfix.
79
Berdasarkan Gambar diatas, apabila dilakukan kunjungan secara PreOrder, maka akan
+A*BC (Gambar.a)
*+AB-BC (Gambar.b)
^-*+ABC-DE+FG (Gambar.c)
Jika dilakukan kunjungan secara InOrder, akan diperoleh Notasi Infixnya, yaitu :
(A+(B*C)) (Gambar.a)
Jika dilakukan kunjungan secara PostOrder, akan diperoleh Notasi Postfixnya, yaitu :
ABC*+ (Gambar.a)
AB+BC-* (Gambar.b)
AB+C*DE--FG+^ (Gambar.c)
BAB X
10.1 Graph
Graph merupakan salah satu dari beberapa struktur data yang paling sering
menggunakan penyimpanan data yang bersifat eksternal, kita mungkin tidak terlalu
representasi internal dalam memori computer untuk suatu struktur data, graph tidak
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
yang terkait pada struktur data yang bersangkutan. Sebagai contoh, pohon biner
dibentuk dengan cara seperti itu karena bentuknya memudahkan pemrograman untuk
1. Himpunan V yang elemennya disebut simpul (Vertex atau Point atau Node atau
Titik)
Contoh :
e1 = (A,B) e4 = (C,D)
e2 = (B,C) e5 = (B,D)
e3 = (A,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.
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
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
83
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
Karena setiap ruas dihitung dua kali ketika menentukan derajat suatu Graph, maka :
Jumlah derajat semua simpul suatu Graph (derajat) = dua kali banyaknya ruas Graph
Pada gambar diatas Jumlah Semua Simpul = 4, maka Jumlah Derajat Semua
Simpul = 8. Jika Derajat masing-masing simpul pada Graph berjumlah Genap maka
10.4 Multigraph
genap/ganjil. Kalau terdapat self loop, maka dihitung 2 kali pada derajat 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-
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.
1. Walk disebut tertutup, yang menghubungkan V1 dan Vn, yaitu setiap ruas
2. Trail adalah walk dengan semua ruas dalam barisan adalah berbeda
3. Path atau jalur adalah walk yang semua simpul dalam barisan adalah berbeda.
Graph merupakan Walk Terbuka, karena tidak ada ruas yang menghubungkan
Simpul U dan T. Merupakan suatu Path atau Trail terbuka dengan derajat setiap
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 :
a. Barisan ruas a,b,c,d,b,c,g,h adalah Walk bukan Trail (karena ruas b dua
kali muncul).
Graph yang tidak mengandung Cycle disebut Acyclic. Contoh dari Graph
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
atau arkus.
Contoh, Gambar dibawah ini adalah sebuah Graph Berarah D(V,A) dengan :
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
Bila arkus suatu Graph Berarah menyatakan suatu bobot, maka Graph Berarah
situasi dinamis. Bila V’ himpunan bagian dari V serta A’ himpunan bagian dari A,
dengan titik ujung anggota A’ terletak di dalam V’, maka dikatakan bahwa D’(V’,A’)
adalah Graph bagian (Subgraph) dari D(V,A). Bila A’ mengandung semua arkus
88
anggota A yang titik ujungnya anggota V’, maka dikatakan bahwa D’(V’,A’) adalah
dan V2 ke V1 ( 2 arah). Bila Verteks = n, maka Graph tak terarah komplit akan
Merupakan Spanning Tree yang mempunyai Bobot dan tidak mempunyai arah
dengan hasil penjumlahan bobotnya adalah minimum. Lihat gambar Graph G berikut :
Bentuk kembali semua simpul tetapi tanpa ruas. Gambar dan telusuri ruas dengan bobot
Misalnya disajikan Graph G dalam Matriks ruas B ukuran (M x 2), maka setiap
menghubungkan simpul 4 dan 7. Matriks Adjacency dari Graph G, yaitu Matriks yang
menghubungkan Vertex dengan Vertex, tanpa ruas sejajar adalah Matriks A berukuran
(N x N) yang bersifat :
90
Matriks Adjacency merupakan matriks simetri. Untuk Graph dengan ruas sejajar,
sebagai berikut : 1, bila ada ruas ej berujung di simpul Vi dan mij = 0, dalam hal lain.
Penelusuran Graph
pengecekan pada Node dengan kedalaman pertama dari Node yang ditinjau.
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,
DAFTAR PUSTAKA
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++.
Edisi 3. Mitra Wacana Media : Jakarta.