Konsep Struktur Data

advertisement
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
xx+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
Download