STRUKTUR DATA Struktur data adalah cara menyimpan atau
merepresentasikan data didalam komputer agar bisa dipakai secara efisien.
Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau
keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan
dalam bentuk tulisan, suara, gambar, sinyal atau simbol.
Secara garis besar type data dapat dikategorikan menjadi:
Type data sederhana. Type data sederhana tunggal, misalnya
Integer, real, boolean dan karakter.
Type data sederhana majemuk, misalnya String
Struktur Data, meliputi: Struktur data sederhana, misalnya
array dan record.
Struktur data majemuk, yang terdiri dari: Linier : Stack,
Queue, sertaList dan Multilist Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat didalam proses
pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga
menjadikan program secara keseluruhan lebih efisien dan sederhana.
Struktur data yang standar yang biasanya digunakan dibidang
informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist * Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )
1. Larik (Array)
Larik (Bahasa Inggris: array), dalam ilmu komputer, adalah
suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama
yang sama dan menempati tempat di memori yang berurutan (kontinu) serta bertipe
data sama pula.
Larik dapat diakses berdasarkan indeksnya. Indeks larik umumnya
dimulai dari 0 dan ada pula yang dimulai dari angka bukan 0. Pengaksesan larik
biasanya dibuat dengan menggunakan perulangan (looping).
Larik Satu Dimensi
Larik satu dimensi merupakan jenis larik dasar dan jenis
larik yang paling sering digunakan, pemakaian larik satu dimensi terutama
dipakai dalam tipe data string (terutama dalam bahasa Bahasa pemrograman C).
Larik Dua Dimensi
Larik dua dimensi merupakan tipe larik yang lain. Larik dua
dimensi sering dipakai untuk merepresentasikan tabel dan matriks dalam
pemrograman.
Larik dalam beberapa bahasa pemrograman
Bahasa Pascal
Larik dalam bahasa Pascal dapat didefinisikan dengan indeks
awal dan indeks akhirnya.
Contoh:
program larik;
var arr: array[1..10] of integer; //larik dengan indeks awal 1 dan indeks akhir
10
begin
arr[1] := 5; //memasukkan nilai ke indeks 1
writeln(arr[i]); //mencetak angka 5
end.
Bahasa C
Larik dalam bahasa C selalu dimulai dari indeks 0. Larik
dapat didefinisikan secara statik atau dinamik. Jika didefinisikan statik,
ukuran larik akan tetap dari awal program hingga akhir program. Jika
didefinisikan dinamik, ukuran larik dapat berubah selama program berjalan
karena memesan tempat pada memori heap. Proses pemesanan tempat pada memori
disebut dengan alokasi. Sedangkan proses pembebasan memori yang sudah dipesan
disebut dengan dealokasi.
Contoh larik statik:
#include <stdio.h>
int main(){
int arr[10]; //indeks awal 0 dan indeks akhir 9
arr[0] = 5;
printf(“%d\n”, arr[0]);
}
Contoh larik dinamik:
int main(){
int * arr;
arr = (int *) malloc(10 * sizeof(int)); //memesan 10 tempat
pada memori
arr[0] = 5;
free(arr); //menghancurkan
larik. Memori pada heap dibebaskan
arr = (int *) malloc(5 * sizeof(int)); //memesan 5 tempat baru pada memori
free(arr); //di akhir
program jangan lupa untuk menghancurkan larik dinamik
}
Bahasa Java
Dalam bahasa Java tipe data larik direpresentasikan sebagai
sebuah objek khusus. Karena itu pada bahasa Java larik yang dibuat selalu
bersifat dinamik. Namun walaupun bersifat dinamik, larik pada bahasa Java tidak
perlu dihancurkan karena proes penghancuran dilakukan secara otomatis melalui
suatu prosedur yang disebut dengan Pengumpulan sampah (Inggris: Garbage
Collecting). Sama seperti bahasa C, indeks larik selalu dimulai dari 0.
Contoh:
public class larik {
public static void main(String args[]) {
int[] arr = new arr[10];
arr[0] = 5;
System.out.println(arr[0]);
}
}
PHP
Sama seperti di JAVA larik di PHP juga merupakan sebuah
object lebih tepatnya lagi map terorder. Ada dua tipe larik di PHP, indexed
array (simple array) dan associated array (value array). Di PHP, element larik
bisa berupa string, Bilangan, boolean, dan semua tipe data primitif lainnya,
termasuk larik juga bisa menjadi element larik lainnya.
Cara medefinisikan larik:
#mendefinisikan array kosong
$larik = array();
Contoh indexed array (simple array):
$jam = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$hari = array(‘senin’, ‘selasa’, ‘selasa’, ‘rabu’, ‘kamis’,
‘jumat’, ‘sabtu’);
Contoh associated array:
$bulan = array(‘1’=>’January’, ‘2’=>’February’,
‘3’=>’Maret’, ‘4’=>’April’);
$komponenKalender = array(
‘bulan’=> array(1, 2, 3, 4, 5, 6, 7, 8, 9 ,10 , 11, 12),
‘hari’ => array(‘senin’, ‘selasa’, ‘selasa’, ‘rabu’,
‘kamis’, ‘jumat’, ‘sabtu’)
);
2. STACK
Pengertian Stack
atau Tumpukan adalah suatu stuktur data yang penting dalam pemrograman yang
mempunyai sifat LIFO (Last In First Out), Benda yang terakhir masuk ke dalam
stack akan menjadi benda pertama yang dikeluarkan dari stack.
Stack (Tumpukan) adalah list linier yang dikenali elemen
puncaknya (TOP) dan Aturan penyisipan dan penghapusan elemennya tertentu.
Penyisipan selalu dilakukan “di atas“ TOP dan Penghapusan selalu dilakukan pada
TOP
Pemanfaatan Stack :
* Perhitungan ekspresi aritmatika (posfix)
* algoritma backtraking (runut balik)
* algoritma rekursif
OPERASI-OPERASI/FUNGSI STACK
Push : digunakan untuk menambah item pada stack pada
tumpukan paling atas
Pop : digunakan
untuk mengambil item pada stack pada tumpukan paling atas
Clear : digunakan
untuk mengosongkan stack
IsEmpty : fungsi yang digunakan untuk mengecek apakah stack
sudah kosong
IsFull : fungsi
yang digunakan untuk mengecek apakah stack sudah penuh
3. Pohon (Tree)
Dalam ilmu komputer, sebuah Pohon adalah suatu struktur data
yang digunakan secara luas yang menyerupai struktur pohon dengan sejumlah
simpul yang terhubung.
Simpul (node)
Sebuah Simpul dapat mengandung sebuah nilai atau suatu
kondisi atau menggambarkan sebuah struktur data terpisah atau sebuah bagian
pohon itu sendiri. Setiap simpul dalam sebuah pohon memiliki nol atau lebih
simpul anak (child nodes), yang berada dibawahnya dalam pohon (menurut perjanjian,
pohon berkembang ke bawah, tidak seperti yang dilakukannya di alam). Sebuah
simpul yang memiliki anak dinamakan simpul ayah (parent node) atau simpul
leluhur (ancestor node) atau superior. Sebuah simpul paling banyak memiliki
satu ayah. Tinggi dari pohon adalah panjang maksimal jalan ke sebuah daun dari
simpul tersebut. Tinggi dari akar adalah tinggi dari pohon. Kedalaman dari
sebuah simpul adalah panjang jalan ke akarnya dari simpul tersebut.
Akar (Root nodes)
Simpul yang paling atas dalam pohon adalah akar (root node).
Menjadi simpul teratas, simpul akar tidak akan memiliki orang tua. Ini
merupakan simpul di mana biasanya merupakan tempat untuk memulai operasi dalam
pohon (walaupun beberapa algoritma dimulai dengan daun dan berakhir pada akar).
Semua simpul yang lain dapat dicapai dari akar dengan menelusuri pinggiran atau
pranala. (Dalam definisi resmi, setiap jalan adalah khas). Dalam diagram, ini
secara khusus di gambar paling atas. Di beberapa pohon, seperti heap, akar
memiliki sifat khusus. Setiap simpul dalam sebuah pohon dapat dilihat sebagai
akar dari sub pohon yang berakar pada simpul tersebut.
Daun (Leaf nodes)
Semua simpul yang berada pada tingkat terendah dari pohon
dinamakan daun (leaf node). Sejak mereka terletak pada tingkat paling bawah,
mereka tidak memiliki anak satupun. Seringkali, daun merupakan simpul terjauh
dari akar. Dalam teori grafik, sebuah daun adalah sebuah sudut dengan tingkat 1
selain akar (kecuali jika pohonnya hanya memiliki satu sudut; maka akarnya
adalah daunnya juga). Setiap pohon memiliki setidaknya satu daun. Dalam pohon
berdasarkan genetic programming sebuah daun (juga dibilang terminal) adalah
bagian terluar dari sebuah program pohon. Jika dibandingkan dengan fungsinya
atau simpul dalam, daun tidak memiliki argumen. Di banyak kasus dalam daun-GP
input ke programnya.

Simpul dalam (Internal nodes)
Sebuah simpul dalam adalah semua simpul dari pohon yang
memiliki anak dan bukan merupakan daun. Beberapa pohon hanya menyimpan data
didalam simpul dalam, meskipun ini mempengaruhi dinamika penyimpanan data dalam
pohon. Sebegai contoh, dengan daun yang kosong, seseorang dapat menyimpan
sebuah pohon kosong dengan satu daun. Bagaimanapun juga dengan daun yang dapat
menyimpan data, tidak dimungkinkan untuk menyimpan pohon kosong kecuali jika
seseorang memberikan beberapa jenis penanda data di daun yang menandakan bahwa
daun tersebut seharusnya kosong (dengan demikian pohon itu seharusnya kosong
juga). Sebaliknya, beberapa pohon hanya menyimpan data dalam daun, dan
menggunakan simpul dalam untuk menampung metadata yang lain, seperti jarak
nilai dalam sub pohon yang berakar pada simpul tersebut. Jenis pohon ini
berguna untuk jarak yang meragukan.
Sub pohon (Subtrees)
Sebuah sub pohon adalah suatu bagian dari pohon struktur
data yang dapat dilihat sebagai sebuah pohon lain yang berdiri sendiri. Simpul
apapun dalam pohon P, bersama dengan seluruh simpul dibawahnya, membentuk
sebuah sub pohon dari P. Sub pohon yang terhubung dengan akar merupakan
keseluruhan pohon tersebut. Sub pohon yang terhubung dengan simpul lain manapun
dinamakan sub pohon asli (proper subtree).
Penyusunan pohon
Terdapat dua jenis pohon. Sebuah pohon tidak terurut
(unordered tree) adalah sebuah pohon dalam arti struktural semata-mata, yang
dapat dikatakan memberikan sebuah simpul yang tidak memiliki susunan untuk anak
dari simpul tersebut. Sebuah pohon dengan suatu susunan ditentukan, sebagai
contoh dengan mengisi bilangan asli berbeda ke setiap anak dari simpul
tersebut, dinamakan sebuah pohon terurut (ordered tree), dan struktur data yang
dibangun didalamnya dinamakan pohon terurut struktur data (ordered tree data
structures). Sejauh ini pohon terurut merupakan bentuk umum dari pohon struktur
data. Pohon biner terurut merupakan suatu jenis dari pohon terurut.
Hutan
Sebuah hutan adalah sebuah himpunan yang terdiri dari pohon
terurut. Lintasan inorder, preorder, dan postorder didefinisikan secara
rekursif untuk hutan.
– Inorder
1. lewati inorder hutan yang dibentuk oleh sub pohon yang
pertama dalam hutan, jika ada
2. kunjungi akar dari pohon pertama.
3. lewati inorder hutan yang dibentuk oleh sisa pohon dalam
hutan, jika ada.
– Preorder
1. kunjungi akar dari pohon pertama.
2. lewati preorder hutan yang dibentuk oleh sub pohon yang
pertama dalam hutan, jika ada
3. lewati preorder hutan yang dibentuk oleh sisa pohon dalam
hutan, jika ada.
– Postorder
1. lewati postorder hutan yang dibentuk oleh sub pohon yang
pertama dalam hutan, jika ada
2. lewati postorder hutan yang dibentuk oleh sisa pohon
dalam hutan, jika ada.
3. kunjungi akar dari pohon pertama.
Penggambaran pohon
Ada banyak cara untuk menggambarkan pohon; pada umumnya
penggambaran mewakili simpul sebagai rekor yang dialokasikan pada heap (bedakan
dengan heap struktur data) yang mengacu pada anaknya, ayahnya, atau keduanya,
atau seperti data materi dalam array, dengan hubungan diantaranya ditentukan
oleh posisi mereka dalam array (contoh binary heap).
Pohon sebagai grafik
Dalam teori grafik, sebuah pohon adalah sebuah grafik
asiklis yang terhubung. Pohon yang berakar merupakan sebuah grafik dengan sudut
tunggal diluar sebagai akar. Dalam kasus ini, dua sudut apapun yang terhubung
dengan sebuah sisi mewarisi hubungan orang tua dan anak. Sebuah grafik asiklis
dengan bermacam-macam komponen yang terhubung atau himpunan dari pohon-pohon
yang berakar kadang-kadang dipanggil hutan.
Metode traversal
Melangkah melalui materi dari pohon, dengan arti dari
hubungan antara orang tua dan anak, dinamakan menelusuri pohon, dan tindakannya
adalah sebuah jalan dari pohon. Seringkali, sebuah operasi mungkin dapat
dilakukan sebagai penunjuk ysng mengacu pada simpul khusus. Sebuah penelusuran
dimana setiap simpul ayah dikunjungi sebelum anaknya dinamakan pre-order walk,
yaitu sebuah penelusuran dimana anaknya dikunjungi sebelum ayahnya
masing-masing dinamakan post-order walk.
Operasi umum
* Menghitung seluruh materi (item)
* Pencarian untuk sebuah materi
* Menambahkan sebuah materi pada sebuah posisi tertentu
dalam pohon
* Menghapus sebuah materi
* Mengeluarkan seluruh bagian dari sebuah pohon pruning
* Menambahkan seluruh bagian ke sebuah pohon grafting
* Menemukan akar untuk simpul apapun
Penggunaan umum
* Memanipulasi data secara hierarki
* Membuat informasi mudah untuk dicari
* Memanipulasi data sorted lists
4. QUEUE
Queue pada
Struktur Data atau antrian adalah sekumpulan data yang mana penambahan elemen
hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan
penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi
depan atau front).
Queue atau antrian prinsip yang digunakan adalah “Masuk
Pertama Keluar Pertama” atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan
sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll.
Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi
waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan
menggunakan sistem tersebut secara serempak.
Pada Queue atau antrian Terdapat satu buah pintu masuk di
suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan
variabel Head dan Tail ( depan/front, belakang/rear).
Karakteristik Queue atau antrian :
1. elemen antrian
2. front (elemen terdepan antrian)
3. tail (elemen terakhir)
4. jumlah elemen pada antrian
5. status antrian Operasi pada Queue atau antrian
1. tambah(menambah item pada belakang antrian)
2. hapus (menghapus elemen depan dari antrian)
3. kosong( mendeteksi apakah pada antrian mengandung elemen
atau tidak)
Operasi-operasi Queue :
1. Create() Untuk
menciptakan dan menginisialisasi Queue Dengan cara membuat Head dan Tail = -1
2. IsEmpty() Untuk
memeriksa apakah Antrian sudah penuh atau belum Dengan cara memeriksa nilai
Tail, jika Tail = -1 maka empty Kita tidak memeriksa Head, karena Head adalah
tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan
berubah-ubah Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang, yaitu menggunakan nilai Tail.
3. IsFull Untuk
mengecek apakah Antrian sudah penuh atau belum Dengan cara mengecek nilai Tail,
jika
Tail >= MAX-1 (karena MAX-1 adalah batas elemen array
pada C) berarti sudah penuh
4. Enqueue Untuk
menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di
elemen paling belakang Penambahan elemen selalu menggerakan variabel Tail
dengan cara increment counter Tail terlebih dahulu
5. Dequeue()
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan
cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping.
6. Clear() Untuk
menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun
hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen
Antrian tidak lagi terbaca
7. Tampil() Untuk
menampilkan nilai-nilai elemen Antrian Menggunakan looping dari head s/d tail
5. SORTING
Sorting adalah
proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut
terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi
perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif.
Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan
secara ascending demi kenyamanan dalam penelusuran data. Beberapa macam
algoritma sorting telah dibuat karena proses tersebut sangat mendasar dan
sering digunakan. Oleh karena itu, pemahaman atas algoritma – algoritma yang
ada sangatlah berguna.
1.Selection Sort (Ascending): Pengurutan dilakukan dengan
memilih elemen terbesar dan menempatkan pada posisinya, kemudian mencari
element terbesar berikutnya dan menempatkan pada tempatnya, dan seterusnya.
Proses pengurutan dengan menggunakan metode selection sort
secara terurut naik adalah :
1. Mencari data terkecil dari data pertama sampai data
terakhir, kemunian di tukar posisinya dengan data pertama.
2. mencari data terkecil dari data kedua sampai data
terakhir, kemudian di tukar dengan posisinya dengan data kedua.
3. mencari data terkecil dari data ketiga sampai data
terakhir, kemudian di tukar posisinya dengan data ketiga
4. dan seterusnya sampai semua data turut naik. apabila
terdapat n buah data yang akan di urutkan, maka membutukan (n - 1) langkah
pengurutan, dimana data terakhir yaitu data ke-n tidak perlu di urutkan karena
hanya tinggal satu satunya.
2. Bubble Sort Konsep Buble Sort Metode pengurutan gelembung
(Bubble Sort) diinspirasikan oleh gelembung sabun yang berada dipermukaan air.
Karena berat jenis gelembung sabun lebih ringan daripada berat jenis air, maka
gelembung sabun selalu terapung ke atas permukaan. Prinsip di atas dipakai pada
pengurutan gelembung. Bubble sort (metode gelembung) adalah metode/algoritma
pengurutan dengan dengan cara melakukan penukaran data dengan tepat
disebelahnya secara terus menerus sampai bisa dipastikan dalam satu iterasi
tertentu tidak ada lagi perubahan. Jika tidak ada perubahan berarti data sudah
terurut. Disebut pengurutan gelembung karena masing-masing kunci akan dengan
lambat menggelembung ke posisinya yang tepat.
Tidak ada komentar:
Posting Komentar