Anda di halaman 1dari 37

TUGAS AKHIR

KELOMPOK 3

STRUKTUR DATA

PENYUSUN:
STACK : 191002 Andi Achmad Tamimi
QUEUE : 191032 Paul C.Diaz
LINKED LIST : 191022 M. Abdul Aziz I. Marsaoly
BINARY TREE : 191004 Nisar Said

STMIK DIPANEGARA MAKASSAR


SISTEM INFORMASI
2021
BAB I
TUMPUKAN (STACK)
1) . Konsep Stack (definisi, ilustrasi dll)
a) .Definisi stack
Stack atau tumpukan dapat diartikan sebagai suatu kumpulan data yang
seolah-olah terlihat seperti ada data yang diletakkan di atas data yang lain. Kaidah
utama dalam konsep stack adalah LIFO yang merupakan singkatan dari Last In
First Out, artinya adalah data yang terakhir kali dimasukkan atau disimpan, maka
data tersebut adalah yang pertama kali akan diakses atau dikeluarkan. Sebuah
struktur data dari sebuah stack setidaknya harus mengandung dua buah variabel,
misalnya variabel top yang akan berguna sebagai penanda bagian atas tumpukan
dan array data dari yang akan menyimpan data-data yang dimasukkan ke
dalam stack tersebut.

Operasi-operasi dasar dalam stack ada 2 yaitu operasi push dan pop:
 Operasi push, berfungsi untuk memasukkan sebuah nilai atau data ke dalam
stack. Sebelum sebuah nilai atau data dimasukkan ke dalamstack, prosedur ini
terlebih dahulu akan menaikkan posisi top satu level ke atas.
 Operasi pop, berfungsi untuk mengeluarkan atau menghapus nilai terakhir
(yang berada pada posisi paling atas) dari stack, dengan cara menurunkan nilai
top satu level ke bawah.

b) .ilustrasi stack
 Ilustrasi Stack
 Ilustrasi operasi push

 Ilustrasi operasi pop

c) .algoritma stack
a. Operasi Push
 Algoritma operasi push pada stack adalah sebagai berikut:
 Menentukan kondisi tumpukan, apakah tumpukan dalam keadaan kosong
atau tidak.
 Jika kosong maka mendeklarasikan data baru yang akan dimasukkan ke
dalam tumpukan.
 Memasukkan nilai data yang baru.
 Melakukan perulangan untuk memasukkan data hingga batas penuh
tumpukan.
 Jika tumpukan sudah penuh maka selesai.
b. Operasi Pop
 Algoritma operasi pop pada stack adalah sebagai berikut:
  Melakukan pengecekan kondisi antrian, ada isi data atau tidak.
  Jika terdapat data pada antrian, maka lakukan penghapusan data dengan
cara memindahkan head (elemen teratas tumpukan) ke elemen
dibawahnya.
 Kemudian menghapus elemen teratas tumpukan.
 Jika tidak terdapat data pada tumpukan maka selesai.

2) . Operasi-operasi pada Stack (push, pop dan operasi lainnya)


a) .Pendeklarasian stack
Proses pembuatan struktur stack dalam memori. Top: yang berisi posisi
data terakhir.  Elemen: yang berisi data yang ada dalam stack, bagian ini lah
yang berbentuk array.
b) . Proses Inisialisasi
Inisialisasi stack adalah proses pembuatan suatu stack kosong.
c) . Operasi IsEmpty
Operasi yang digunakan untuk memeriksa apakah stack dalam keadaan
kosong. Operasi ini dilakukan dengan memeriksa field top.

d) . Operasi IsFull
untuk memeriksa keadaan stack apakah sudah penuh atau belum.
e) . Operasi Push
Operasi push adalah operasi dasar dari stack yang berguna untuk
menambah suatu elemen data baru pada stack dan di simpan pada posisi top yang
akan mengakibatkan posisi top akan berubah.
f) . Operasi Pop
Operasi Pop adalah salah satu operasi paling besar dari stack yang berguna
untuk mengambil elemen terakhir(top) dan kemudian menghapus elemen tersebut
sehingga posisi top akan berpindah.
g) .Operasi Print
Untuk menampilkan semua elemen-elemen stack. Dengan cara looping
semua nilai array secara terbalik, karena kita harus mengaksesdari indeks array
tertinggi terlebih dahulu baru ke indeks yang kecil.
3) .Implementasi Stack menggunakan Python
a).tumpukan (stack) dengan phyton
Tumpukan adalah struktur data linier yang menyimpan item dengan cara
Last-In / First-Out (LIFO) atau First-In / Last-Out (FILO). Dalam tumpukan,
elemen baru ditambahkan di salah satu ujung dan elemen dihapus dari ujung itu
saja. Operasi memasukkan dan menghapus sering disebut push dan pop.
b).penerapan
Ada berbagai cara untuk menerapkan tumpukan dengan Python. Artikel ini
membahas implementasi tumpukan menggunakan struktur data dan modul dari
pustaka Python. Stack in Python dapat diimplementasikan menggunakan cara-cara
berikut: Daftar
- collections.deque
- antrian.LifoQueue
c).implementasi menggunakan phyton
Daftar struktur data buil-in Python dapat digunakan sebagai tumpukan.
Alih-alih push (), append () digunakan untuk menambahkan elemen ke atas
tumpukan sementara pop () menghapus elemen dalam urutan LIFO. list memiliki
beberapa kekurangan. Masalah terbesar adalah bahwa hal itu dapat mengalami
masalah kecepatan saat berkembang. Item dalam daftar disimpan bersebelahan
dalam memori, jika tumpukan tumbuh lebih besar dari blok memori yang saat ini
menyimpannya, maka Python perlu melakukan beberapa alokasi memori. Ini
dapat menyebabkan beberapa panggilan append () membutuhkan waktu lebih
lama daripada yang lain. implementasinya ke dalam phyton :
OUTPUTNYA :
4).Aplikasi Stack (contoh kasus yang menggunakan konsep Stack
dalam penyelesaiannya)
Ada banyak kegunaan terdapat pada Stack dan dapat membantu di kehidupan
sehari hari dan merupakan proses semacam algoritma sebenarnya dijumpai dalam
kehidupan sehari hari. Contoh penerapan antrian dalam aplikasi sehari hari jika
diartikan secara harafiah queue berarti antrian queue merupakan salah satu contoh
aplikasi dari pembuatan double linked list yang cukup sering kita temui dalam
kehiduypan sehari hari misalnya saat anda mengantri di loket untuk membeli tiket.
Prosedur dalam konsep seperti itu sebenarnya menyatakan semacam algoritma.
Contoh paling simple dalam kehidupan sehari hari adalah antrian pengunjung
bank.Sistem antrian penerapannya dan kehidupan sehari hari serta agar mahasiawa
dapat mengimplementasikan sistem antrian tersebut ke dalam bahasa pemograman c.
Larik dapat diakses berdasarkan indeksnya. operasi dasar pada stack deklarasi stack
dalam pemrograman dan implementasi dalam kehidupan sehari hari.
Array dalam ilmu komputer adalah suatu tipe data terstruktur yang dapat
menyimpan banyak data dengan suatu nama yang sama dan menempati tempat di
memori yang berurutan kontigu serta bertipe data sama pula. Adapun juga informasi
berkaitan dengan struktur data jenis data keterkaitan antar tabel sifat data dan masih
banyak lagi. Konsep utamanya adalah lifo last in first out benda yang terakhir masuk
dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. Contoh
penerapan stack dalam suatu tumpukan dari benda. Contoh penerapan struktur data
misalnya informasi tentang pengolahan data berbasis elektronik. Contoh penerapan
antrian dalam aplikasi sehari hari jika diartikan secara harafiah queue berarti antrian
queue merupakan salah satu contoh aplikasi dari pembuatan double linked list yang
cukup sering kita temui dalam kehiduypan sehari hari misalnya saat anda mengantri
di loket untuk membeli tiket.

Dan dibawah ini salah satu contoh kasus Stack dalan kehidupan sehari hari :
a. Setumpuk koran, dimana koran yang paling terakhir ditambahkan dan ditaruh
diatas adalah koran yang dapat dilihat
b. Seseorang yang sedang mencuci piring, piring yang dicuci pertama pasti akan
diletakan dibawah dan akan terus berlanjut sampai tumpukan piring yang
terakhir dicuci. Lalu, piring pasti akan di taruh di rak piring dan pasti yang
diambil adalah piring yang paling atas yaitu piring yang terakhir dicuci dan
yang pertama dicuci pasti akan terakhir.
c. Tumpukan Batu bata yang sedang diturunkan dari mobil pasti yang diambil
adalah batu bata yang paling atas, padahal batu bata pertama yang dimasukkan
kedalam mobil adalah batu bata yang berada dibawahnya.
d. Saat melakukan presentase kelas dan terdapat daftar dimana terdapat list dari
siswa yang berurut sesuai nim
e. Biasanya saat masuk kita akan diberi nomor antrian terlebih dahulu sebelum
dipanggil oleh teller
f. Selain itu juga ada daftar menu makanan pada restoran yang menyajikan menu
urut dari harga terendah hingga termahal daftar menu makanan
g. Jadi,Stack merupakan konsep sebuah koleksi objek yang menggunakan
prinsip LIFO(Last In First Out) dan Stack dapat diimplementasikan sebagai
representasi berkait atau kontinyu. Ciri-Ciri Stack diantaranya :
 Elemen TOP/Puncak diketahui

 Penyisipan dan Penghapusan selalu dilakukan di TOP


 LIFO(Last In First Out)
Pemanfaatan Stack yaitu :
 Perhitungan Ekspresi Aritmatitika (posfix)
 Algoritma Backtracking (runut balik)
 Algoritma Rekursif
Operasi Stack yang biasa digunakan untuk menyelesaikan kasus dari stack
diantaranya yaitu :
a. Push untuk memasukkan atau menginputkan data
b. Pop untuk mengeluarkan data
c. IsFull untuk mengetahui jika tumpikan sudah penuh 4.IsEmpety untuk
mengetahui tumpukan yang kosong, dan 5.Clear untuk menghapus seluruh
data atau membersihkan data.
5) . Sumber/referensi (baik berupa buku atau link/URL dari
referensi yang digunakan)
1) . Konsep Stack (definisi, ilustrasi dll)
http://bocahngoding.blogspot.com/2018/01/pengertian-stack-dan-queue-dalam.html
2) . Operasi-operasi pada Stack (push, pop dan operasi lainnya)
http://risasisteminformasi.blogspot.com/2013/02/stack.html
3) .Implementasi Stack menggunakan Python
http://mydailycodes9896.blogspot.com/2018/05/struktur-data-python-stack-queue-
dequeue.html
4) .Aplikasi Stack (contoh kasus yang menggunakan konsep Stack dalam
penyelesaiannya)
https://id.techinasia.com/penerapan-python-dalam-analisis-data
BAB II
QUEUE
A. Konsep Queue
a. Definisi
Queue atau antrian adalah suatu kumpulan data yang penambahan elemennya
hanya bisa dilakukan pada suatu ujung (disebut dengan sisi belakang atau rear), dan
penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain (disebut
dengan sisi depan atau front).

Sumber : http://elektro.um.ac.id/wp-content/uploads/2016/04/Struktur-Data-Modul-
Praktikum-5-Queue.pdf
b. Ilustrasi

Sumber : https://baranghalusdev.blogspot.com/2017/04/queue-pada-python-
indonesian-language.html

B. Karakteristik Queue

a. elemen terakhir
b. front (elemen paling pertama)
c. tail (elemen paling terakhir)
d. jumlah elemen dalam queue
e. status antrian (kosong atau terisi)

C. Fungsi Queue
Sistem queue sangat berguna ketika data yang digunakan dibatasi,Ketika queue
sudah penuh maka elemen baru tidak bisa dimuat. Contoh:
array = [ 1,2,3,4,5,6,7,8 ]
Queue digunakan sama halnya pada antrian di dunia nyata, antrian yang pertama
masuk maka antrian tersebut akan dilayani lebih dulu.

D. Operasi Operasi Queue


a. enqueue()
Enquance digunakan untuk menambah elemen pada bagian paling akhir elemen.

b. isempty()
Untuk memeriksa queue kosong atau tidak.

c. peek()
Mengambil elemen paling terakhir tanpa menghapus elemen tersebut.

d. dequeue()
Mengambil elemen terakhir dan menghapus elemen tersebut dari queue

e. size()
Mengembalikan jumah elemen dalam list (tidak perlu parameter).

f. isfull()
Untuk mengecek anrtrian sudah penuh atau belum dengan mengecek nilai tail
(nilai akhir).

Sumber : http://mydailycodes9896.blogspot.com/2018/05/struktur-data-python-stack-
queue-dequeue.html#:~:text=Antrian%20(queue)%20merupakan%20struktur
%20data,belakang%20akan%20keluar%20terlebih%20dahulu.&text=enqueue()
%2C%20digunakan%20untuk%20menambah,dalam%20queue%20pada%20posisi
%20terakhir

E. Implementasi Queue dalam Python


Output :

Sumber : http://mydailycodes9896.blogspot.com/2018/05/struktur-data-python-stack-
queue-dequeue.html#:~:text=Antrian%20(queue)%20merupakan%20struktur
%20data,belakang%20akan%20keluar%20terlebih%20dahulu.&text=enqueue()
%2C%20digunakan%20untuk%20menambah,dalam%20queue%20pada%20posisi
%20terakhir.

F. Pengaplikasian queue dalam python (contoh kasus)


1. import os
2. import queue
3.  
4. class myQueue:
5.     def __init__(self):
6.         self.items = queue.Queue()
7.    
8.     # Memeriksa apakah queue dalam keadaan kosong
9.     def isEmpty(self):
10.         return self.items.empty()
11.     # Menambah data ke queue
12.     def qPut(self, item):
13.         self.items.put(item)
14.     # Mengeluarkan data dari queue
15.     def qGet(self):
16.         if not self.items.empty():
17.             return self.items.get()
18.         else:
19.             return "empty" 
20.     # Menghitung panjang queue
21.     def size(self):
22.         return self.items.qsize()
23.    
24.     # Main menu aplikasi
25.     def mainmenu(self):
26.         pilih = "y"
27.         while (pilih == "y"):
28.             os.system("cls")
29.             print("=========================")
30.             print("|  Menu aplikasi queue  |")
31.             print("=========================")
32.             print("1. Put objek")
33.             print("2. Get objek")
34.             print("3. Cek Empty")
35.             print("4. Panjang dari queue")
36.             print("=========================")
37.             pilihan=str(input(("Silakan masukan pilihan anda: ")))
38.             if(pilihan=="1"):
39.                 os.system("cls")
40.                 obj = str(input("Masukan objek yang ingin anda tambahkan: "))
41.                 self.qPut(obj)
42.                 print("Object "+obj+" telah ditambahkan")
43.                 x = input("")
44.             elif(pilihan=="2"):
45.                 os.system("cls")
46.                 temp = self.qGet()
47.                 if temp != "empty":
48.                     print("Objek "+temp+" dihapus")
49.                 else:
50.                     print("Queue kosong")
51.                 x = input("")
52.             elif(pilihan=="3"):
53.                 os.system("cls")
54.                 print(self.isEmpty())
55.                 x = input("")
56.             elif(pilihan=="4"):
57.                 os.system("cls")
58.                 print("Panjang dari queue adalah: "+str(self.size()))
59.                 x = input("")
60.             else:
61.                 pilih="n"  
62.  
63. if __name__ == "__main__":
64.     q=myQueue()
65.     q.mainmenu()
Listing diatas berfungsi untuk mengedit queue. Pada pilihan 1 user bisa menginput
elemen yang akan disimpan dalam queue. Pilihan ke- 2 berfungsi untuk mengambil
elemen lalu menghapusnya dalam queue, elemen yang diambil adalah elemen pada
posisi paling pertama cara ini sama seperti dequeue hanya saja posisinya diambil dari
elemen paling akhir. Lalu pada pilihan ke- 3 untuk mengecek apakah isi queue
kosong atau tidak tipe ini adalah Boolean, sehingga jawaban dari system hanya dua
yaitu true atau false. Pilihan ke- 4 berfungsi mengecek panjang queue ( jumlah
elemen )

Sumber : https://jepriana.blogspot.com/2016/12/queue-python.html
DAFTAR PUSTAKA

http://elektro.um.ac.id/wp-content/uploads/2016/04/Struktur-Data-Modul-Praktikum-
5-Queue.pdf

https://baranghalusdev.blogspot.com/2017/04/queue-pada-python-indonesian-
language.html

http://mydailycodes9896.blogspot.com/2018/05/struktur-data-python-stack-queue-
dequeue.html#:~:text=Antrian%20(queue)%20merupakan%20struktur
%20data,belakang%20akan%20keluar%20terlebih%20dahulu.&text=enqueue()
%2C%20digunakan%20untuk%20menambah,dalam%20queue%20pada%20posisi
%20terakhir
https://jepriana.blogspot.com/2016/12/queue-python.html

BAB III
SINGLE LINKED LIST
A. Pengertian Single Linked List 
Single Linked List merupakan sebuah tempat yang disediakan pada satu area
memori tertentu untuk menyimpan data yang dikenal dengan sebutan node atau
simpul. Setiap node memiliki pointer yang menunjuk ke simpul berikutnya sehingga
terbentuk satu untaian, dengan demikian hanya diperlukan sebuah variabel pointer.
Susunan berupa untaian semacam ini disebut Single Linked List. Biasanya Linked
List pada node terakhir akan menunjuk ke NULL, dimana  NULL memilik nilai
khusus yang artinya tidak menunjuk ke mana-mana.
Single Linked List dapat didefinisikan sebagai koleksi linear dari elemen –
elemen data. Penempatan elemen – elemen data ini acak di dalam memori, namun
antar elemen data ini terhubung dengan node. Jadi satu node dalam suatu elemen data
akan menunjuk ke node elemen data lain melalui suatu penunjuk yang umumnya
disebut pointer. Jadi dapat disimpulkan, sebuah koleksi data disebut sebagai Linked
List apabila antar data tersebut nodenya saling terhubung melalui pointer.
Ilutrasi.:
Secara sederhana berikut penjelasan melalui gambar.
Sebuah Node lengkap dengan elemen data dan pointernya
Kemudian contoh dari Single Linked List adalah sebagai berikut.

Dapat kita lihat dari gambar di atas, masing – masing node dihubungkan oleh satu
pointer. Sedangkan pada pointer node terakhir tidak menunjuk ke mana – mana
alias null.

B. Operasi – operasi pada Single Linked List


1. Insert= Istilah Insert berarti menambahkan sebuah simpul baru ke dalam suatu
linked list.
2. Delete Now= Fungsi ini menghapus elemen yang ditunjuk oleh now. Jika yang
dihapus adalah elemen pertama dari linked list (head), head akan berpindah ke
elemen berikut.
3. Traverse = Fungsi ini untuk mengunjungi/menelusuri elemen list.
4. Konstruktor= Fungsi ini membuat sebuah linked list yang baru dan masih
kosong.
5. IsEmpty= Fungsi ini menentukan apakah linked list kosong atau tidak.
6. Find First= Fungsi ini mencari elemen pertama dari linked list.
7. Find Next= Fungsi ini mencari elemen sesudah elemen yang ditunjuk now.
8. Retrieve= Fungsi ini mengambil elemen yang ditunjuk oleh now. Elemen
tersebut lalu dikembalikan oleh fungsi.
9. Update= Fungsi ini mengubah elemen yang ditunjuk oleh now dengan isi dari
sesuatu.

C. Implementasi Single Linked List dengan Menggunakan Bahasa Python


1. Membuat class node :
# Membuat class untuk node
class Node(object):

def __init__(self, data=None, next_node=None):


self.data = data
self.next_node = next_node

# Mengambil data dari node


def get_data(self):
return self.data

# Mengambil node berikutnya


def get_next(self):
return self.next_node

# Menentukan node berikutnya


def set_next(self, new_next):
self.next_node = new_next

2. Membuat class linked list :


# Membuat class untuk linked list
class LinkedList(object):
def __init__(self, head=None):
self.head = head

# Menambah node baru


def insert(self, data):
# Inisialisasi node baru
new_node = Node(data)
# Menunjuk node berikutnya dari node baru ke node yang ditunjuk oleh HEAD
new_node.set_next(self.head)
# HEAD menunjuk ke node baru
self.head = new_node

# Menghitung panjang list


def size(self):
# Membuat pointer baru menunjuk ke node yang ditunjuk oleh HEAD
current = self.head
count = 0
# Perulangan untuk menghitung node
while current:
count += 1
current = current.get_next()
return count

# Mencari sebuah data pada list


def search(self, data):
# Membuat pointer baru menunjuk ke node yang ditunjuk oleh HEAD
current = self.head
found = False
# Perulangan mencari node yang dicari
while current and found is False:
if current.get_data() == data:
found = True
else:
current = current.get_next()

return found

# Menghapus node
def delete(self, data):
current = self.head
previous = None
found = False
while current and found is False:
if current.get_data() == data:
found = True
else:
previous = current
current = current.get_next()
if current is None:
raise ValueError("Data not in list")
if previous is None:
self.head = current.get_next()
else:
previous.set_next(current.get_next())

# Menampilkan isi dari list


def showData(self):
os.system('clear')
print ("Tampilkan list data:")
print ("Node -> Next Node")
current_node = self.head
while current_node is not None:
print (current_node.data),
print (" ->"),
print (current_node.next_node.data)
if hasattr(current_node.next_node, "data") else None current_node
= current_node.next_node
3. Membuat Fungsi untuk menampilkan data :
# Main menu aplikasi
def mainmenu(self):
pilih = "y"
while (pilih == "y"):
os.system("clear")
print("===============================")
print("| Menu aplikasi linked list |")
print("===============================")
print("1. Insert data")
print("2. Delete data")
print("3. Cari data")
print("4. Panjang dari linked list")
print("5. Tampil data")
print("6. Keluar ")
print("===============================")
pilihan=str(input(("Silakan masukan pilihan anda: ")))
if(pilihan=="1"):
os.system("clear")
obj = str(input("Masukan data yang ingin anda tambahkan: "))
self.insert(obj)
elif(pilihan=="2"):
os.system("clear")
obj = str(input("Masukan data yang ingin anda dihapus: "))
self.delete(obj)
x = input("")
elif(pilihan=="3"):
os.system("clear")
obj = str(input("Masukan data yang ingin anda dicari: "))
status = self.search(obj)
if status == True:
print("Data ditemukan pada list")
else:
print("Data tidak ditemukan")
x = input("")
elif(pilihan=="4"):
os.system("clear")
print("Panjang dari queue adalah: "+str(self.size()))
x = input("")
elif(pilihan=='5'):
os.system('clear')
self.showData()
x = input("")
elif(pilihan=='6'):
pilih="n"
else:
pilih="n"

if __name__ == "__main__":
# execute only if run as a script
l = LinkedList()
l.mainmenu()

D. Aplikasi Single Linked List


E. Referensi :

https://jepriana.blogspot.com/2016/12/single-linked-list-python.html#:~:text=Single
%20Linked%20List%20merupakan%20sebuah,hanya%20diperlukan%20sebuah
%20variabel%20pointer.
http://temanbukuku.blogspot.com/2016/01/operasi-operasi-dasar-single-dan-
double.html
https://www.coursehero.com/file/49673220/Operasi-Pada-Single-Linked-
Listdocx/#:~:text=html%20Operasi%20Pada%20Single%20Linked%20List
%201.%20Insert%20%3D%20Istilah%20Insert,linked%20list%20kosong%20atau
%20tidak.
https://www.slideshare.net/dinanabila1/41-operasi-dasar-singly-linked-list-1-
primitive-list
https://unydevelopernetwork.com/index.php/2020/04/03/tutorial-struktur-data-
implementasi-single-linked-list-sederhana-dengan-java/
BAB IV
BINARY TREE
A. Konsep binary tree (definisi, ilustrasi dll)
1. Definisi binary tree
Binary 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
(disebut subtree).
Binary tree adalah suatu tree dengan syarat bahwa tiap node (simpul)
hanya boleh memiliki maksimal dua subtree dan kedua subtree tersebut harus
terpisah. Tiap node dalam binary tree 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.
2. Ilustrasi binary tree

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 dari pada
yang terdapat dengan tingkat tiga. Tetapi bisa terdapat angka apa saja dari simpul
dengan tingkat dua. Sebuah pohon biner berakar merupakan sebuah grafik yang
tingkat tidak lebih dari dua sebagai akar.
3. Istilah dalam binary tree
1) Pohon Biner Penuh (Full Binary Tree)
Semua simpul (kecuali daun) memiliki 2 anak dan tiap cabang memiliki
Panjang ruas yang sama.
2) Pohon Biner Lengkap (Complete Binary Tree)
Hamper sama dengan pohon biner penuh, semua simpul (kecuali daun)
memiliki 2 anak tetapi tiap cabang memiliki Panjang ruas berbeda.

3) Pohon Biner Similer


Dua pohon yang memiliki struktur yang sama tetapi informasinya berbeda.

4) Pohon Biner Ekivalent


Dua pohon yang memilki struktur dan informasi yang sama.

5) Pohon Biner Miring (Skewed Tree)


Dua pohon yang semua simpulnya mempunyai satu anak/turunan kecuali
daun.
4. Kunjungan pada binary tree
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 (symmetric order), mempunyai urutan :


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

3. Kunjungan secara postorder, mempunyai urutan :


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

B. Operasi – Operasi pada binary tree


a. Create = Membuat binary tree baru yang masih kosong.
b. Clear = Mengosongkan binary tree yang sudah ada.
c. Empty = Function untuk memeriksa apakah binary tree masih kosong.
d. Insert = Memasukkan sebuah node ke dalam tree. Ada tiga pilihan sebagai
root, left child, atau right child. Khusus insert sebagai root, tree harus
dalam keadaan kosong.
e. Find = Mencatat root, parent, left child, atau right child dari suatu node (tree
boleh kososng).
f. Update = Mengubah isi dari node yang ditunjuk oleh pointer curret (tree tidak
boleh kosong).
g. Retrieve adalah mengetahui isi dari node yang ditunjuk oleh pointer current
(Tree tidak boleh kosong)
h. DeleteSub adalah menghapus sebuah subtree (node beserta seluruh
descendantnya) yang ditunjuk current. Tree tidak boleh kosong. Setelah itu,
pointer current berpindah ke parent dari node yang dihapus.
i. Characteristic adalah mengetahui karakteristik dari suatu tree, yakni: size,
height, serta average length. Tree tidak boleh kosong.
j. Traverse adalah mengunjungi seluruh node – node pada tree, masing-masing
sekali. Hasilnya adalah urutan informasi secara linear yang tersimpan dalam
tree. Ada tiga cara traverse, yaitu PreOrder, InOrder, dan PostOrder.

C. Implementasi Binary Tree Menggunakan Python


a. Insert
Insert yaitu menambahkan node dalam tree. Jika data yang akan
dimasukkan lebih besar daripada elemen root, maka akan diletakkan di
node sebelah kanan, sebaliknya jika lebih kecil maka akan diletakkan di
node sebelah kiri. Untuk data pertama akan menjadi elemen root.
b. PreOrder
PreOrder yaitu cetak node yang dikunjungi,kunjungi left, kunjungi right.
c. InOrder
InOrder yaitu kunjungi left, cetak node yang dikunjungi, kunjungi right.
d. PostOrder
PostOrder yaitu kunjungi left, kunjungi right, cetak node yang dikunjungi.
e. Searching Data
Searching Data yaitu untuk searching data kita tinggal menjelajahi node
yang ada di dalam tree, algoritmanya adalah jika data yang di cari sama
dengan root maka data di temukan,jika tidak maka akan mengecek
kembali apakah data lebih lebih kecil dari root maka secara rekursi akan
mencari kekiri, jika data lebih besar dari root maka secara rekursif akan
mencari ke kanan.

 source code-nya
from __future__ import print_function

class Stack:
def __init__(self):
self.items = []

def isEmpty(self):
return self.items==[]

def push(self,items):
self.items.append(items)

def pop(self):
return self.items.pop()

def peek(self):
return self.items[len(self.items)-1]

def size(self):
return len(self.items)

class Binarytree:
def __init__(self,root):
self.key = root
self.leftChild = None
self.rightChild = None

def insertLeft(self,newNode):
if self.leftChild == None :
self.leftChild = Binarytree(newNode)

else :
t = Binarytree(newNode)
t.leftChild = self.leftChild
self.leftChild = t

def insertRight(self,newNode):
if self.rightChild == None :
self.rightChild = Binarytree(newNode)

else :
t = Binarytree(newNode)
t.rightChild = self.rightChild
self.rightChild = t

def getrightChild(self):
return self.rightChild

def getleftChild(self):
return self.leftChild

def getrootVal(self):
return self.key

def setrootVal(self,obj):
self.key = obj

def size(self):
count = 0
selfleft = self
selfright = self
while selfleft.getleftChild() != None or selfright.getrightChild() != None :
count += 1
if selfleft.getleftChild() != None:
selfleft = selfleft.getleftChild()
else :
selfright = selfright.getrightChild()
return count

def Inorder(root):
if root:
Inorder(root.getleftChild())
print(root.getrootVal(),end=" ")
Inorder(root.getrightChild())
def Preorder(root):
if root:
print(root.getrootVal(),end=" ")
Preorder(root.getleftChild())
Preorder(root.getrightChild())

def Postorder(root):
if root:
Postorder(root.getleftChild())
Postorder(root.getrightChild())
print(root.getrootVal(),end=" ")

root = Binarytree('P')
root.insertLeft('F')
root.getleftChild().insertLeft('B')
root.getleftChild().insertRight('H')
root.getleftChild().getleftChild().insertLeft('A')
root.getleftChild().getrightChild().insertRight('M')
root.insertRight('S')
root.getrightChild().insertLeft("R")
root.getrightChild().insertRight("W")

Inorder(root)
print ()
Preorder(root)
print ()
Postorder(root)

 Outputnya :
D. Aplikasi Binary Tree (contoh kasus yang menggunakan konsep Binary Tree
dalam penyelesaiannya)
a. Pohon Pencarian biner  - Digunakan dalam banyak cari aplikasi di mana data
yang terus-menerus memasuki/meninggalkan,
seperti peta dan mengatur benda-benda dalam banyak bahasa' perpustakaan.
b. Binary Space Partition  - Digunakan di hampir setiap video 3D permainan
untuk menentukan objek-objek apa saja yang perlu diberikan.
c. Biner Mencoba - Digunakan di hampir setiap high-bandwidth router untuk
menyimpan router-tabel.
d. Hash Pohon - digunakan dalam program p2p dan berupa gambar tanda
tangan di mana hash perlu diverifikasi, tetapi seluruh file tidak tersedia.
e. Tumpukan - Digunakan dalam melaksanakan efisien prioritas antrian, yang
pada gilirannya digunakan untuk penjadwalan proses-proses di banyak sistem
operasi, Kualitas-of-Service di router, dan (path-finding algoritma yang
digunakan dalam AI aplikasi, termasuk robotika dan video game)*. Juga
digunakan dalam tumpukan-macam.
f. Huffman Coding Pohon   (Chip Uni) - yang digunakan dalam algoritma
kompresi, seperti yang digunakan oleh .jpeg dan .mp3 file format.
g. GGM Pohon - Digunakan dalam aplikasi kriptografi untuk menghasilkan
pohon angka pseudo-random.
h. Pohon sintaks yang Dibangun oleh compiler dan (secara implisit) kalkulator
untuk mengurai ekspresi.
i. Treap - Acak struktur data yang digunakan dalam jaringan nirkabel dan
alokasi memori.
j. T-pohon - Meskipun sebagian besar database menggunakan beberapa bentuk
dari B-tree untuk menyimpan data pada drive, database yang menyimpan
semua (sebagian besar) mereka data di memori sering menggunakan T-pohon
untuk melakukannya.

Source code-nya
Outputnya :

E. Sumber/referensi (baik berupa buku atau link/URL dari referensi yang


digunakan)
https://docplayer.info/30666798-Makalah-desain-dan-analisis-algoritma-binary-tree-
disusun-oleh-1-nadim-achmad-2-dzurratul-ulya.html
https://www.academia.edu/21897481/Makalah_Tree_Struktur_Data
https://www.academia.edu/13670336/MODUL_PRAKTIKUM_STRUKTUR_DATA
_TREE_POHON_
http://fitrianisaa25.blogspot.com/2018/06/tree-1.html
https://answer-id.com/id/51289356

Anda mungkin juga menyukai