STRUKTUR DATA

Struktur data adalah sebuah proses bagaimana menyimpan, menyusun, dan mengurutkan data dalam memory agar dapat dipergunakan secara efisien. Struktur data bisa juga berarti tata letak data yang berisi kolom-kolom data,baik itu kolom yang tampak oleh pengguna (user) ataupun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Sebuah struktur data dapat diterapkan untuk pengolahan database, misalnya untuk keperluan data keuangan, atau untuk pengolah kata (word processor) yang kolomnya berubah secara dinamis.

Pengenalan Struktur Data

Berbicara tentang data struktur, kita akan mengenal lebih dalam lagi mengenai proses yang terjadi pada data dan bagaimana mengimplementasikannya agar lebih efektif saat digunakan. Konsep dari tutorial struktur data sederhana bisa dianalogikan seperti konsep array, kita mempunyai beberapa blok blok memory yang mana seluruh data akan saling berkaitan satu sama lain.

Pada dasarnya, struktur data ada 2 jenis :

  • Struktur data sederhana misalnya array dan record.
  • Struktur data majemuk yang terdiri dari :
    • Linier, misalnya: Stack, Queue, dan Linier Linked List.
    • Nonlinier, misalnya Binary Tree, Binary Search Tree, Graph, Tries, dll.

1. Array

Array adalah sebuah koleksi dari elemen atau suatu nilai yang dapat diindentifikasi dengan menggunakan indeks yang memiliki tipe data yang sama dan dinyatakan dengan nama yang sama. array memungkinkan untuk menyimpan data maupun referensi objek dalam jumlah banyak dan terindeks. Array menggunakan indeks integer untuk menentukan urutan elemen-elemennya, dimana elemen pertamanya dimulai dari indeks 0,elemen kedua memiliki indeks 1, dan seterusnya.jadi dengan adanya indeks, dimungkinkan untuk pengaksesan secara acak (random Access)

Salah satu ciri Array adalah, perlu ditentukan ukurannya sebelum dapat digunakan. Karena perlu pengalokasian di memory.

Ketika Array yang kita buat sudah penuh, maka perlu inisiasi baru untuk Array dengan ukuran yang lebih besar. Dengan catatan, tipe data yang dapat disimpan hanya satu jenis saja

2. Linked List

Linked List adalah Struktur Data yang terdiri dari suatu node dan referensi/pointer yang menghubungkan satu node dengan yang lain. Dimana Node terakhir memiliki referensi ke null. Setiap node memiliki data dan referensi ke node selanjutnya (singly) dan atau ke node sebelumnya (doubly). Digunakan sebagai dasar implementasi Stacks dan Queue. Tidak ada unsur Random Access via indeks seperti Array dan setiap operasi biasanya perlu operasi sekuensial dari node awal.

www.google.com

Enaknya Linked List bersifat dinamis secara ukuran, Alokasi penggunaan memory yang dibutuhkan pada run-time, Mudah di implementasikan. Akan tetapi kurangnya Linked List lebih boros memory, pembacaan node hanya bisa melalui proses sekuensial dari awal, tidak layaknya via indeks di Array. Pada Singly Linked List, mustahil bisa melakukan traversal dari belakang ke depan, namun dapat disolusikan dengan Doubly Linked List

3. Stacks

Stack merupakan sebuah kumpulan data atau item dengan cara penambahan item baru serta penghapusan, selalu terjadi pada tempat atau ujung yang sama. Stack ini biasa di analogikan seperti tumpukan pada piring. Dimana kita mengambil maupun meletakkan piring selalu pada sisi atasnya. Stack ini memiliki konsep LIFO (last in first out) atau dalam bahasa indonesianya adalah data yang terakhir masuk, maka ialah yang pertama akan dikeluarkan.

4. Queue

Queue merupakan koleksi item yang cara penambahan itemnya terjadi pada sebuah ujung yang biasa disebut sebagai “ekor” atau (rear) dan untuk penghapusannya, terjadi pada ujung yang satunya. Atau biasa kita beri nama “kepala” atau (head). Jadi konsep dari queue ini menggunakan konsep layak nya FIFO yang merupakan kepanjangan dari First in First out. Dalam kehidupan sehari — hari, konsep ini biasa di analogikan sebagai sebuah antrian. Dimana setiap orang yang datang terlebih dahulu, maka ia lah yang akan di layani terlebih dahulu. Nah konsep ini sangat berbeda dengan konsep yang ada pada stack. Namun, sama seperti stack, kelas ini juga memiliki beberapa operasi.

5. Tree

Tree merupakan salah satu bentuk struktur data tidak linear yang menggambarkan hubungan yang bersifat hirarkis (hubungan one to many) antara elemen-elemen. Tree bisa didefinisikan sebagai kumpulan simpul/node dengan satu elemen khusus yang disebut Root dan node lainnya terbagi menjadi himpunan-himpunan yang saling tak berhubungan satu sama lainnya (disebut subtree). Untuk jelasnya, di bawah akan diuraikan istilah-istilah umum dalam tree :

a) Prodecessor : node yang berada diatas node tertentu.

b) Successor : node yang berada di bawah node tertentu.

c) Ancestor : seluruh node yang terletak sebelum node tertentu dan terletak pada jalur yang sama.

d) Descendant : seluruh node yang terletak sesudah node tertentu dan terletak pada jalur yang sama.

e) Parent : predecssor satu level di atas suatu node.

f) Child : successor satu level di bawah suatu node.

g) Sibling : node-node yang memiliki parent yang sama dengan suatu node.

h) Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.

i) Size : banyaknya node dalam suatu tree.

j) Height : banyaknya tingkatan/level dalam suatu tree.

k) Root : satu-satunya node khusus dalam tree yang tak punya predecssor.

l) Leaf : node-node dalam tree yang tak memiliki seccessor.

m) Degree : banyaknya child yang dimiliki suatu node.

7. Graph

Graph merupakan sekumpulan dari node dan sekumpulan garis(edge) bersifat non-linier yang kemungkinan bisa hirarki bisa juga tidak. Dan pemakaian graph dalam dunia nyata biasanya seperti lingkaran pertemanan, dimana dari lingkaran tersebut kita bisa mempresentasikan dari satu teman ke teman yang lainnya.

Berbeda dengan tree yang memiliki jumlah edge sebanyak node-1, pada graph jumlah edge jauh lebih bebas, karena edge yang bisa berasal dari node mana saja, bahkan self loop.

Graph bisa dibedakan dari edge nya, ada yang memiliki arah (directed) dan tidak memiliki arah (undirected).

Graph kadang memiliki cost di setiap edge nya (weight) ada juga yang tidak memilikinya (unweight). bertujuan mencari jalur terendek degan menggunakan tranversal dengan mempertimbangkan weight.

Berikutnya yang perlu diperhatikan dari graph adalah adjacency (node yang dekat/berhubungan dengan node lainnya). Adjacency dapat dibuat dengan dua pendekatan, yaitu:

  • Adjacency List
    Digunakan ketika jumlah edge nya mendekati jumlah minimum dari edge yang bisa dibuat.
  • Adjacency Matrix
    Digunakan ketika jumlah edge nya mendekati jumlah maksimum dari edge yang bisa dibuat.

Pada graph terdapat dua jenis traversal, yaitu:

  • DFS (Depth First Search), melakukan kunjungan ke node-node dengan cara mengunjungi node terdalam/kebawah ,setelah itu mencari ketempat yang lainnya , dan sistemnya menggunakan stack
  • BFS (Breadth First Search), melakukan visit ke node- node dengan cara melebar kesamping, dan sistemnya menggunakan queue

 

Referensi :

www.mahirkoding.com/pengenalan-struktur-data

www.medium.com/@fahmiprasetiiio/struktur-data-2de34750df89