DISUSUN OLEH:
ARKAN MUNTAZARI
Dosen pembimbing:
ILAL MAHDI , ST.MT
BAB I Pendahuluan...................................................................................................
- Array........................................................................................................................
- Linked List...............................................................................................................
- Stack ........................................................................................................................
- Queue ......................................................................................................................
- Tree ........................................................................................................................
- Graph ......................................................................................................................
2.2 Subprogram..........................................................................................................
2.3 Rekursi................................................................................................................
- Pengertian Rekursi...................................................................................................
7. Kesimpulan............................................................................................................
Kata Pengantar
Kami ingin mengucapkan terima kasih kepada semua yang telah memberikan
dukungan dan inspirasi dalam penyusunan makalah ini. Semoga makalah ini dapat
menjadi sumber pengetahuan yang berguna dan bermanfaat bagi para pembaca. Kritik
dan saran untuk perbaikan selalu kami terima dengan tangan terbuka.
Terima kasih.
Penulis
BAB I
Pendahuluan
BAB II
Pembahasan
Pengertian
Struktur data adalah cara untuk menyusun dan menyimpan data dalam
komputer agar dapat diakses dan dimanipulasi secara efisien. Ini melibatkan
penggunaan berbagai tipe data dan teknik penyimpanan yang disusun
dengan baik, seperti array, linked list, stack, queue, tree, dan graph.
Pemilihan struktur data yang tepat sangat penting karena dapat
memengaruhi kinerja dan kompleksitas suatu program atau algoritma.
6. **Graph**: Struktur data yang terdiri dari kumpulan simpul dan sisi
yang menghubungkan pasangan simpul. Graph dapat berupa directed
(berarah) atau undirected (tidak berarah), serta weighted (dengan bobot)
atau unweighted (tanpa bobot).
2.2 Subprogram
Definisi Subprogram
Subprogram, juga dikenal sebagai prosedur atau fungsi, adalah blok kode
yang memiliki fungsi tertentu dan dapat dipanggil dari bagian lain dari
program. Subprogram digunakan untuk mengelompokkan instruksi-instruksi
yang sering digunakan secara bersama-sama, mempromosikan kegunaan
kembali kode, dan membagi program menjadi bagian-bagian yang lebih
kecil dan lebih mudah dikelola. Dengan menggunakan subprogram,
pengembang dapat meningkatkan modularitas, memperbaiki pemeliharaan,
dan meningkatkan keterbacaan kode program.
1. **Prosedur**:
2. **Fungsi**:
- Fungsi adalah blok kode yang juga berisi serangkaian instruksi untuk
melakukan tugas tertentu.
2.3 Rekursi
Pengertian Rekursi
Kerugian Rekursi:
1. **Overhead Memori**: Setiap pemanggilan rekursif akan menambahkan
frame ke dalam stack memori, yang dapat menyebabkan overhead memori
yang signifikan terutama untuk masalah dengan rekursi yang dalam atau
panjang.
1. **Faktorial**:
Rekursi sering digunakan untuk menghitung faktorial dari suatu bilangan.
Misalnya, faktorial dari n (ditulis n!) adalah hasil perkalian dari semua
bilangan bulat positif kurang dari atau sama dengan n. Contohnya adalah:
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
```
2. **Fibonacci**:
Deret Fibonacci adalah deret bilangan di mana setiap angka adalah jumlah
dari dua angka sebelumnya. Rekursi dapat digunakan untuk menghitung
nilai deret Fibonacci. Contohnya adalah:
int fibonacci(int n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
```
```python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def display(self):
current = self.head
while current:
print(current.data, end=" -> ")
current = current.next
print("None")
# Penggunaan:
ll = LinkedList()
ll.insert(1)
ll.insert(2)
ll.insert(3)
ll.display()
```
Contoh 2: Stack dalam Subprogram
```python
class Stack:
def __init__(self):
self.items = []
def pop(self):
if not self.is_empty():
return self.items.pop()
def is_empty(self):
return len(self.items) == 0
def peek(self):
if not self.is_empty():
return self.items[-1]
# Penggunaan:
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.peek()) # Output: 3
print(stack.pop()) # Output: 3
print(stack.pop()) # Output: 2
```python
class TreeNode:
def __init__(self, data):
self.data = data
self.children = []
def traverse_tree(node):
print(node.data)
for child in node.children:
traverse_tree(child)
# Penggunaan:
# Membangun pohon
root = TreeNode("A")
b = TreeNode("B")
c = TreeNode("C")
d = TreeNode("D")
e = TreeNode("E")
f = TreeNode("F")
g = TreeNode("G")
root.add_child(b)
root.add_child(c)
b.add_child(d)
b.add_child(e)
c.add_child(f)
c.add_child(g)
# Melakukan traversal
traverse_tree(root)
```
Dalam contoh ini, kita memiliki struktur data pohon (tree) yang terdiri dari
node-node yang saling terhubung. Kita menggunakan rekursi dalam fungsi
`traverse_tree` untuk melakukan traversal pada setiap node dalam pohon,
dimulai dari root, kemudian rekursif menjelajahi setiap anak dari setiap
node.
```python
class TreeNode:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.data, end=" ")
inorder_traversal(root.right)
def sum_of_values(root):
if root is None:
return 0
return root.data + sum_of_values(root.left) + sum_of_values(root.right)
# Penggunaan:
root = None
values = [5, 3, 8, 1, 4, 7, 9]
print("Traversal in-order:")
inorder_traversal(root)
print("\nTotal sum of values:", sum_of_values(root))
```
Dalam contoh ini, kita menggunakan struktur data pohon biner untuk
menyimpan nilai-nilai. Subprogram `insert` digunakan untuk memasukkan
nilai ke dalam pohon biner. Subprogram `inorder_traversal` digunakan
untuk melakukan traversal rekursif dalam pohon biner untuk mencetak nilai
secara terurut. Subprogram `sum_of_values` digunakan untuk menghitung
jumlah total dari nilai-nilai dalam pohon secara rekursif.
BAB III
Penutupan
3.1 Kesimpulan
Makalah ini membahas konsep struktur data, subprogram, dan rekursi dalam
pengembangan perangkat lunak. Struktur data adalah cara untuk menyusun dan
menyimpan data dalam komputer agar dapat diakses dan dimanipulasi secara
efisien. Contoh struktur data meliputi array, linked list, stack, queue, tree, dan
graph. Subprogram, seperti fungsi dan prosedur, adalah blok kode yang memiliki
fungsi tertentu dan dapat dipanggil dari bagian lain dari program. Rekursi adalah
teknik di mana sebuah fungsi atau subprogram memanggil dirinya sendiri secara
berulang untuk menyelesaikan tugas atau masalah.
Daftar Pustaka
1. Cormen, Thomas H., et al. "Introduction to Algorithms." MIT Press, 2009.
2. Carrano, Frank M., dan Timothy M. Henry. "Data Structures and Abstractions with
Java." Pearson, 2015.
3. Malik, D.S. "C++ Programming: From Problem Analysis to Program Design." Cengage
Learning, 2012.
4. Horowitz, Ellis, et al. "Fundamentals of Data Structures in C++." Silicon Press, 2014.
5. Sedgewick, Robert, dan Kevin Wayne. "Algorithms." Addison-Wesley Professional,
2011.