2015 STRUKTUR DATA Pendidikan Teknologi Informasi Universitas PGRI Semarang Ika Menarianti, M.Kom KONSEP STRUKTUR DATA 1.1. Filosofi Struktur Data Struktur dapat diartikan dengan ”susunan”, ”bangunan”, ”komposisi”, dan sebagainya. Kata struktur juga mengartikan bahwa elemen-elemen pembentuk ”susunan”, ”bangunan” dan ”komposisi” di atas saling terkait sebagaimana jika kita mengartikan kata ”sistem.” Kata “data” dalam bahasa Inggris berasal dari kata “datum” dari bahasa Latin yang berarti fakta. Kata tersebut bersifat plural, sebagaimana kata air, udara, dan semacamnya. Karenanya, kata “data” akan salah jika disebut atau ditulis dengan “data-data,” “banyak data,” dan semacamnya. Bagi manusia, data dapat merupakan segala sesuatu (stimulus) yang dapat ditangkap oleh indera manusia. Berbeda dengan manusia, data bagi komputer adalah segala sesuatu yang dapat dilambangkan, dikodekan, atau didigitalisasikan ke dalam lambang-lambang atau kode-kode yang dimengerti oleh komputer. Secara garis besarstruktur data dapat berupa angka-angka, huruf-huruf, gambar-gambar, atau simbol-simbol apapun yang dapat diberikan (input) ke komputer, dan dikeluarkan (output) dari komputer. Karena komputer itu benda mati yang tidak memiliki kemampuan apapun, termasuk kemampuan untuk mengenali mana huruf, mana angka, mana data, mana informasi, dan sebagainya, maka berikut ini penjelasan mendasar tentang bagaimana data bagi komputer itu “diciptakan” oleh daya nalar manusia. 1.1. Konsep Struktur Data Struktur data adalah sebuah bagian dari ilmu pemrograman dasar yang mempunyai karakteristik yang terkait dengan sifat dan cara penyimpanan sekaligus penggunaan atau pengaksesan data. Struktur data bertujuan agar cara merepresentasikan data dalam membuat program dapat dilakukan secara efisien dalam pengolahan di memori dan pengolahan penyimpanan dari program ke storage juga lebih mudah dilakukan. Pembuatan struktur data dimulai dari analisis perancangan data apa yang harus dimanipulais di memori agar program yang dibuat lebih efisien. Selanjutnya adalah mengimplementasikan struktur data ke dalam bahasa pemrograman dan menggunakan struktur data yang telah dibuat untuk memanipulasi data. Struktur data meliputi, senarai, tumpukan, antrian, pohon, graf, dimana digunakan pointer dan array dalam merepresentasikan sebuah struktur data. 2 Secara garis besar, struktur data adalah model logika untuk menyimpan, merepresentasikan data dan cara untuk menyediakan tempat yang terorganisir agar data yang disimpan dapat dibaca dengan lebih mudah. 1.2. Jenis Struktur Data Dalam struktur data, terdapat beberapa jenis berdasarkan elemen datanya, yaitu: 1. Struktur Data Sederhana a. Array(Larik) Larik adalah struktur data statik yang menyimpan sekumpulan elemen yang bertipe sama. Setiap elemen diakses langsung melalui indeksnya. Indeks larik harus tipe data yang menyatakan keterurutan misalnya integer atau karakter. Banyaknya elemen larik harus sudah diketahui sebelum program dieksekusi. Tipe elemen larik dapat berupa tipe sederhana, tipe terstruktur, atau tipe larik lain. Nama lain array adalah Larik, tabel, atau vektor b. Record(Catatan) Adalah definisi tipe dan sekumpulan primitif (operasi dasar) terhadap tipe tersebut. Tipe diterjemahkan menjadi tipe terdefinisi dalam bahasa pemrograman yang bersangkutan. 2. Struktur Data Majemuk a. Linier Struktur data yang hubungan antara elemen datanya dinyatakan dengan lokasi memori yang berurutan atau dengan pointer. 1) Stack(Tumpukan) Stack (tumpukan) adalah list linier yang dikenali elemen puncaknya (top), aturan penyisipan dan penghapusan elemennya tertentu (penyisipan selalu dilakukan “di atas” (top), penghapusan selalu dilakukan pada top). Karena aturan penyisipan dan penghapusan semacam itu, top adalah satu-satunya alamat tempat terjadi operasi. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus. Dikatakan bahwa elemen stack akan tersusun secara LIFO (Last In First Out). Stackatau tumpukan merupakan sebuah koleksi objek yang menggunakan prinsip LIFO (Last In First Out), yaitu data yang terakhr kali dimasukkan akan pertama kali keluar dari stack tersebut. Stack dapat diimplementasikan sebagai representasi berkait atau kontigu (dengan tabel fix). Ciri Stack : Elemen TOP (puncak) diketahui penyisipan dan penghapusan elemen selalu dilakukan di TOP 3 Last In First Out Pemanfaatan Stack : Perhitungan ekspresi aritmatika (posfix) algoritma backtraking (runut balik) algoritma rekursif 2) Queue(Antrian) Queue (antrian) adalah list linier yang dikenali elemen pertama (head) dan elemen terakhirnya (tail). Queue juga berarti salah satu bentuk struktur data yang juga merepresentasikan linked list. Dimana yang berbeda dalam queue tersebut adalah cara menambah data dan mengambil data. Sesuai dengan namanya yaitu queue atau antrian, data yang dimasukan dari belakang (insertAtBack), sehingga data yang pertama kali dimasukan berada pada node pertama, dan data yang dimasukan terakhir juga akan berada pada node yang terakhir. Dimana untuk pengambilan proses pengambilan datanya, yang diambil adalah data pertama, dan setelah data pertama diambil maka node yang berisi data pertama tersebut akan di-null kan, sehingga posisi node pertama akan berpindah pada node setelah node pertama tersebut. Proses ini biasanya disebut dengan FIFO, atau First In First Out. Metode yang digunakan untuk memasukan data kedalam queue tersebut dinamakan enqueue dan yang untuk mengambil data dinamakan dequeu..Dimana untuk pengambilan proses pengambilan datanya, yang diambil adalah data pertama, dan setelah data pertama diambil maka node yang berisi data pertama tersebut akan di-null kan, sehingga posisi node pertama akan berpindah pada node setelah node pertama tersebut. Proses ini biasanya disebut dengan FIFO, atau First In First Out. 3) List dan Multi-List (Daftar) List linier adalah sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari 2 bagian. Sebuahlistlinier dikenali dengan (1) elemen pertamanya, biasanya melalui alamat elemen pertama yang disebut (first); (2) Alamat elemen berikutnya (suksesor), jika kita mengetahui alamat sebuah elemen, yang dapat diakses melalui fieldnext; (3) Setiap elemen mempunyai alamat, yaitu tempat elemen disimpan dapat diacu. Untuk mengacu sebuah elemen, alamat harus terdefinisi. Dengan alamat tersebut informasi yang tersimpan pada elemen list dapat diakses; (4) Elemen terakhirnya. b. Non-Linier 1) Binary Tree (Pohon Biner) 4 Sebuah pohon biner (binary tree) adalah himpunan terbatas yang mungkin kosong atau terdiri dari sebuah simpul yang disebut sebagai akar dan dua buah himpunan lain yang disjoin yang merupakan pohon biner yang disebut sebagai sub pohon kiri (left) dan sub pohon kanan (right) dari pohon biner tersebut. Pohon biner merupakan tipe yang sangat penting dari struktur data dan banyak dijumpai dalam berbagai terapan. Karakteristik yang dimiliki oleh pohon biner adalah bahwa setiap simpul paling banyak hanya memiliki dua buah anak, dan mungkin tidak punya anak. Istilah-istilah yang digunakan sama dengan istilah pada pohon secara umum. 2) Graph (Graf) Graph merupakan struktur data yang paling umum. Jika struktur linier memungkinkan pendefinisian keterhubungan sekuensial antara entitas data, struktur data tree memungkinkan pendefinisian keterhubungan hirarkis, maka struktur graph memungkinkan pendefinisian keterhubungan tak terbatas antara entitas data. Banyak entitas-entitas data dalam masalahmasalah nyata secara alamiah memiliki keterhubungan langsung (adjacency) secara tak terbatas demikian. Contoh: informasi topologi dan jarak antar kota-kota di pulau Jawa. Dalam masalah ini kota X bisa berhubungan langsung dengan hanya satu atau lima kota lainnya. Untuk memeriksa keterhubungan dan jarak tidak langsung antara dua kota dapat diperoleh berdasarkan data keterhubungan-keterhubungan langsung dari kota-kota lainnya yang memperantarainya. Representasi data dengan struktur data linier ataupun hirarkis pada masalah ini masih bisa digunakan namun akan membutuhkan pencarian-pencarian yang kurang efisien. Struktur data graph secara eksplisit menyatakan keterhubungan ini sehingga pencariannya langsung (straightforward) dilakukan pada strukturnya sendiri 1.3. Gambaran Penggunaan Struktur Data Sebuah contoh penggunaan struktur data dapat dilihat pada persoalan penanganan kartu pasien, dimana pada saat rekam medis semua data pasien diurutkan sesuai dengan nama pasien. Semua data disimpan terurut dan dikelompokkan berdasarkan huruf pertama dari nama pasien. Ini dimaksudkan untuk memudahkan pada saat pencarian data. Hal yang sama berlaku pada struktur data ini. Nah persoalannya: - Bagaimana jika data seperti itu diproses dalam komputer? - Struktur data apa yang paling tepat untuk digunakan? 5 Sebelum menjawab itu , perlu diketahui secara sekilas gambaran mengenai struktur data yang dijabarkan pada tabel dibawah ini: Tabel 1. Kelebihan dan Kekurangan Struktur Data Struktur Data Kelebihan Kekurangan Array Penambahan data dibelakang Ukuran mudah dilakukan Array terstruktur Pencarian tetap, penghapusan lambat, pencarian lama jauh lebih cepat Ukuran tetap, penghapusan dibandingkan array yang tidak lambat, penyisipan lama urut Tumpukan Penambahan dilaksanakan Pencarian dan penghapusan dengan cepat, akses terhadap lambat data yang dimasukkan terakhir bisa kali dilakukan dengan cepat Antrian Data yang pertama kali masuk Akses data yang lain lambat mudah untuk diakses Senarai berantai Penyisipan dan penghapusan data Pencarian lama mudah Pohin biner Penyisipan dan penghapusan data Penghapusan kompleks mudah Tabel hash Akses cepat bila kunci diketahui. Algoritma penghapusan ada yang Penyisipan cepat sederhana dan ada pula yang kompleks. Akses pelan jika kunci tidak diketahui. 1.4. Efisien? Bagaimana mengukurnya? Ukuran efisien dalam struktur data didasarkan pada waktu atau memori yang dibutuhkan. Suatu algoritma yang diterapkan pada suatu struktur data sangat efisien dalam hal waktu kalau waktu yang diperlukan untuk melaksanakan suatu proses lebih cepat daripada algoritma yang lain. Idealnya suatu algoritma mempunyai tingkat efisiensi baik dalam hal waktu maupun memori. Dalam prakteknya, ada korelasi terbalik antara waktu dan memori (Stephens, 1998). Istilah 6 kompleksitas ruang waktu dipakai untuk melakukan analisis suatu algoritma baik terhadap memori maupun waktu. Untuk kepentingan mengetahui kompleksitas waktu, notasi Big O biasa digunakan. Suatu algoritma memiliki kompleksitas O(f(N)) (baca:orde f terhadap N) jika waktu yang diperlukan oleh algoritma mengikuti laju fungsi f(N) dengan kondisi nilai N yang besar. Untuk memahami Big O, lihatlah algoritma berikut yang menyatakan pengulangan Jum Jum + 1 sebanyak N kali. FOR I 1 TO N Jum Jum + 1 END – FOR Untuk menentukan Big O, yang perlu diperhatikan adalah pada bagian pengulangan Jum Jum + 1 sebanyak N kali maka Big O algoritma tersebut adalah O(N). Bagaimana dengan algoritma semacam berikut? FOR I 1 TO N FOR J 1 TO N Jum Jum + A [ I, J ] END – FOR END – FOR Pada contoh diatas Jum Jum + A [ I, J ] proses sebanyak N x N. Oleh karena itu, algoritma tersebut mempunyai Big O berupa O(N2). Bagaimana dengan algoritma berikut? FOR I 1 TO M FOR J 1 TO N xx+1 END – FOR END – FOR Pada proses diatas, perulangan dilakukan sebanyak M kali dan sebanyak N kali. Maka Big O berupa O(MN). Perhitungan Big O sesungguhnya menggunakan pendekatan, lihat algoritma berikut: FOR I 1 TO N FOR J 1 TO I A [ I, J] = 0 7 END – FOR END – FOR Berapa Big O-nya? Pada pengulangan pertama (FOR I), eksekusi sebanyak N. Pada pengulangan kedua (FOR J), jumlah sebanyak nilai I. I dianggap sama dengan N (mengingat pada I sebesar N eksekusinya sebanyak N kali). Dengan demikian Big O berupa O(N2). Dalam menentukan Big O, yang perlu diperhatikan adalah bagian yang berkontribusi menyumbang waktu eksekusi yang paling lama. Sebagai contoh algoritma mempunyai waktu N 3 + N. Pada keadaan seperti ini Big O berupa O(N3). N yang lebih kecil diabaikan. 1.5. Tahapan Pembuatan Struktur Data Pembuatan struktur data dalam bahasa pemrograman harus melalui tahap berikut: 1. Tahap Pertama Spesifikasi atau pendeskripsian struktur data menyatakan apa yang dapat dilakukan struktur data, bukan cara penempatannya. Pendeskripsian ini melibatkan level logic sehingga dapat digunakan konvensi matematika untuk menyatakan sifat-sifat struktur data yang dikehendaki. 2 . Tahap Kedua Implementasi menyatakan cara penerapan struktur data dengan struktur data yang telah ada. Implementasi struktur data adalah proses pendefinisian tipe data abstark sehingga semua operasi dapat dieksekusi computer. Implementasi berisi dekklarasi struktur penyimpanan item data serta algoritma untuk implementasi operasi, sehingga menjamin terpenuhinya karakteristik struktur data, relasi item data tau invariant pada struktur data tersebut. 3. Tahap Ketiga Pemrograman struktur data adalah penterjemahan menjadi pernyataan dalam bahasa pemrograman tertentu.struktur data dibangun menggunakan fasilitas pembentukkan atau pembuatan struktur data yang disediakan bahasa seperti array, record dan lain-lain. 8