Anda di halaman 1dari 53

TUGAS AKHIR

STRUKTUR DATA

Nama : Ahmad Jundan


Nim : 2016140667
Kelas : 03 TPLM009

1. Pembahasan Materi
- Stack
- Queue
- Linked list
- Sorting
2. Contoh Program

 STACK / Tumpukan
Stack atau tumpukan adalah struktur data dimana semua penyisipan dan penghapusan
data hanya dilakukan melalui satu pintu saja yang disebut Top Stack. Tumpukan atau stack dapat
dikatakan sebagai struktur yang bersifat (Last In Frist Out).

Operasi dasar yang dilakukkan dalam stack ada 2 (dua) yaitu :


1. Menambah Elemen (Push)
2. Menghapus Elemen (Pop)

1. Push
Oprasi push adalah menambah elemen kedalam stack S, dimana penambahan dapat
dilakukkan jika stack itu belum penuh. {stack dikatakan penuh jika posisi atas sudah
brada pada posisi N (if S. atas = N then stack is full)}

Push (x, s ) adalah memasukkan x kedalam stack s

Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1
S isi [ s atas ] = x
Else
Atas = 0
Stack sudah penuh

Stack s

Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1
S isi [ s atas ] = x
Else Atas = 1
Stack sudah penuh

Stack s
Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1
S isi [ s atas] = k
Else Atas = 1
Stack sudah penuh

Stack s

Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1
Atas =2
S isi [s atas]= x
Else
Stack sudah penuh

Stack s

Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1
S isi [ s atas] = k Atas =2
Else
Stack sudah penuh

Stack s

Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1 Atas =3

S isi [ s atas] = x
Else
Stack sudah penuh

Stack s
Prosedur Push
x = tipe data
S = Stack
If s atas < n then
S atas = s atas + 1 Atas =3
S isi [ s atas] = k

Else
Stack sudah penuh

Stack s

Prosedur Push
x = tipe data
S = Stack Atas =5
If s atas < n then
S atas = s atas + 1
S isi [ s atas] = k
Else

Stack sudah penuh

Stack s

2. Pop
Pop adalah menghapus elemen dari stack, dimana elemen yang dihapus adalah elemen
yang terakhir masuk LIFO (Last in first out) atau elemen penghapusan dimana proses
penghapusan dapat dilakukan jika stack tidak dalam keadaan kosong. { if s atas >0 then
stack tidak kosong }. Dimana setiap penghapusan, maka posisi yang paling atas akan
berkurang 1 ( s atas = s atas – 1).

Prosedur Pop
If s atas >0 then
Write s isi [s atas]
S atas = s atas – 1
Else
Stack kosong

Prosedur Pop
if s atas > 0 then Atas =5
write s isi [s atas]
s atas = s atas - 1
else
stack kosong

Stack s
Prosedur Pop
if s atas > 0 then
write s isi [s atas] Atas = 4
s atas = s atas - 1
else
stack kosong

Stack s

Prosedur Pop
if s atas > 0 then
write s isi [s atas] Atas = 4
s atas = s atas - 1
else
stack kosong

Stack s

Prosedur Pop
if s atas > 0 then
write s isi [s atas] Atas = 3
s atas = s atas - 1
else
stack kosong

Stack s

Prosedur Pop
if s atas > 0 then
write s isi [s atas]
s atas = s atas - 1
else
stack kosong
Atas = 0

Stack s
Oprasi-oprasi / Fungsi Stack
- Init : digunakan untuk inisialisasi atau membuat stack baru yang masih
kosong.
- Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
- Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
- Clear : digunakan untuk mengosongkan stack
- IsEmpty : digunakan untuk mengecek apakah stack sudah kosong
- IsFull : digunakan untuk mengecek apakah stack sudah penuh

Inisialisasi Stack
- Isi top degan -1 karena array dalam c dimulai dari 0, yang berarti stack adalah kosong
- Top adalah sautu variable penanda dalam stack yang menunjukkan elemen teratas stack
sekarang. Top of stack akan selalu bergerak hingga mencapai max of stack sehingga
menyebabkan stack penuh !

Ilustrasi stack pada saat inisialisasi !

4 Max _ Stack
3
2 Void inisialisasi ( )
{
1
Tumpuk Top = -1 ;
0 }

Top = - 1
- Fungsi IsFull
1. Untuk Memeriksa apakah stack sudah penuh.
2. Dengan cara memeriksa top of stack, jika sudah sama dengan max_stack -1 maka
full, jika belum / masih lebih kecil dari max_stack -1 maka belum full

Ilustrasi stack pada kondisi full / penuh

4 Max _ Stack int IsFull ( )


3 {
Top
if (tumpuk.top == MAX_Stack -1 )
2
Return 1 ;
1 else
0 Return 0;
}

- Fungsi IsEmpty
1. Untuk memeriksa apakah stack masih kosong
2. Dengan cara memeriksa top of stack, jika masi -1 maka berarti stack masih kosong

int IsEmpty ( )
{
if (tumpuk.top == -1 )
Return 1 ;
else
Return 0;
}
- Fungsi Clear
1. Untuk mengosongkan stack
2. Stack akan dianggap kosong bila ujung atas stack pada posisi - 1

Void clear ( )
{
tumpuk.top == -1;
printf (“Stack telah dikosongkan \n”);

Berikut adalah sebuah prongram stack


 QUEUE

Queue adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan
pada satu ujung (disebut dengan sisi belakang atau rear) dan penghapusan dan pembembalian
elemen dilakkukan lewat ujung lain (disebut sisi belakang atau front), antrian menggunkan
prinsip pertama masuk pertama keluar First out (FIFO). Dengan kata lain urutan masuk sama
dengan urutan keluar.
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, seperti : antrian tiket
mobiil, antrian mahasiswa dan lain lain . contoh lain dalam bidang computer adalah pemakaian
system computer berbagi waktu (time sharing computer system) dimana ada sejumlah pemakai
yang akan menggunakan system tersebut secara serempak.
Pada queue atau antrian terdapat satu buah pintu masuk di suatu ujung dan satu buah
pintu keluar di ujung satunya dimana membutuhkan variable head dan tail (depan/front,
belakang/rear)

Karakteristik Queue atau antrian :


1. Elemen antrian
2. Front (elemen terdepan antrian)
3. Tail ( elemen terakhir)
4. Jumlah pada antrian
5. Status antrian

Operasi pada Queue atau antrian


1. Tambah (menambah item pada belakang antrian)
2. Hapus (menghapus elemen depan dari antrian)
3. Kosong ( mendektesi apakah pada antrian mengandung elemen atau tidak )

Operasi Queue :
1. Create ( )
Untuk menciptakan dan menginisialisasikan Queue, dengan cara membuat Head
dan Tail = -1

Deklarasi Queue

#define MAX 8
Typedef struct
{
int data [MAX];
int head;
int tail;
}
Queue;

Queue antrian ;

0 1 2 3 4 5 6 7 MAX =8

Head = -1 Antrian pertama kali


Tail = -1

Void create ( ) {
Antrian. Head = antrian.tail = -1 }
2. IsEmpty ( )
Untuk memeriksa apakah antrian suah penuh atau belum dengan cara memeriksa
nilai Tail, jika Tail = -1 maka empty kita tidak memeriksa Head, Karena Head adalah
tanda untuk kepala antian (elemen pertama dalam antrian ) yang tidak akan berubah-
ubah. Pergerakan pada antrian terjadi dengan penambahan elemen antrian kebelakang,
yaitu menggunakan nilai Tail.

0 1 2 3 4 5 6 7 MAX =8
Antrian pertama kali
Head = -1 Karena Tail = -1
Tail = -1
Int IsEmpty ( ) {
If (antrian .tail== -1 }
return 1 ;
Else
Return 0;
}

3. IsFull
Untuk mengecek apakah antrian sudah penuh atau belum dengan cara mengecek
nili Tail, jika Tail > = MAX -1 (Karena MAX -1 adalah batas elemen array pada C )
berarti sudah penuh

4 45 1 8 5 12 7 78

0 1 2 3 4 5 6 7 MAX =8
Antrian pnuh karena
Head = 0 Tail = MAX -1 Tail = 7

Int IsFull ( ) {
If (antrian .tail== MAX -1 }
return 1 ;
Else Return 0;
}

4. Enqueue
Untuk menambahkan elemen ke dalam antrian, penambahan elemen selalu
ditambahkan di elemen paling belakang. Penambahan elemen selalau menggerakan
variable Tail dengan cara increment conter Tail terlebih dahulu.

4 45 1 8

0 1 2 3 4 5 6 7 MAX =8
Head = 0 Tail = 2 Tail = 3 Equeue(8)
Void Equeue (int data) {
If (Empty ( ) == 1 ) {
Antrian.head=antrian.tail=0;
Antrian.data [antrian.tail]= data;
Print (“%d masuk!”,antrian.data [antrian.tail] );
}else
If(IsFull( ) ==0){
Antrian.tail ++;
Antrian.data[antrian.tai]=data;
Printf(“%d masuk !”, antrian.data[antrian.tail]);
}
}
5. Dequeue
Digunakan untuk menghapus elemen terdepan/pertama (head) dari antrian dengan
cara mengeser semua elemen antrian kedepan dan mengurangi Tail dengan 1 pergeseran
dilakukan dengan menggunakan looping.

4 45 1 8

0 1 2 3 4 5 6 7 MAX =8

Head = 0 Tail =3 Dequeue()

45 1 8

0 1 2 3 4 5 6 7
MAX =8
Head = 0 Tail =2
Maju semua tail

Int Dequeue ( ) {
Int i ;
Int e = antrian.data [antrian.head];
For (i = antrian.head d; i <=antrian.data [i +1];
}
antrian.tail --;
return e;
}

6. 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 antrian tidak lagi
terbaca.

4 45 1 8

0 1 2 3 4 5 6 7 MAX =8
Head = 0
Tail = -1 Void Clear () {
{
Antrian.head=antrian.tail= -1;
Printf (“data clear”);
}
7. Tampilan ( )
Untuk menampilkan nilai-nilai elemen antrian menggunakan looping dari head
s/d tail
Void Tampil ( )
{
If (IsEmpty ( ) == 0) {
For (int i =antrian.head; i <=antrian.tail; i ++ ) {
Printf (“%d “, antrian.data [i]);
}
} else printf (“data kosong !\n”) ;
}

Berikut contoh programnya


 LINKED LIST

Linked list sejumlah objek yang delink/dihubungkan satu denga lainnya.

Linked list adalah bentuk sederhana, yang merupakan sekumpulan nod yang bersama-sama
membentuk sebuah urutan linier. Setiap node akan meyimpan sebuah pointer yang disebut degan
Next, yang menunju node berikutnyya pada list.

Setiap node menyimpan 2 buah informasi ;


1. Next Link / next ponter
- Berisi alamat dari node berikutnya
- Berisi Null, jika merupakan akhir dari list
- Next link ini diimplementasikan dengan menggunakan ponter
2. Data atau infomasi atau nilai

ILustrasi sebuah node pada link linst

ILustrasi beberapa node pada linked list

FIRST head
LAST tail

INFO LINK INFO LINK INFO LINK INFO LINK

1 2 3 4

Node pertama dalam sebuah list disebut sebagai head. Node terakhir dari sebuah list disebut
dengan tail.

 Pembagian Linked List


Secara garis besar linked list dibedakan atas 4 macam, yaitu ;
1. Linear Singly Linked List
2. Linear Double Linked List
3. Circular Singly Linked List
4. Circular Double Linked List
1. Linear Singly Linked List

FIRST head
LAST tail

INFO LINK INFO LINK INFO LINK INFO LINK

1 2 3 4

Keterangan ;
1. Pada gambar di atas terdapat 4 node / simpul. Simpul 1, 2, 3 dan 4.
2. Setiap simpul memiliki 2 elemen (field) yaitu;
Info = menyimpann data atau informasi dan memiliki tipe data, pada contoh di atas
memiliki tipe data integer.
Link= bertipe pointer, menyimpan alamat simpul berikutnya.
Contoh ;
Simpul no. 1
Info= 25
Link=alamat ke simpul nomor 2
3. Simpul no 1 ditunjuk oleh pointer First dan disebut Head, simpul nomor 4 ditunjuk oleh
ponter Last dan sebut Tail.

 Proses Linier Singly Linked List


1. Pembuatan Struktur data
2. Inisialisasi persiapan pembuatan linked list
3. Membuat simpul
4. Membuat simpul baru dan menambahkannya ke linked list
5. Menghapus simpul dari linked list

1. Pembuatan Struktur data linked list


Membuat struktur yang digunakan sebagai sebuah simpul.

Pada sebuah simpul terdapat 2 bua field yaitu, Info dan Pointer Link (*Link).
Membutuhkan 3 pointer yaitu ;
- *P = menyimpan atau menunjuk alamat node yang diproses saat ini
- *First = menyimpan atau menunjuk alamat dari simpul pertama
- *Last = menyimpan atau menunjuk alamat dari simpul terakhir.

2. Inisialisasi linked list


Untuk membuat kondisi awal pada sebuah linked list. Adalah dengan cara mengisi
pointer First dengan Null.

- Sintak ;
First=NULL;
First=NULL berarti pinter First akan berisi NULL (\0)
- Ilustrasi

- Pembuatan simpul

Instruksi untuk membuat sebuah simpul :


P=(SIMPUL*) malloc(sizeof(SIMPUL));
Akan terbentuk sebuah simpul yang alamatnya tersimpan dalam pointer
P. Ilustrasi :

Fungsi untuk membuat simpul :


void BUAT_SIMPUL(int X)
{
P=(SIMPUL*) malloc(sizeof(SIMPUL));
if(P!=NULL)
{
P->INFO=X;
}
Else
cout<<”Pembuatan simpul gagal”;
}

- Ilustrasi

3. Membuat simpul
Menjadikan sebuah simpul menjadi simpul awal dari sebuah linked list.
Simpul awal ditunjuk oleh pointer FIRST.

- Fungsi :

Void AWAL(void)
{
if(FIRST==NULL)
{
FIRST=P;
LAST=P;
P->LINK=NULL;
}
else
cout<<”Linked List sudah ada””<<endl;
}

- lustrasi :
Sudah dibuat simpul sbb:

FIRST=P

LAST=P atau
LAST=FIRST

P->LINK=NULL atau
FIRST->LINK=NULL atau
LAST->LINK=NULL

4. Membuat simpul baru dan menambahkannya ke linked list


# Insert Kanan
Menyisipkan sebuah simpul baru pada ujung kanan linked list.
Proses :
- sudah ada linked list
- buat simpul baru
- sisipkan simpul baru tsb diujung kanan linked list

- Fungsi :
- Ilustrasi
Sudah ada linked list

Buat simpul baru


P=(SIMPUL *)malloc(sizeof(SIMPUL));

LAST->LINK=P atau
FIRST->LINK=P

LAST=P atau
LAST=FIRST->LINK

P->LINK=NULL atau
LAST->LINK=NULL atau
FIRST->LINK->LINK=NULL

# Insert Kiri

Menyisipkan sebuah simpul baru pada ujung kiri linked list.


Proses :
- sudah ada linked list
- buat simpul baru
- sisipkan simpul baru tsb diujung kiri linked list

- Fungsi

- Ilustrasi
Sudah ada linked list

Buat simpul baru


P=(SIMPUL *)malloc(sizeof(SIMPUL));

P->LINK=FIRST atau
P->LINK=LAST

FIRST=P

# Insert Tengah
Menyisipkan sebuah simpul antara dua buah simpul pada linked list.

setelah diinsert menjadi

Syarat : simpul no.7 harus sudah ditunjuk oleh pointer Q, caranya :

Q=FIRST;
For(i=1;i<=6;i++)
Q=Q->LINK;

- Fungsi :
Void INSERT_TENGAH(void)
{
{
P->LINK=Q->LINK;
Q->LINK=P;
}

- Ilustrasi :

Sudah ada linked list

Buat simpul baru


P=(SIMPUL *)malloc(sizeof(SIMPUL));

P->LINK=Q->LINK

Q->LINK=P

# Delete Kanan/Akhir
Menghapus simpul yang ada pada linked list paling akhir/kanan.

Ilustrasi

sudah ada sebuah linked list

akan dihapus simpul terakhir menjadi :


Syarat agar simpul no.8 dapat dihapus adalah simpulno.7 sudah
ditunjuk oleh pointer Q.
Caranya :
Q = FIRST;
while(Q ->LINK != LAST)
Q = Q -> LINK;
Fungsi :
void DELETE_KANAN(void)
{
free(LAST);
LAST = Q;
LAST -> LINK = NULL;
}

Ilustrasi :

Sudah ada linked list

free(LAST)

LAST = Q

LAST -> LINK = NULL

# Delete Kiri / Awal

Menghapus simpul yang ada pada linked list paling awal/kiri.

Ilustrasi :
sudah ada sebuah linked list

akan dihapus simpul awal menjadi

Fungsi :
void DELETE_KIRI(void)
{
Q = FIRST;
FIRST = Q -> LINK;
free(Q);
}

Ilustrasi

Sudah ada linked list

Q = FIRST

FIRST = Q -> LINK

free(Q)
# Delete Tengah

Menghapus simpul yang ada diantara dua simpul lain.

Ilustrasi :

sudah ada linked list

simpul no.7 akan dihapus sehingga menjadi :

Syarat agar simpul no.7 bisa dihapus maka simpul no.6 harus sudah
ditunjukoleh Q.
Caranya :
Q = FIRST;
For(I = 1; I <= 5; I++)
Q = Q -> LINK;

Fungsi :
void DELETE_TENGAH(void)
{
R = Q -> LINK;
Q -> LINK = R -> LINK;
free(R);
}

lustrasi

Sudah ada linked list

R = Q -> LINK
Q -> LINK = R -> LINK

free(R)

Ccontoh Program nya ;


 TREE

Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan
hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa
didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root
dan node lainnya. Tree juga adalah suatu graph yang acyclic, simple, connected yang tidak
mengandung loop.
Sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong, dan setiap
nodenya harus memiliki identifier/value. Value pada semua node subpohon sebelah kiiri
adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di sebelah kanan
adalah sama atau lebih besar dari value pada root, masing-masing subpohon tersebut (kiri dan
kanan) itu sendiri adalah juga binary search tree.
Struktur data bst sangat penting dalam struktur pencarian, misalkan dalam kasus
pencarian dalam sebuah list, jika list sudah dalam keadaan terurut maka proses pencarian akan
semakin cepat, jika kita menggunakan list contigue dan melakukan pencarian biner,akan
tetapi jika kita ingin melakukan perubahan isi list (insert atau delete), menggunakan list
contigue akan sangat lambat, karena prose insert dan delete dalam list contigue butuh
memindahkan linked-list, yang untuk operasi insert atau delete tinggal mengatur- atur
pointer,akan tetapi pada n-linked list, kita tidak bisa melakukan pointer sembarangan setiap
saat, kecuali hanya satu kali dengan kata lain hanya secara squential.

 Pengertian Binary Tree

Binary Tree merupakan salah satu bentuk struktur data tidak linear yang
menggambarkanhubungan yang bersifat hirarkis (hubungan one to many) antara elemen-
elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus
yang disebut Root dan node lainnya ( disebut subtree).

Dalam tree terdapat jenis-jenis tree yang memiliki sifat khusus, diantaranya adalah binary
tree.

Binary tree adalah suatu tree dengan syarat bahawa tiap node (simpul) hanya boleh
memiliki maksimal dua subtree dan kedua subtree tersebut harus terpisah. Tiap node dalam
binary treee boleh memiliki paling banyak dua child (anak simpul), secara khusus anaknya
dinamakan kiri dan kanan.

Binary Tree merupakan himpunan vertex-vertex yang terdiri dari 2 subtree (dengan
disjoint) yaitu subtree kiri dan subtree kanan. Setiap vertex dalam binary tree mempunyai
derajat keluar max = 2.

Sebuah pohon biner adalah grafik asiklis yang terhubung dimana setiap tingkatan dari
susut tidak lebih dari 3. Ini dapat ditunjukkan bahwa dalam pohon biner manapun, terdapat
persis dua atau lebih simpul dengan tingkat satu daripada yang terdapat dengan tingkat tiga,
tetapi bisa terdapat angka apa saja dari simpul dengan tingkat dua. Sebuah pohon biner
berakar merupakan sebuah grafik yang mempunyai satu dari sudutnya dengan tingkat tidak
lebih dari dua sebagai akar.
Dengan akar yang dipilih, setiap sudut akan memiliki ayah khusus, dan diatas dua anak
bagaimanapun juga, sejauh ini terdapat keterbatasan informasi untuk membedakan antara
anak kiri atau kanan. Jika kita membuang keperluan yang tak terkoneksi, membolehkan
bermacam koneksi dalam komponen di grafik, kita memanggil struktur sebuah hutan.

Sebuah jalan lain untuk mendefinisikan pohon biner melalui definisi rekursif pada grafik
langsung. Sebuah pohon biner dapat berarti :

- Sebuah sudut tunggal.


- Sebuah graf yang dibentuk dengan mengambil dua pohon biner, menambahkan
sebuah sudut, dan menambahkan sebuah panah langsung dari sudut yang baru ke akar
dai setiap pohon biner.

Pohon biner dapat dikontruksi dari bahasa pemrogaraman primitif dalam berbagai cara.
Dalam bahasa yang menggunakan records dan referensi. Pohon biner secara khas dikontruksi
dengan mengambil sebuah struktur simpul pohon yang memuat beberapa data dan referensi
ke anak kiri dan anak kanan.

Kadang-kadang itu juga memuat sebuah referensi ke ayahnya yang khas. Jika sebuah simpul
mempunyai kurang dari dua anak, beberapa penunjuk anak diaatur kedalam nilai nol khusus
atau kesebuah simpul sentinel.

Pohon biner dapat juga disimpan sebagai struktur data implisit dalam array, dan jika pohon
tersebut merupakan sebuah pohon biner lengkap, metode ini tidak boros tempat. Dalam
penyusunan yang rapat ini, jika sebuah simpul memiliki indeks i, anaknya dapat ditemukan
pada indeks ke-2i+1 dan 2i+2, meskipun ayahnya (jika ada) ditemukan pada indeks lantai ((i-
1)/2) (asumsikan akarnya memiliki indeks kosong). Metode ini menguntungkan dari banyak
penyimpanan yang rapat dan memiliki referensi lokal yang lebih baik, teristimewa selama
sebuah preordeer traversal.

 Istilah-istilah dalam pohon


1. Predesesor
Node yang berada diatas node tertentu.
(contoh : B predesesor dari E dan F)
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)
Istilah – istilah Dalam Pohon
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)
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)

 Istilah pada pohon Binar


a. Pohon Biner Penuh (Full Binary Tree)

Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki panjang ruas yang
sama.

b. Pohon Biner Lengkap (Complete Binary Tree)

Hampir sama dengan Pohon BinerPenuh, semua simpul (kecualidaun) memiliki 2 anak tetapi
tiap cabang memiliki panjang ruas berbeda.
c. Pohon Biner Similer

Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda.

d. Pohon Biner Ekivalent

Dua pohon yang memiliki struktur dan informasi yangsama.

e. Pohon Biner Miring (Skewed Tree)

Dua pohon yang semua simpulnya mempunyai satu anak / turunan kecuali daun.

 Sifat utama Pohon Berakar


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 :

2 (N) - 1

8. Banyaknya Simpul untuk setiap Level I adalah :

N
∑ 2 ( I – 1)
I=1

 Kunjungan pada pohon Biner

Kunjungan pohon biner terbagi menjadi 3 bentuk binary tree :

1. Kunjungan secara preorder ( Depth First Order), mempunyai urutan :


a. Cetak isi simpul yang dikunjungi ( simpul akar ),
b. Kunjungi cabang kiri,
c. Kunjungi cabang kanan .
2. Kunjungan secara inorder ( symetric order), mempunyai urutan :
a. Kunjungi cabang kiri,
b. Cetak isi simpul yang dikunjungi (simpul akar),
c. Kunjungi cabang kanan .

3. Kunjungan secara postorder, mempunyai urutan :


a. Kunjungi cabang kiri,
b. Kunjungi cabang kanan,
c. Cetak isi simpul yang dikunjungi ( simpul akar ).

 Aplikasi pohon Biner

Notasi Prefix, Infix dan Postfix


Pada bagian ini akan dibahas tentang bagaimana menyusun sebuah Pohon Binar yang
apabila dikunjungisecara PreOrder akan menghasilkan Notasi Prefix,kunjungan secara
InOrder menghasilkan Notasi Infix, dankunjungan PostOrder menghasilkan Notasi
Postfix.

2.1. Contoh Program


 SORTING
adalah suatu proses pengurutan data yang sebelumnya disusun secara acak atau tidak
teratur menjadi urut dan teratur menurut suatu aturan tertentu.

Beberapa program sorting terbagi menjadi :

- Bubble Sort,

- Insertion Sort,

- Selection Sort

- Merge Sort dan

- Quick Sort.

1. Bubble Sort

Bubble = busa/udara dalam air –apa yang terjadi?Busa dalam air akan naik ke atas. Mengapa?
Ketika busa naik ke atas, maka air yang di atasnya akan turun memenuhi tempat bekas busa
tersebut.

Pada setiap iterasi, bandingkan elemen dengan sebelahnya: yang busa naik, yang air turun!
Tehnik Sort yg bekerja dgn menggunakan prinsip gelembung (bubble) udara yg akan bergerak
naik ke atas secara satuper satu.

 Prinsip Kerja dari Bubble Sort adalah :


1.Pengecekan mulai dari data ke-1 sampai data ke-n
2.Bandingkan data ke-n dengan data sebelumnya (n-1)
3.Jika lebih kecil maka pindahkan bilangan tersebut dengan bilangan yg ada
didepannya ( sebelumnya ) satu persatu (n-1,n-2,n-3,....dst)
4.Jika lebih besar maka tidak terjadi pemindahan
5.Ulangi langkah 2 dan 3 s/d sort optimal.
Contoh program nya :

2. Selection Sort

Kondisi awal:Unsorted list = data


Sorted list = kosong

Ambil yang terbaik (select) dari unsorted list, tambahkan di belakang sorted list.
Lakukan terus sampai unsorted list habis.
Tehnik pengurutan dgn cara pemilihan elemen atau proses kerja dgn memilih elemen data
terkecil utk kemudian dibandingkan & ditukarkan dgn elemen pd data awal, dst s/d seluruh
elemen shg akan menghasilkan pola data yg telah disort.

Prinsip Kerja dari Teknik Selection Sort ini adalah :


1. Pengecekan dimulai data ke-1 sampai dengan data ke-n
2. Tentukan bilangan dengan Index terkecil dari data bilangan tersebut
3. Tukar bilangan dengan Index terkecil tersebut dengan bilangan pertama ( I = 1 ) dari data
bilangan tersebut
4. Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I= I+1 ) sampai didapatkan urutan
yg optimal.

Contoh pogram nya ;


3. Insertion Sort
Prinsip dasar Insertion adalah secara berulang-ulang menyisipkan / memasukan setiap
elemen. ke dalam posisinya / tempatnya yg benar

Prinsip Kerja Insertion Sort adalah

1. Pengecekan mulai dari data ke-1 sampai data ke-n

2. Bandingkan data ke-I ( I = data ke-2 s/d data ke-n )

3. Bandingkan data ke-I tersebut dengan data sebelumnya (I-1), Jika lebih kecil maka data
tersebut dapat disisipkan ke data awal sesuai dgn posisisi yg seharusnya

4. Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I= I+1 ) sampai didapatkan urutan
yg optimal.
Contoh :

4. Marge Sort
MergeSort adalah algoritma yang berdasarkan strategi divide-and-conquer. Algoritma ini
tediri dari dua bagian utama, yaitu bagian pembagian list menjadi sublist-sublist yang lebih kecil
dan bagian sort (pengurutan) dan merge (penggabungan) pada sublist-sublist tersebut.
1) Divide: membagi masalah menjadi beberapa submasalah yang memiliki kemiripan
dengan masalah semula namun berukuran lebih kecil (idealnya berukuran hampir
sama),
2) Conquer: memecahkan (menyelesaikan) masing-masing submasalah (secara rekursif), dan
3) Combine: mengabungkan solusi masing-masing submasalah sehingga membentuk solusi
masalah semula.

Contoh :
5. Quick Sort

Sort dgn iterasi secara urut dr posisi elemen 1, ke-2 dstnya. Tukarkan setiap elemen pd
posisi tsb dgn elemen lain yangg nilainya memang seharusnya berada pada posisi tersebut.

Prinsip Kerja dari Quick Sort adalah :

1. Tentukan Lower Bound (Batas Bawah) & Upper Bound (Batas Atas)

2. Bandingkan Lower Bound (LB) dengan Upper Bound (UB)

3. Jika LB>UB, Tukar (cari operasi perbandingan yang optimal/terkecil)

4. Jika LB =< UB, maka Next Upper Bound & Lower Bound

5. Ulangi langkah diatas s/d sort.


Contoh :
2. CONTOH PROGRAM
- Stack
- Queue
- Linked List
Single linked list
- Tree
- Sorting
Buble sort

Anda mungkin juga menyukai