Definisi: Struktur data adalah cara khusus untuk menyimpan dan mengatur data dalam memori komputer. Tujuannya adalah agar data dapat diakses dan dimodifikasi dengan efisien. Bayangkan struktur data sebagai lemari arsip yang terorganisir dengan baik, di mana setiap dokumen (data) disimpan di tempat yang tepat sehingga mudah ditemukan saat dibutuhkan.
Analogi:
Lemari Arsip: Struktur data seperti lemari arsip yang memiliki laci-laci (jenis data) dan folder-folder (organisasi data).
Rak Buku: Bayangkan rak buku di perpustakaan. Buku-buku (data) disusun berdasarkan kategori (struktur data) agar mudah dicari.
Jenis-Jenis Dasar Struktur Data
Array (Larik):
Definisi: Array adalah kumpulan data dengan tipe yang sama yang disimpan di lokasi memori yang berdekatan. Setiap elemen dalam array dapat diakses menggunakan indeks (nomor urut).
Analogi: Bayangkan array sebagai deretan kamar hotel yang berdekatan, di mana setiap kamar memiliki nomor (indeks) dan menyimpan barang dengan jenis yang sama (tipe data).
Contoh:
plaintext
// Contoh array dalam JavaScript
let angka = [10, 20, 30, 40, 50];
console.log(angka[0]); // Output: 10 (mengakses elemen pertama)
Kelebihan: Akses data sangat cepat karena menggunakan indeks.
Kekurangan: Ukuran array harus ditentukan di awal dan tidak bisa diubah (statis).
List (Daftar):
Definisi: List adalah kumpulan elemen data yang berurutan. List lebih dinamis daripada array karena ukurannya bisa berubah.
Jenis:
Linked List: struktur data yang terdiri dari urutan elemen atau node yang saling terhubung menggunakan pointer atau referensi.
Analogi: Bayangkan list sebagai rantai, di mana setiap mata rantai (node) terhubung ke mata rantai berikutnya.
Contoh:
plaintext
// Contoh linked list dalam Python
class Node:
def __init__(self, data):
self.data = data
self.next = None
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
Kelebihan: Ukuran list bisa berubah sesuai kebutuhan (dinamis).
Kekurangan: Akses data lebih lambat daripada array karena harus melalui pointer.
Stack (Tumpukan):
Definisi: Stack adalah struktur data dengan prinsip LIFO (Last In, First Out). Elemen terakhir yang ditambahkan adalah elemen pertama yang diambil.
Operasi Utama:
PUSH: Menambah elemen ke stack.
POP: Mengambil elemen dari stack.
Analogi: Bayangkan stack sebagai tumpukan piring. Piring terakhir yang diletakkan di atas adalah piring pertama yang diambil.
Contoh:
plaintext
// Contoh stack dalam JavaScript
let stack = [];
stack.push(1); // Menambah 1 ke stack
stack.push(2); // Menambah 2 ke stack
console.log(stack.pop()); // Output: 2 (mengambil elemen terakhir)
Kelebihan: Implementasi sederhana dan efisien untuk beberapa kasus.
Kekurangan: Hanya bisa mengakses elemen terakhir yang ditambahkan.
Queue (Antrean):
Definisi: Queue adalah struktur data dengan prinsip FIFO (First In, First Out). Elemen pertama yang ditambahkan adalah elemen pertama yang diambil.
Operasi Utama:
ENQUEUE: Menambah elemen ke queue.
DEQUEUE: Mengambil elemen dari queue.
Analogi: Bayangkan queue sebagai antrean di loket. Orang pertama yang datang adalah orang pertama yang dilayani.
Contoh:
plaintext
// Contoh queue dalam JavaScript
let queue = [];
queue.push(1); // Menambah 1 ke queue
queue.push(2); // Menambah 2 ke queue
console.log(queue.shift()); // Output: 1 (mengambil elemen pertama)
Kelebihan: Cocok untuk memproses data secara berurutan.
Kekurangan: Tidak bisa mengakses elemen di tengah antrean.
Definisi: Algoritma adalah urutan langkah-langkah logis yang sistematis untuk menyelesaikan suatu masalah atau mencapai tujuan tertentu. Algoritma adalah resep untuk menyelesaikan masalah.
Analogi:
Resep Masakan: Algoritma seperti resep masakan yang berisi langkah-langkah untuk membuat hidangan.
Peta: Algoritma seperti peta yang menunjukkan rute untuk mencapai tujuan.
Ciri-ciri Algoritma:
Input: Harus memiliki input (data yang diberikan).
Output: Harus menghasilkan output (hasil yang diinginkan).
Efektif: Setiap langkah harus sederhana dan dapat dilakukan.
Finite: Harus berakhir setelah sejumlah langkah tertentu.
Algoritma Standar
Algoritma Pencarian:
Sequential Search (Pencarian Berurutan):
Definisi: Mencari elemen dengan memeriksa setiap elemen dalam daftar secara berurutan dari awal hingga akhir.
Analogi: Mencari kunci di antara sekelompok kunci dengan mencoba satu per satu.
Contoh:
plaitext
// Contoh sequential search dalam JavaScript
function sequentialSearch(arr, target) {
for (let i = 0; i < arr.length; i++) {
if (arr[i] === target) {
return i; // Mengembalikan indeks jika ditemukan
}
}
return -1; // Mengembalikan -1 jika tidak ditemukan
}
let angka = [10, 20, 30, 40, 50];
console.log(sequentialSearch(angka, 30)); // Output: 2
console.log(sequentialSearch(angka, 60)); // Output: -1
Kelebihan: Sederhana dan mudah diimplementasikan.
Kekurangan: Tidak efisien untuk daftar yang besar.
Algoritma Pengurutan:
Bubble Sort (Pengurutan Gelembung):
Definisi: Mengurutkan elemen dengan cara membandingkan dan menukar elemen yang berdekatan berulang kali hingga seluruh daftar terurut.
Analogi: Bayangkan gelembung-gelembung udara di dalam air. Gelembung yang lebih besar akan naik ke atas.
Contoh:
// Contoh bubble sort dalam JavaScript
function bubbleSort(arr) {
let n = arr.length;
for (let i = 0; i < n - 1; i++) {
for (let j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// Tukar elemen
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
let angka = [5, 2, 8, 1, 9];
console.log(bubbleSort(angka)); // Output: [1, 2, 5, 8, 9]
Kelebihan: Mudah dipahami dan diimplementasikan.
Kekurangan: Tidak efisien untuk daftar yang besar.
Definisi: Efisiensi algoritma mengukur seberapa baik algoritma memanfaatkan sumber daya (waktu dan memori) untuk menyelesaikan masalah. Algoritma yang baik adalah yang tercepat dan menggunakan memori paling sedikit.
Konsep:
Time Complexity (Kompleksitas Waktu): Mengukur berapa lama waktu yang dibutuhkan algoritma untuk menyelesaikan masalah, seiring dengan bertambahnya ukuran input.
Space Complexity (Kompleksitas Ruang): Mengukur berapa banyak memori yang dibutuhkan algoritma untuk menyelesaikan masalah, seiring dengan bertambahnya ukuran input.
Contoh:
Sequential Search memiliki time complexity O(n), yang berarti waktu yang dibutuhkan sebanding dengan ukuran input (n).
Bubble Sort memiliki time complexity O(n^2), yang berarti waktu yang dibutuhkan sebanding dengan kuadrat ukuran input (n).