Struktur data adalah cara penyimpanan dan pengorganisasian data sehingga memungkinkan untuk diakses dan dimodifikasi secara efisien. Memilih struktur data yang tepat adalah kunci untuk mengembangkan algoritma yang efisien. Dalam bab ini, kita akan membahas beberapa struktur data dasar: array, linked list, stack, dan queue.
5.1 Array
Array adalah struktur data yang menyimpan elemen-elemen dalam urutan yang terstruktur dan setiap elemen diakses melalui indeks. Array memiliki ukuran yang tetap dan setiap elemen harus memiliki tipe data yang sama.
Kelebihan dan Kekurangan Array
- Kelebihan: Akses elemen secara cepat menggunakan indeks.
- Kekurangan: Ukuran tetap; tidak efisien untuk penyisipan dan penghapusan elemen di tengah.
Contoh Implementasi Array dalam Python
arr = [1, 2, 3, 4, 5]
# Akses elemen
print(arr[2]) # Output: 3
# Menambah elemen (di akhir)
arr.append(6)
print(arr) # Output: [1, 2, 3, 4, 5, 6]
# Menghapus elemen
arr.remove(3)
print(arr) # Output: [1, 2, 4, 5, 6]
5.2 Linked List
Linked list adalah struktur data yang terdiri dari node-node di mana setiap node berisi data dan referensi ke node berikutnya. Linked list tidak memiliki ukuran tetap dan elemen dapat dengan mudah disisipkan atau dihapus.
Kelebihan dan Kekurangan Linked List
- Kelebihan: Ukuran dinamis; mudah untuk penyisipan dan penghapusan elemen.
- Kekurangan: Akses elemen secara linear; memerlukan lebih banyak memori karena adanya referensi.
Contoh Implementasi Linked List dalam Python
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
last = self.head
while last.next:
last = last.next
last.next = new_node
def display(self):
current = self.head
while current:
print(current.data, end=" -> ")
current = current.next
print("None")
# Contoh penggunaan
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
ll.display() # Output: 1 -> 2 -> 3 -> None
5.3 Stack
Stack adalah struktur data yang mengikuti prinsip LIFO (Last In, First Out), di mana elemen terakhir yang ditambahkan akan menjadi elemen pertama yang dihapus. Operasi dasar pada stack adalah push (menambahkan elemen) dan pop (menghapus elemen).
Kelebihan dan Kekurangan Stack
- Kelebihan: Sederhana dan efisien untuk operasi LIFO.
- Kekurangan: Tidak efisien untuk akses elemen acak.
Contoh Implementasi Stack dalam Python
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
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]
def display(self):
print(self.items)
# Contoh penggunaan
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.display() # Output: [1, 2, 3]
print(stack.pop()) # Output: 3
stack.display() # Output: [1, 2]
5.4 Queue
Queue adalah struktur data yang mengikuti prinsip FIFO (First In, First Out), di mana elemen pertama yang ditambahkan akan menjadi elemen pertama yang dihapus. Operasi dasar pada queue adalah enqueue (menambahkan elemen) dan dequeue (menghapus elemen).
Kelebihan dan Kekurangan Queue
- Kelebihan: Sederhana dan efisien untuk operasi FIFO.
- Kekurangan: Tidak efisien untuk akses elemen acak.
Contoh Implementasi Queue dalam Python
class Queue:
def __init__(self):
self.items = []
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.is_empty():
return self.items.pop(0)
def is_empty(self):
return len(self.items) == 0
def display(self):
print(self.items)
# Contoh penggunaan
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.display() # Output: [1, 2, 3]
print(queue.dequeue()) # Output: 1
queue.display() # Output: [2, 3]
Kesimpulan Bab 5
Pada bab ini, kita telah membahas empat struktur data dasar: array, linked list, stack, dan queue. Masing-masing struktur data memiliki kelebihan dan kekurangan, dan pemilihan struktur data yang tepat sangat penting untuk efisiensi dan efektivitas algoritma. Memahami struktur data ini adalah langkah penting dalam pemrograman dan pengembangan algoritma.
Di bab selanjutnya, kita akan mengeksplorasi algoritma pencarian dan pengurutan lebih lanjut menggunakan struktur data ini, serta bagaimana mereka diterapkan dalam pemrograman yang lebih kompleks.