Pengantar Struktur Data

Terkadang dalam pengembangan perangkat lunak, ada kebutuhan untuk mengatur dan mengelola data dengan cara yang lebih efisien. Itulah sebabnya pemahaman tentang struktur data sangat penting. Struktur data adalah cara data disusun dan disimpan dalam komputer agar dapat diakses dan dikelola dengan baik. Bab ini akan memberikan pengantar kepada Anda tentang konsep dasar struktur data dan cara mereka diterapkan dalam bahasa pemrograman C++. Kita akan mulai dengan memahami dasar-dasar pemrograman, termasuk penggunaan fungsi/prosedur dan array dalam C++. Kemudian, kita akan mempelajari konsep skema pemrosesan dan pemrosesan sekuensial, yang merupakan bagian penting dari pengembangan program. Selain itu, kita akan membahas pentingnya algoritma pencarian (searching) dalam pemrograman dan jenis-jenis struktur data yang digunakan untuk mengatur data dengan baik. Semua konsep ini akan membentuk dasar yang kuat untuk memahami topik-topik lebih lanjut dalam struktur data dan pemrograman. Mari kita mulai dengan memahami peran fungsi/prosedur dalam pemrograman.

1.1 Fungsi

1.1.1 Defenisi Fungsi

Fungsi atau sering juga disebut sebagai prosedur, adalah salah satu konsep paling fundamental dalam pemrograman. Mereka digunakan untuk mengorganisasi dan mengelompokkan serangkaian pernyataan atau tugas tertentu menjadi unit terpisah yang dapat digunakan berulang kali dari berbagai bagian dalam program. Fungsi memungkinkan programmer untuk memecah kode menjadi bagian-bagian yang lebih kecil, atau modul, yang memiliki tujuan dan tanggung jawab yang terdefinisi dengan baik.

Salah satu manfaat utama dari penggunaan fungsi adalah meningkatkan keterbacaan dan pemeliharaan kode. Dengan membagi program menjadi fungsi-fungsi yang lebih kecil, kode menjadi lebih mudah dimengerti karena setiap fungsi hanya fokus pada tugas tertentu. Ini juga memungkinkan programmer untuk mengganti atau memperbaiki bagian tertentu tanpa harus mengubah seluruh program, yang merupakan aspek penting dalam pemeliharaan perangkat lunak yang efisien. Selain itu, fungsi memungkinkan penggunaan argumen atau parameter. Ini berarti bahwa fungsi dapat menerima input dalam bentuk argumen, memprosesnya sesuai dengan logika yang didefinisikan dalam fungsi, dan mengembalikan hasil sebagai output. Kemampuan ini sangat penting dalam menghasilkan keluaran yang dinamis dan bergantung pada input.

Selain menghindari pengulangan kode yang sama di berbagai bagian program, fungsi juga mendukung konsep modularitas. Dengan kata lain, fungsi-fungsi dapat digunakan kembali dalam berbagai konteks dan bahkan dalam program yang berbeda, meningkatkan efisiensi dan produktivitas pengembangan perangkat lunak. Jadi, dalam keseluruhan, fungsi adalah alat yang sangat penting dalam pemrograman modern, yang membantu dalam mengorganisasi, memahami, dan merawat kode, serta memungkinkan pengembangan perangkat lunak yang lebih efisien dan skalabel.

1.1.2 Contoh Fungsi

Dalam C++, deklarasi fungsi adalah cara menginformasikan kepada kompiler tentang keberadaan dan tipe fungsi sebelum fungsi tersebut diimplementasikan. Deklarasi fungsi mencakup informasi tentang nama fungsi, jenis nilai kembalian (jika ada), dan tipe parameter (jika ada). Ini memberi tahu kompiler apa yang diharapkan dari fungsi tersebut ketika digunakan dalam program.

Deklarasi fungsi umumnya ditempatkan di bagian atas program (sebelum fungsi main() dalam program utama) atau dalam file header yang di-include dalam program utama. Ini memungkinkan program untuk memanggil fungsi sebelum implementasinya, yang dapat berguna dalam situasi di mana fungsi-fungsi tersebut didefinisikan dalam file terpisah.

Setelah deklarasi fungsi, kita dapat mengimplementasikan fungsi tersebut di bagian lain dari program atau dalam file terpisah. Deklarasi ini memungkinkan kita untuk menggunakan fungsi-fungsi ini di dalam program sebelum implementasinya ditemukan oleh kompiler. Berikut adalah contoh deklarasi fungsi hallo dan penjumlahan beserta pemanggilan fungsi dalam bahasa pemrograman C++ seperti disajikan pada Program 1 berikut.

//Program 1
#include <iostream>

 

// Deklarasi fungsi ‘hallo’ tanpa parameter dan tanpa nilai kembalian (void)

void hallo() {

std::cout << “Halo, Selamat datang di program ini!” << std::endl;

}

 

// Deklarasi fungsi ‘penjumlahan’ dengan dua parameter dan nilai kembalian (int)

int penjumlahan(int angka1, int angka2) {

int hasil = angka1 + angka2;

return hasil;

}

 

int main() {

// Memanggil fungsi ‘hallo’ untuk mencetak pesan sapaan

hallo();

 

int angka1 = 5;

int angka2 = 3;

 

// Memanggil fungsi ‘penjumlahan’ dan menyimpan hasilnya

int hasilPenjumlahan = penjumlahan(angka1, angka2);

 

// Mencetak hasil penjumlahan ke layar

std::cout << “Hasil penjumlahan ” << angka1 << ” dan ” << angka2 << ” adalah: ” << hasilPenjumlahan << std::endl;

 

return 0;

}

 

Halo, Selamat datang di program ini!

Hasil penjumlahan 5 dan 3 adalah: 8

Program 1 adalah contoh program sederhana dalam bahasa pemrograman C++. Program ini memiliki tujuan untuk mencetak pesan sapaan ke layar dan melakukan operasi penjumlahan antara dua angka yang ditentukan, kemudian mencetak hasilnya. Program ini dimulai dengan dua deklarasi fungsi, yaitu hallo  dan penjumlahan . Fungsi hallo  adalah fungsi tanpa parameter dan tanpa nilai kembalian ( void ). Fungsi ini bertanggung jawab mencetak pesan sapaan “Halo, Selamat datang di program ini!” ke layar menggunakan std::cout . Fungsi penjumlahan , di sisi lain, memiliki dua parameter ( int angka1  dan int angka2 ) dan mengembalikan nilai bertipe int . Fungsi ini digunakan untuk menjumlahkan dua angka yang diberikan sebagai argumen dan mengembalikan hasil penjumlahan tersebut.

Di dalam fungsi main() , program pertama-tama memanggil fungsi hallo()  untuk mencetak pesan sapaan ke layar. Selanjutnya, dua variabel angka1  dan angka2  dideklarasikan dan diinisialisasi dengan nilai 5 dan 3. Kemudian, program memanggil fungsi penjumlahan(angka1, angka2)  dengan menggunakan nilai-nilai ini sebagai argumen. Hasil penjumlahan disimpan dalam variabel hasilPenjumlahan . Akhirnya, program mencetak hasil penjumlahan bersama dengan nilai angka1  dan angka2  ke layar menggunakan std::cout .

Hasil dari eksekusi program ini adalah pesan sapaan “Halo, Selamat datang di program ini!” yang mencetak ke layar, diikuti oleh hasil penjumlahan dari angka1 (5) dan angka2 (3), yang pada contoh ini adalah 8. Program ini memberikan contoh sederhana tentang penggunaan fungsi, parameter, dan nilai kembalian dalam bahasa pemrograman C++.

1.2 Skema Pemrosesan

Skema pemrosesan, dalam konteks pemrograman, mengacu pada pendekatan atau rencana yang digunakan untuk mengorganisasi dan mengelola proses eksekusi dalam program komputer. Ini adalah bagian penting dalam merancang dan mengembangkan aplikasi perangkat lunak yang efisien. Skema pemrosesan membantu kita mengatur langkah-langkah yang diperlukan untuk menyelesaikan suatu tugas atau masalah dalam program. Ini melibatkan penggunaan struktur kontrol, fungsi, dan alur eksekusi yang tepat untuk mencapai tujuan tertentu.

Skema pemrosesan digunakan untuk mengendalikan urutan eksekusi instruksi dalam program. Ini membantu dalam menghindari kekacauan dan kesalahan logika serta memastikan bahwa program berjalan dengan benar sesuai dengan rencana yang telah ditetapkan. Dalam pemrograman, skema pemrosesan dapat mencakup penggunaan pernyataan kondisional (seperti if-else), perulangan (seperti for dan while), dan fungsi untuk mengelola aliran eksekusi program.

 

 

1.2.1 Sequential Processing (Pemrosesan Berurutan)

Sequential Processing, atau Pemrosesan Berurutan, adalah salah satu skema pemrosesan dasar dalam pemrograman di mana instruksi dieksekusi satu per satu dalam urutan yang telah ditentukan. Dalam skema ini, setiap pernyataan atau instruksi dijalankan secara berurutan dari awal program hingga akhirnya. Ini berarti bahwa satu instruksi harus selesai sebelum instruksi berikutnya dieksekusi. Sequential Processing sangat cocok untuk tugas-tugas sederhana dan linear di mana alur program sangat langsung dan tidak ada cabang eksekusi yang rumit. Contoh program Sequential Processing dalam bahasa C++ adalah program sederhana yang mencetak pesan sapaan dan melakukan penjumlahan dua angka seperti terlihat pada Program 2 berikut.

//Program 1.2
#include <iostream>

 

int main() {

std::cout << “Halo, Selamat datang di program ini!” << std::endl;

 

int angka1 = 5;

int angka2 = 3;

 

int hasilPenjumlahan = angka1 + angka2;

 

std::cout << “Hasil penjumlahan ” << angka1 << ” dan ” << angka2 << ” adalah: ” << hasilPenjumlahan << std::endl;

 

return 0;

}

 

Dalam program ini, instruksi dieksekusi secara berurutan. Pesan sapaan dicetak terlebih dahulu, kemudian variabel angka1  dan angka2  dijumlahkan, dan hasilnya dicetak ke layar. Sequential Processing menggambarkan alur eksekusi yang sangat linear tanpa pernyataan kondisional atau perulangan yang memerlukan pengambilan keputusan atau pengulangan.

1.2.2 Conditional Processing (Pemrosesan Kondisional)

Conditional Processing, atau Pemrosesan Kondisional, adalah skema pemrosesan dalam pemrograman di mana keputusan diambil berdasarkan kondisi atau kriteria tertentu. Dalam skema ini, kita menggunakan pernyataan kondisional seperti if , else if , dan else  untuk mengarahkan alur eksekusi program berdasarkan hasil evaluasi kondisi. Ini memungkinkan program untuk membuat pilihan di antara beberapa jalur eksekusi, tergantung pada apa yang diputuskan oleh kondisi yang diberikan.

Contoh program Conditional Processing dalam bahasa C++ adalah program yang menghitung nilai akhir mahasiswa berdasarkan nilai-nilai ujian dan tugasnya. Program ini akan mencetak apakah mahasiswa tersebut lulus atau gagal berdasarkan nilai akhirnya:

#include <iostream>

 

int main() {

double nilaiUjian = 85.5;

double nilaiTugas = 92.0;

 

double nilaiAkhir = (nilaiUjian + nilaiTugas) / 2.0;

 

if (nilaiAkhir >= 70.0) {

std::cout << “Selamat! Anda lulus dengan nilai akhir ” << nilaiAkhir << std::endl;

} else {

std::cout << “Maaf, Anda gagal dengan nilai akhir ” << nilaiAkhir << std::endl;

}

 

return 0;

}

 

Dalam program ini, kita menggunakan pernyataan kondisional if . Jika nilai akhir mahasiswa ( nilaiAkhir ) lebih besar atau sama dengan 70.0, maka program akan mencetak pesan “Selamat! Anda lulus dengan nilai akhir” diikuti oleh nilai akhir. Jika tidak, program akan mencetak pesan “Maaf, Anda gagal dengan nilai akhir” diikuti oleh nilai akhir. Conditional Processing memungkinkan program untuk membuat keputusan berdasarkan hasil evaluasi kondisi tertentu, dalam hal ini, apakah nilai akhir mencukupi untuk lulus atau tidak.

1.2.3 Looping (Pemrosesan Perulangan)

Pada skema pemrosesan perulangan, kita menggunakan perulangan untuk mengulangi sejumlah pernyataan atau blok kode tertentu selama kondisi tertentu terpenuhi. Perulangan seperti for , while , dan do-while  digunakan untuk menjalankan instruksi secara berulang. Skema ini sangat berguna untuk mengeksekusi tugas yang sama berkali-kali, seperti mencetak deret angka dengan pola tertentu.

Untuk mencetak deret angka dengan jarak yang bertambah 1 tiap perulangan, kita dapat menggunakan perulangan for  dengan nilai penambahan yang berbeda setiap kali. Berikut adalah contoh program dalam bahasa C++:

#include <iostream>

 

int main() {

int n = 5; // Jumlah angka dalam deret

int angka = 1; // Nilai awal deret

 

for (int i = 1; i <= n; i++) {

std::cout << angka << ” “;

angka += i;

}

 

std::cout << std::endl;

 

return 0;

}

 

Penjelasan:

– Dalam program ini, variabel n  digunakan untuk menentukan jumlah angka dalam deret.

– Variabel angka  digunakan untuk menyimpan nilai awal deret, yang dimulai dari 1.

– Perulangan for  digunakan untuk mengulangi proses pencetakan angka dalam deret.

– Pada setiap iterasi, nilai angka  dicetak ke layar, dan kemudian nilai angka  ditambah dengan nilai i , di mana i  adalah variabel penghitung perulangan. Nilai i  bertambah 1 pada setiap iterasi, sehingga menghasilkan jarak yang bertambah 1 tiap perulangan.

– Hasilnya adalah deret angka dengan jarak bertambah 1, yaitu 1, 2, 4, 7, dan 11. Dalam hal ini, Looping digunakan untuk menghasilkan deret angka dengan pola yang sesuai dengan kondisi tertentu di dalam perulangan.

1.2.4 Parallel Processing (Pemrosesan Paralel)

Parallel Processing adalah skema pemrosesan dalam pemrograman yang melibatkan eksekusi beberapa tugas secara bersamaan atau paralel. Dalam skema ini, beberapa proses atau thread dapat dieksekusi secara simultan, yang memungkinkan meningkatkan kinerja dan efisiensi program, terutama dalam pemrosesan data besar atau dalam lingkungan komputasi paralel.

Contoh penggunaan Parallel Processing dalam pemrograman bisa melibatkan pembuatan aplikasi yang dapat memproses beberapa pekerjaan secara paralel, seperti pemrosesan data dalam jumlah besar, pemrosesan gambar atau video dalam waktu nyata, atau komputasi ilmiah yang membutuhkan pemrosesan intensif. Berikut contoh program paralel processing:

#include <iostream>

#include <thread>

#include <vector>

 

void hitungJumlah(const std::vector<int>& arr, int& hasil, int awal, int akhir) {

hasil = 0;

for (int i = awal; i <= akhir; i++) {

hasil += arr[i];

}

}

 

int main() {

std::vector<int> array1 = {1, 2, 3, 4, 5};

std::vector<int> array2 = {6, 7, 8, 9, 10};

 

int hasil1, hasil2;

 

std::thread t1(hitungJumlah, std::ref(array1), std::ref(hasil1), 0, 2);

std::thread t2(hitungJumlah, std::ref(array2), std::ref(hasil2), 0, 2);

 

t1.join();

t2.join();

 

int hasilTotal = hasil1 + hasil2;

 

std::cout << “Hasil total: ” << hasilTotal << std::endl;

 

return 0;

}

1.2.5 Event-Driven Processing (Pemrosesan Berdasarkan Peristiwa)

Pemrosesan berdasarkan peristiwa adalah paradigma pemrograman di mana program menunggu peristiwa tertentu terjadi dan meresponsnya. Paradigma ini umumnya digunakan dalam pengembangan aplikasi berbasis antarmuka pengguna (GUI) dan aplikasi yang merespons input pengguna. Dalam model ini, program berjalan dalam loop tak terbatas dan secara aktif menunggu peristiwa, seperti klik tombol mouse, penekanan tombol keyboard, atau peristiwa lainnya, untuk terjadi. Ketika peristiwa tersebut terjadi, program meresponsnya dengan menjalankan kode yang sesuai dengan peristiwa tersebut.

Contoh Pemrosesan Berdasarkan Peristiwa dalam C++:

#include <iostream>

#include <SFML/Graphics.hpp>

 

int main() {

sf::RenderWindow window(sf::VideoMode(400, 200), “Contoh Event-Driven Processing”);

 

while (window.isOpen()) {

sf::Event event;

while (window.pollEvent(event)) {

if (event.type == sf::Event::Closed) {

window.close();

}

 

if (event.type == sf::Event::MouseButtonPressed) {

if (event.mouseButton.button == sf::Mouse::Left) {

std::cout << “Tombol kiri mouse ditekan.” << std::endl;

}

}

 

if (event.type == sf::Event::KeyPressed) {

if (event.key.code == sf::Keyboard::Space) {

std::cout << “Tombol spasi ditekan.” << std::endl;

}

}

}

 

window.clear();

// Gambar atau tampilkan elemen GUI di sini

window.display();

}

 

return 0;

}

Penjelasan:

– Dalam contoh ini, kita menggunakan SFML (Simple and Fast Multimedia Library) untuk membuat jendela aplikasi berbasis peristiwa.

– Program ini berjalan dalam loop utama yang terus berjalan selama jendela masih terbuka.

– Dalam loop tersebut, kita menggunakan window.pollEvent(event)  untuk menunggu peristiwa yang terjadi di jendela, seperti penutupan jendela, penekanan tombol mouse, atau penekanan tombol keyboard.

– Setelah mendeteksi peristiwa, program meresponsnya dengan menjalankan kode yang sesuai dengan jenis peristiwa tersebut.

– Dalam contoh ini, kita mencetak pesan ke konsol ketika tombol kiri mouse atau tombol spasi ditekan.

– Selain itu, program dapat melakukan tugas lain seperti menggambar elemen GUI, berdasarkan peristiwa yang terjadi.

1.2.6 State Machine Processing (Pemrosesan Mesin Keadaan)

Pemrosesan Mesin Keadaan adalah paradigma pemrograman yang digunakan untuk mengontrol alur program berdasarkan status atau keadaan sistem saat ini. Dalam skema ini, program berpindah dari satu keadaan ke keadaan lainnya berdasarkan peristiwa atau kondisi tertentu. Setiap keadaan memiliki seperangkat tugas atau perilaku yang berbeda, dan perpindahan antar-keadaan dipicu oleh peristiwa atau kondisi tertentu.

Contoh Pemrosesan Mesin Keadaan dalam C++:

#include <iostream>

 

// Definisikan keadaan-keadaan sistem

enum class State {

Idle,

Running,

Paused,

Stopped

};

 

int main() {

State current_state = State::Idle;

 

// Loop utama program

while (true) {

// Logika berdasarkan keadaan saat ini

switch (current_state) {

case State::Idle:

std::cout << “Sistem dalam keadaan Idle.” << std::endl;

// Logika untuk keadaan Idle

break;

case State::Running:

std::cout << “Sistem dalam keadaan Running.” << std::endl;

// Logika untuk keadaan Running

break;

case State::Paused:

std::cout << “Sistem dalam keadaan Paused.” << std::endl;

// Logika untuk keadaan Paused

break;

case State::Stopped:

std::cout << “Sistem dalam keadaan Stopped.” << std::endl;

// Logika untuk keadaan Stopped

break;

}

 

// Contoh perpindahan keadaan berdasarkan peristiwa

if (current_state == State::Idle) {

// Jika ada peristiwa tertentu, pindah ke keadaan Running

current_state = State::Running;

} else if (current_state == State::Running) {

// Jika ada peristiwa tertentu, pindah ke keadaan Paused

current_state = State::Paused;

} else if (current_state == State::Paused) {

// Jika ada peristiwa tertentu, pindah ke keadaan Stopped

current_state = State::Stopped;

} else if (current_state == State::Stopped) {

// Jika ada peristiwa tertentu, kembali ke keadaan Idle

current_state = State::Idle;

}

}

 

return 0;

}

 

Penjelasan:

– Dalam contoh ini, kami mendefinisikan keadaan-keadaan sistem dengan menggunakan enum class State . Keadaan-keadaan ini mencakup Idle, Running, Paused, dan Stopped.

– Program berjalan dalam loop utama dan terus memeriksa dan merespons berdasarkan keadaan saat ini. Setiap keadaan memiliki perilaku yang berbeda.

– Kami menggunakan pernyataan switch  untuk menjalankan logika yang sesuai dengan keadaan saat ini.

– Kami juga menunjukkan perpindahan antar-keadaan berdasarkan peristiwa tertentu. Misalnya, jika keadaan saat ini adalah Idle dan ada peristiwa tertentu, program akan beralih ke keadaan Running, dan seterusnya.

Pemrosesan Mesin Keadaan berguna dalam pengembangan perangkat lunak yang harus beroperasi dalam beberapa mode atau keadaan, dan ini membantu mengorganisasi logika program berdasarkan keadaan sistem saat ini.

1.3 Searching (Pencarian)

Searching, atau dalam bahasa Indonesia sering disebut pencarian, adalah proses untuk menemukan lokasi atau nilai tertentu dalam kumpulan data atau struktur data. Tujuan dari pencarian adalah untuk menemukan elemen yang sesuai dengan kriteria tertentu atau mencari tahu apakah elemen yang dicari ada atau tidak ada dalam data yang tersedia. Pencarian sering digunakan dalam pemrograman untuk mengekstrak informasi yang dibutuhkan dari data yang besar dan kompleks. Searching memiliki peran penting dalam pemrograman karena beberapa alasan yaitu:

  1. Pencarian Data: Dalam pemrograman, seringkali kita perlu mencari data tertentu dari kumpulan data yang besar. Misalnya, dalam aplikasi pencarian web, pengguna mencari informasi tertentu di internet. Pencarian juga digunakan dalam basis data untuk menemukan rekaman tertentu.
  1. Optimasi Algoritma: Efisiensi dalam pencarian sangat penting. Algoritma pencarian yang baik dapat menghemat waktu dan sumber daya komputasi. Penggunaan algoritma pencarian yang tepat dapat mempercepat eksekusi program.
  2. Kecerdasan Buatan: Dalam kecerdasan buatan (AI), pencarian digunakan untuk mengambil keputusan berdasarkan analisis data yang ada. Ini digunakan dalam berbagai aplikasi, termasuk permainan komputer, perencanaan rute, dan pemrosesan bahasa alami.
  3. Manajemen Data: Pencarian juga penting dalam manajemen data. Dalam struktur data seperti pohon pencarian biner dan tabel hash, pencarian memainkan peran kunci dalam mengakses dan memanipulasi data.

Contoh sederhana pencarian dalam pemrograman adalah mencari elemen tertentu dalam sebuah larik (array) angka. Berikut adalah contoh kode C++ yang melakukan pencarian sederhana dalam sebuah larik:

#include <iostream>

 

int main() {

int numbers[] = {5, 10, 15, 20, 25};

int target = 15;

bool found = false;

 

// Melakukan pencarian

for (int i = 0; i < 5; i++) {

if (numbers[i] == target) {

found = true;

break;

}

}

 

if (found) {

std::cout << “Angka ” << target << ” ditemukan dalam larik.” << std::endl;

} else {

std::cout << “Angka ” << target << ” tidak ditemukan dalam larik.” << std::endl;

}

 

return 0;

}

 

Dalam contoh ini, program mencari nilai target  dalam larik numbers  dan memberikan laporan apakah nilai tersebut ditemukan atau tidak. Ini adalah salah satu contoh sederhana pencarian, dan dalam kasus ini, pencarian dilakukan dengan menggunakan loop for .

1.4 Algoritma Searching

Algoritma searching (pencarian) adalah langkah-langkah atau metode yang digunakan untuk menemukan elemen tertentu dalam kumpulan data. Beberapa algoritma searching umum meliputi:

  1. Linear Search (Pencarian Linear): Ini adalah algoritma pencarian paling sederhana. Dalam linear search, Anda memeriksa setiap elemen satu per satu dalam urutan untuk mencari elemen yang dicari. Ini efektif untuk kumpulan data yang tidak terlalu besar, tetapi tidak efisien untuk kumpulan data besar.
  2. Binary Search (Pencarian Biner): Algoritma ini bekerja pada kumpulan data yang sudah diurutkan. Binary search membagi kumpulan data menjadi dua bagian, kemudian membandingkan elemen tengah dengan elemen yang dicari. Jika lebih kecil, pencarian dilanjutkan pada setengah kiri kumpulan data; jika lebih besar, pencarian dilanjutkan pada setengah kanan. Ini adalah algoritma yang sangat efisien untuk kumpulan data besar.
  3. Hashing: Dalam hashing, sebuah fungsi hash digunakan untuk mengkonversi elemen yang dicari menjadi indeks dalam tabel hash. Ini adalah algoritma pencarian yang cepat dan efisien ketika digunakan dengan benar.
  4. Interpolation Search (Pencarian Interpolasi): Algoritma ini bekerja pada kumpulan data yang diurutkan dan kontinu. Itu mencoba memperkirakan lokasi elemen yang dicari berdasarkan nilai-nilai sekitarnya. Ini lebih cepat daripada linear search tetapi tidak secepat binary search dalam beberapa kasus.

 

1.5    Struktur Data

 

1.5.1                                                                                                        Pengertian Struktur Data

Struktur data adalah cara untuk mengorganisasi dan menyimpan data dalam program komputer. Ini adalah konsep penting dalam pemrograman yang memungkinkan kita untuk mengelola, mengakses, dan memanipulasi data dengan efisien. Struktur data mendefinisikan bagaimana data akan disusun, diakses, dan diolah dalam program.

Struktur data dapat bervariasi dalam kompleksitasnya, mulai dari struktur data sederhana seperti larik (array) dan daftar (list) hingga struktur data yang lebih kompleks seperti pohon (tree) dan graf (graph). Pemilihan struktur data yang tepat sangat bergantung pada tugas atau masalah yang akan dipecahkan dalam program. Struktur data digunakan dalam pemrograman untuk beberapa tujuan penting:

  1. Organisasi Data: Struktur data membantu mengorganisasi data sehingga dapat diakses dan dimanipulasi dengan efisien. Ini memungkinkan kita untuk mengelompokkan data yang terkait bersama-sama.
  2. Efisiensi: Dengan menggunakan struktur data yang tepat, kita dapat meningkatkan efisiensi dalam akses dan pengolahan data. Sebagai contoh, penggunaan pohon pencarian biner dalam pencarian data memungkinkan pencarian yang lebih cepat daripada linear search.
  3. Keterbacaan Kode: Struktur data juga dapat membuat kode program lebih mudah dibaca dan dimengerti. Misalnya, menggunakan struktur data yang sesuai untuk merepresentasikan data pelanggan dalam program keuangan akan membuat kode lebih konsisten dan mudah dimengerti.
  4. Pengelolaan Memori: Struktur data juga berperan dalam pengelolaan memori. Misalnya, alokasi memori dinamis dalam struktur data seperti daftar berantai (linked list) memungkinkan penggunaan memori yang efisien.
  5. Pemrosesan Data: Struktur data juga mendukung berbagai operasi pemrosesan data seperti pengurutan, pencarian, penyisipan, dan penghapusan.

Pemahaman tentang struktur data adalah kunci dalam pengembangan perangkat lunak yang efisien dan efektif. Pemrogram harus memilih dan merancang struktur data yang sesuai untuk memenuhi kebutuhan aplikasi mereka.

1.5.2 Jenis-jenis Struktur Data

Ada banyak jenis struktur data yang digunakan dalam pemrograman untuk berbagai keperluan. Beberapa jenis struktur data umum meliputi:

  1. Linked List (Daftar Berantai): Linked list adalah struktur data linear yang terdiri dari sejumlah simpul (node) yang terhubung satu sama lain. Setiap simpul memiliki dua komponen, yaitu data dan referensi ke simpul berikutnya dalam daftar. Linked list dapat digunakan untuk penyisipan dan penghapusan data dengan cepat.
  2. Stack (Tumpukan): Stack adalah struktur data linear yang mengikuti prinsip LIFO (Last In, First Out). Artinya, elemen yang terakhir dimasukkan ke dalam tumpukan akan menjadi yang pertama dikeluarkan. Operasi umum dalam stack adalah push (menambahkan elemen) dan pop (menghapus elemen).
  3. Queue (Antrian): Queue adalah struktur data linear yang mengikuti prinsip FIFO (First In, First Out). Artinya, elemen yang pertama dimasukkan ke dalam antrian akan menjadi yang pertama dikeluarkan. Operasi umum dalam queue adalah enqueue (menambahkan elemen) dan dequeue (menghapus elemen).
  4. Tree (Pohon): Tree adalah struktur data hierarkis yang terdiri dari simpul-simpul yang terhubung dalam bentuk cabang. Setiap simpul memiliki satu simpul induk, kecuali simpul akar yang tidak memiliki simpul induk. Tree digunakan untuk representasi hierarki data seperti struktur folder pada sistem file.
  5. Graph (Graf): Graf adalah struktur data yang terdiri dari simpul-simpul yang terhubung oleh tepi. Graf digunakan untuk merepresentasikan hubungan antara objek dalam berbagai bidang, seperti jaringan komputer, sosial media, dan perencanaan rute.
  6. Hash Table (Tabel Hash): Hash table adalah struktur data yang mengimplementasikan fungsi hash untuk mengakses dan menyimpan data dengan cepat. Ini digunakan untuk pencarian cepat dan akses data dalam kumpulan data besar.
  7. Array (Larik): Array adalah struktur data sederhana yang terdiri dari elemen-elemen yang disusun dalam urutan tertentu. Ini adalah struktur data yang umum digunakan untuk penyimpanan data dalam jumlah besar.