Introduction

Struktur Data

Dalam istilah ilmu komputer, sebuah struktur data adalah cara penyimpanan, penyusunan dan pengaturan data di dalam media penyimpanan komputer sehingga data tersebut dapat digunakan secara efisien.

Dalam teknik pemrograman, struktur data berarti tata letak data yang berisi kolom-kolom data, baik itu kolom yang tampak oleh pengguna (user) atau pun kolom yang hanya digunakan untuk keperluan pemrograman yang tidak tampak oleh pengguna. Setiap baris dari kumpulan kolom-kolom tersebut dinamakan catatan (record). Lebar kolom untuk data dapat berubah dan bervariasi. Ada kolom yang lebarnya berubah secara dinamis sesuai masukan dari pengguna, dan juga ada kolom yang lebarnya tetap. Dengan sifatnya ini, sebuah struktur data dapat diterapkan untuk pengolahan database (misalnya untuk keperluan data keuangan) atau untuk pengolah kata (word processor) yang kolomnya berubah secara dinamis. Contoh struktur data dapat dilihat pada berkas-berkas lembar-sebar (spreadsheet), pangkal-data (database), pengolahan kata, citra yang dipampat (dikompres), juga pemampatan berkas dengan teknik tertentu yang memanfaatkan struktur data.

Struktur Data menyangkut susunan fisik data dalam komputer dan berfungsi agar:

  1. penyimpanan lebih efesien
  2. Agar tersusun lebih terurut
  3. Agar data retrieval lebih efektif

Struktur data diperlukan dalam perencanaan Algoritma dan penyusunan program sebagai dasar teknik dari Database.

Secara garis besar type data dapat dikategorikan menjadi :

1. Type data sederhana

  •  Type data sederhana tunggal, misalnya : Integer, real, boolean dan karakter.
  • Type data sederhana majemuk, misalnya : String.

2. Struktur Data, meliputi :

  • Struktur Data sederhana, misalnya array dan record
  • Struktur Data majemuk, yang terdiri dari Linier : Stack, Queue, serta List dan Multilist. Non Linier : Pohon Biner dan Graph

Pemakaian struktur data yang tepat di dalam 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 :

  1. List linier (Linked List) dan variasinya Multilist
  2. Stack (Tumpukan)
  3. Queue (Antrian)
  4. Tree ( Pohon )
  5. Graph ( Graf )

Record (REKAMAN)

Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.

JAVA

Java adalah salah satu bahasa pemrograman yang paling diminati oleh banyak orang sekarang. Tingkat kompatibelitas yang tinggi, dan banyaknya fitur fitur baru yang tidak dimiliki oleh bahasa pemrograman lainnya membuat java semakin melejit. Selain itu mudah dan simplenya syntax dari java juga membuat bahasa pemrograman yang satu ini banyak diminati. Keunggulan dari Java yang lainnya adalah, terdapatnya J2ME (Java 2 Platform Micro Edition), J2SE (Java 2 Platform Standart Edition) dan J2EE (Java 2 Platform Entreprise Edition). Dimana J2ME adalah versi Java yang digunakan untuk platform platform kecil, seperti Mobile Phone, PDA , dll. Sedangkan J2EE adalah versi java yang digunakan untuk platform besar, atau untuk aplikasi aplikasi bersekala besar. Nah yang akan kita pelajari saat ini adalah J2SE, yaitu versi java yang digunakan untuk personal computer maupun notebook.

Untuk memulai membuat aplikasi dengan menggunakan Java kita harus mendownload compiler untuk java terlebih dahulu, yaitu JDK. Sebenarnya cukup dengan memiliki compiler java, kita sudah bisa mulai membuat aplikasi dengan menggunakan java, akan tetapi jika kita mengalami kesulitan ketika meng-compile ataupun men-debug program kita maka saya sarankan untuk menginstal IDE untuk java sekalian, yaitu Netbeans, Eclipse maupun JCreator. Mungkin saya sedikit merekomendasikan penggunaan Netbeans sebagai editor, karena fiturnya lengkap dan memudahkan kita saat membuat program.
Setelah menginstall JDK dan Netbeans mari kita mulai membuat program dengan menggunakan Java.

Java adalah bahasa pemrograman berorientasi objek yang bertipe modular. Java memecah komponen-komponennya menjadi objek-objek terpisah yang saling berinteraksi.

Graph

Graph

Graph merupakan struktur data yang menyerupai Tree. Jika kita memandang tree dan graph secara matematis, maka kita akan menemukan bahwa tree merupakan bentuk khusus dari graph. Namun karena perbedaan metode implementasi dari graph dan tree, maka kedua kasus ini dipisahkan. Implementasi tree dalam pemrograman lebih menyerupai implementasi linked list, stack, dan queue.
Hal terlihat dari penggunaan pointer untuk membentuk struktur dari data yang ada. Implementasi graph dalam pemrograman tidak menggunakan pointer untuk membentuk struktur graph.

Graph direpresentasikan menggunakan elemen-elemen berikut:

  1. Daftar node
    Node yang ada di dalam graph dikumpulkan dalam satu daftar yang memiliki index, agar masingmasing
    node dapat mudah diakses. Daftar ini dapat diimplementasikan menggunakan array,
    atau linked list. Contoh:
    class Node{

    }
    class Graph{
    Node daftarNode[];
    }
  2. Kumpulan edge
    Setiap edge menggambarkan hubungan antara dua node yang dihubungkan oleh edge tersebut.
    Dua buah node yang terhubung oleh sebuah edge merupakan node-node yang bertetangga.
    Ketetanggaan antar node digambarkan di dalam sebuah matriks, yang disebut matriks
    ketetanggaan (adjacency matrix).

CONTOH CODING :

Graph1

HASIL CODING :

Graph2

Search and Sorting

Search and Sorting

Didalam pemograman Java terdapat dua algoritma yang dapat digunakan dua metode yaitu sorting dan searching. Dibawah ini akan membahas dua algoritma tersebut dan beserta contoh listing pemograman dalam java.
  1. Sorting
    Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplemantasi dalam bermacam aplikasi.

Macam – macam algoritma sorting :

  •   Insertion Sort
              Salah satu algoritma  sorting  yang paling sederhana adalahinsertion sort. Algoritma Insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan dan yang sudah diurutkan. Elemen pertama diambil dari bagian arrayyang belum diurutkan dan kemudian diletakan sesuai dengan posisinya pada bagian lain dari array yang telah diurutkan. Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang terisisa pada bagian array yang belum diurutkan.
  •       Selection Sort
           Selection Sort adalah memilih elemen dengan nilai yang paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke-n, dimana n adalah jumlah total elemen dikurangi 1.
  • Merge Sort
             Sebelum pembahasan mengenai algoritma merge sort, akan dijelaskan garis besar dari konsep divide and conquer karena merges.
  • Pola Divide and Conquer
ort mengadaptasi pola tersebut. Beberapa algoritma mengimplentasikan konsep rekursi untuk menyelesaikan permasalahan.  Permasalahan utama kemudian dipecah menjadi sub-masalah, kemudian solusi dari sub-masalah akan membimbing menuju solusi permasalahan utama.
Pada setiap tingkatan rekursi, pola tersebut terdiri atas 3 langkah:
 
1. Divide Memilah masalah menjadi sub masalah.
2. Conquer Selesaikan sub masalah tersebut secara rekursif. Jika sub-masalah tersebut cukup ringkas dan sederhana, pendekatan penyelesaian secara langsung akan lebih efektif.
3. Kombinasi Mengkombinasikan solusi dari sub-masalah, yang akan membimbing menuju penyelesaian atas permasalahan utama.
     Proses rekursi berhenti jika mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen tersebut menandakan bahwa bagian tersebut telah terurut sesuai dengan rangkaiannya.
Studi Kasus dalam pemograman java dengan menggunakan algoritma Sorting :
Class Bubble :
      Searching merupakan kegiatan untuk menemukan atau mencari suatu data yang ditentukan disuatu tempat, apakah sudah sesuai atau belum. Algoritma searching mempunyai beberapa metode, salah satunya adalah metode pencarian beruntun atau disebut juga denganSequential SearchSequantial Search adalah metode pencarian yang dimulai dari data elemen pertama.

Studi Kasus dalam pemograman java dengan menggunakan algoritmaSearching :

Contoh Coding Class Searching :

Hasil Output :

Tree

JTreeObject

JTree merupakan komponen dari Swing di Java. JTree digunakan untuk membuat struktur hirarki sebagaimana layaknya tree. Contohnya seperti pada tampilan struktur folder dan subfolder dan file yang ada di dalamnya.

Ilustrasi struktur data tree:

Ilustrasi Tree

Degree (derajat) adalah jumlah edge yang keluar dan masuk dari sebuah node.
Contoh : node E memiliki in degree 1 dan out degree 2
Root (akar) adalah node yang memiliki derajat keluar >=0 dan derajat masuk = 0.
Contoh : node A adalah root
Subtree / child adalah bagian salah satu node dibawah root sampai ke bawah.
Contoh : tree C adalah right subtree dari A dan tree B merupakan left subtree dari A
node G dan F merupakan child dari node C
node F merupakan parent dari node J dan K
Ancestor adalah Node yang berada di atas node lain.
Contoh : node B adalah ancestor dari node E
Descendant adalah node yang berada di bawah node lain.
Contoh : node E adalah descendant dari node A.
Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0.
Contoh : node D, H, I, J, K, dan G adalah leaf
Sibling adalah node yang mempunyai level yang sama dan parent yang sama.
Contoh : node D adalah sibling dari node A
Height (ketinggian) adalah level tertinggi dari tree ditambah 1.
Contoh : height dari tree A adalah 3 + 1 = 4
Weight (bobot) adalah jumlah leaf(daun) pada tree.
Contoh : weight dari tree A adalah 6

BINARY TREE
Sebuah tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal 2 subtree yang disebut sebagai subpohon kiri(left subtree) dan subpohon kanan (right subtree) dan kedua subtree tersebut harus terpisah, atau dengan kata lain tiap node dalam binary tree hanya boleh memiliki paling banyak 2 child.

Binary tree terdiri dari :

  • Full Binary Tree : semua node (kecuali leaf pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama)Full Binary Tree
  •  Complete Binary Tree : mirip dengan full binary tree, tetapi tiap subtree boleh memiliki panjang path yang berbeda dan tiap node (kecuali leaf memiliki 2 anak)

         Complete Binary Tree

  • Skewed Binary Tree : binary tree yang semua nodenya (kecuali leaf) hanya memiliki satu anakSkewed Binary Tree

BINARY SEARCH TREE
Binary tree dengan sifat bahwa nilai dari semua left child harus lebih kecil daripada nilai dari right child dan parentnya.
Contoh :

Binary Search Tree

Contoh Coding:

super(“JtreeObject frame”);
setSize(300, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init(){
Hashtable hash = new Hashtable();
for (int i = 0; i < Data.length; i+=2){
hash.put(Data[i][0], Data[i + 1]);
}
JTree tree = new JTree(hash);
getContentPane().add(tree, BorderLayout.CENTER);
}
public static void main(String args[]){
JTreeObject object = new JTreeObject();
object.init();
object.setVisible(true);
} // main
} // class
Contoh Coding:
aa
b
C
d
e

Map

Map

Suatu peta (map) adalah generalisasi dari array. Seperti array, map juga memiliki operasi untuk mengambil dan meletakkan elemen. Akan tetapi pada map, operasi ini tidak dilakukan pada bilangan 0, 1, … N-1, akan tetapi pada sembarang Object. Beberapa bahasa pemrograman menggunakan istilah array asosiatif (associative array) karena kesamaan perintah dengan array biasa. Pada bahasa pemrograman tersebut, kita bisa menuliskan A[“joko”] yang digunakan untuk memetakan “joko” pada suatu elemen di dalam array. Java tidak menggunakan perintah yang sama pada map, akan tetapi idenya serupa : Map adalah seperti array yang indeksnya adalah objek sembarang, bukan integer. Pada map, objek yang digunakan sebagai “indeks” disebut kunci (key). Objek yang ditunjuk oleh indeks tersebut disebut nilai (value). Satu kunci hanya boleh menunjuk pada satu nilai, akan tetapi satu nilai bisa ditunjuk oleh beberapa kunci.

Dalam Java, map didefinisikan dalam interface java.util.Map, yang memiliki beberapa metode untuk bekerja dengan map. Jika map adalah variabel dengan tipe Map, maka berikut ini adalah beberapa metodenya :

  • map.get(kunci) — mengembalikan Object yang ditunjuk oleh kunci. Jika map tidak     memiliki nilai yang ditunjuk oleh kunci, maka nilai null akan dikembalikan.
  • map.put(kunci, nilai) — Mengisi map dengan pasangan kunci dan nilai. Kedua-dua kunci dan nilai bisa berupa objek apa saja.
  • map.putAll(map2) — jika map2 adalah map lain, maka perintah ini akan mengkopi semua isi pada map2 ke dalam map.
  • map.remove(kunci) — Jika map memiliki kunci yang menunjuk pada suatu nilai, perintah ini akan menghapus kunci beserta nilai yang ditunjuknya, atau dengan kata lain menghapus pasangan kunci dan nilai pada map sekaligus.
  • map.containsKey(kunci) — mengembalikan nilai boolean true jika map memiliki kunci yang merujuk pada suatu nilai
  • map.containsValue(nilai) — mengembalikan nilai boolean true jika map memiliki nilai yang ditunjuk oleh kunci apapun.
  • map.size() — mengembalikan int yang berisi jumlah pasangan asosiasi pada map.
  • map.isEmpty() — mengembalikan boolean true jika map tidak berisi pasangan asosiasi apa-apa.
  • map.clear() — menghapus semua pasangan asosiasi dalam map.

Metode put dan get jelas merupakan metode yang paling sering digunakan dalam map. Dalam banyak aplikasi, metode ini mungkin hanya metode ini yang kita butuhkan. Artinya, menggunakan map sama mudahnya dengan menggunakan array biasa. Java memiliki dua kelas yang mengimplementasikan interface Map, yaitu : TreeMap,HashMap dan LinkedHashMap.


Map
di implementasikan menjadi :

  • HasHMap

HashMap tidak menyimpan pasangan kunci/nilai dalam urutan tertentu, sehingga tidak ada batasan objek apa yang bisa disimpan di dalamnya. Hampir semua operasi dapat berjalan lebih cepat pada HashMap dibandingkan dengan TreeMap.

  • TreeMap

TreeMap adalah salah satu implementasi dari class interface yang mengurutkan collection berdasarkan key dari elemen berupa pasangan <key, value>.

  • LinkedHashMap

LinkedHashMap adalah subclass dari HashMap. Itu berarti mewarisi fitur HashMap. Selain itu, linked list mempertahankan penyisipan-order.

Contoh Coding HashMap:

HashMap10

HashMap11

Hasil Coding:

HashMap12

Contoh Coding TreeMap:

Treemap1

Treemap2

Hasil  Coding :

Treemap3

Contoh Coding LinkedHashMap:

LinkedHashMap1

LinkedHashMap2

Hasil Coding :

LinkedHashMap3

Set

Set

Method set()

Method set() biasanya digunakan untuk menge-set atau memberikan atau mengganti nilai property (variabel) milik sebuah objek. Lalu apa bedanya dengan pengisian variabel langsung seperti:
Code:
variabel = isi_variabel;

Bedanya adalah kalau memakai cara diatas, jika variabel tsb di-set dengan access specifier private maka perintah tsb tidak akan bisa diberlakukan. Maka dibuatlah sebuah method untuk dapat mengakses perintah dan melakukan perubahan nilai variabel.
kita ambil contoh.
Sintaks:
Code:

public void setNama(String a){
nama = a;
}

pemanggilan dalam main():
Code:

.setNama();

Penjelasan:
Code:
public void setNama(String a){ //membuat nama method setNama dengan parameter a sebagai penampung isi variabel baru
nama = a; //mengisi variabel nama dengan variabel a
}

sederhana bukan? sederhana tapi sangat penting untuk dimengerti dan dipahami. Yang susahnya kalau variabel atau property yang dirubah tidak cuman satu atau dua, soalnya harus bikin method set sejumlah property dan juga harus membuat method get() sejumlah sama juga.

Ada teknik lain untuk pembuatan method set yang dijadikan satu, seperti contoh:
Code:
public void setAll(String a, String b, … ){
nama = a;
nim = b;


}

teknik ini memang mengirit penggunaan method set() dan get() serta sangat mengurangi redundansi perintah dan beberapa baris sintaks. Tapi metode ini memilik kekurangan, yaitu menjadi repot jika hanya satu atau beberapa variabel yang ingin diubah atau dipanggil.

berikut contoh dari set :

import java.util.*;

publicclassSetDemo{

publicstaticvoid main(String args[]){

int count[]={34,22,10,60,30,22};

Set<Integer>set=newHashSet<Integer>();

try{

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

set.add(count[i]);

}

System.out.println(set);

TreeSet sortedSet=newTreeSet<Integer>(set);

System.out.println(“The sorted list is:”);

System.out.println(sortedSet);

System.out.println(“The First element of the set is: “+

(Integer)sortedSet.first());

System.out.println(“The last element of the set is:”+

(Integer)sortedSet.last());

}

catch(Exception e){}

}}

Set diimplementasikan menjadi :

  • HashSet

HashSet merupakan class yang mengimplementasikan interface set.
– Set tidak mensupport dupilkasi nilai dari elemen2nya. (“http://www.java2s.com”)
– HashSet merupakan class yang sering digunakan untuk menyimpan collection yang bebas duplikasi.

  • TreeSet

TreeSet merupakan sebuah implementasi dari interface Set yang menggunakan tree.
Class ini memastikan bahwa yang disortir akan diurutkan secara ascending.

  • LinkedHashSet

LinkedHashSet menggunakan double linked list di semua elemen. LinkedHashSet berbeda dengan HashSet ketika kita peduli terhadap urutan iterasi. Bila kita melakukan iterasi melalui HashSet, urutan elemen tidak dapat diprediksi, sedangkan dengan LinkedHashSet memungkinkan kita untuk melakukan iterasi melalui unsur-unsur dalam urutan di mana mereka dimasukkan (inserted).

  • Contoh Coding HashSet :

HashSet51

Hasil Coding:

HashSet52

  • Contoh Coding TreeSet :

TreeSet61

Hasil Coding:

TreeSet62

Contoh Coding LinkedHashSet:

LinkedHashSet71

Hasil Coding:

LinkedHashSet72

Recursive

Recursion

(RECURSION) adalah proses pengulangan sesuatu dengan cara kesamaan diri. Sebagai contohnya, saat dua cermin berada paralel antara satu dengan yang lain, gambar yang tertangkap adalah suatu bentuk rekursi tak-terbatas. Istilah ini memiliki makna beragam bergantung kepada ragam disiplin mulai dari linguistik sampai logika. Penggunaan paling umum dari rekursi yaitu dalam matematika dan ilmu komputer, yang mengacu kepada suatu metode mendefinisikan fungsi yang mana fungsi tersebut menggunakan definisinya sendiri. Secara spesifik hal ini mendefinisikan suatu instansi tak-terbatas (nilai fungsi), menggunakan ekpresi terbatas dengan beberapa instansi bisa merujuk ke instansi lainnya, tapi dengan suatu cara sehingga tidak ada perulangan atau keterkaitan tak-terbatas dapat terjadi. Istilah ini juga digunakan secara umum untuk menjelaskan suatu proses pengulangan objek dengan cara kesamaan-diri.

 

Definisi formal dari rekursi

rec1

Rekursi dalam program perekaman layar, dengan suatu jendela paling kecil mengandung foto keseluruhan layar.

Dalam matematika dan ilmu komputer, kelas dari objek atau metode memperlihatkan perilaku rekursif bila mereka dapat didefinisikan oleh dua properti berikut:

  1. Sebuah kasus (atau beberapa kasus) dasar sederhana
  2. Sejumlah aturan yang mengurangi kasus-kasus lainnya sampai ke kasus dasarnya.

Sebagai contoh, berikut ini adalah definisi rekursif dari leluhur seseorang:

  • Orang tua seseorang adalah leluhur seseorang (kasus dasar).
  • Orang tua dari suatu leluhur juga merupakan leluhur-nya (langkah rekursi).

Bilangan Fibbonaci adalah contoh klasik dari rekursi:

  • Fib(0) adalah 0 [kasus dasar]
  • Fib(1) adalah 1 [kasus dasar]
  • Untuk semua integer n > 1: Fib(n) adalah (Fib(n-1) + Fib(n-2)) [definisi rekursif]

Banyak aksioma matematika berdasarkan aturan-aturan rekursif. Sebagai contohnya, definisi formal dari bilangan asli pada Aksioma Paenamo dapat dideskripsikan sebagai: 0 adalah bilangan asli, dan setiap bilangan asli memiliki sebuah suksesor, yang juga merupakan bilangan asli. Dengan kasus dasar ini dan aturan rekursif, seseorang dapat membuat himpunan dari semua bilangan asli.

Gambaran humornya berbunyi: “Untuk memahami rekursi, pertama anda harus memahami rekursi.” Atau mungkin yang lebih akurat, dari Andrew Plotkin: “Jika anda telah mengetahui apa itu rekursi, cukup ingat jawabannya. Kalau tidak, cari orang yang berdiri paling dekat dengan Douglas Houfstater selain anda; lalu tanya dia rekursi itu apa.”

Objek matematika yang didefinisikan secara rekursif termasuk fungsi, himpunan, dan terutama sekali fraktal.

 

Contoh-contoh

Beberapa relasi perulangan umum yaitu:

  • Faktorial
  • Bilangan Fibbonaci:

Contoh coding Factorial :

Factorial1

Factorial2

Hasil Coding:

Factorial3

Contoh Coding Fibbonaci :

Fibonacci1

Fibonacci2

Hasil Coding :

Fibonacci3

Queue dan Deque

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).
Pada Stack atau tumpukan menggunakan prinsip“Masuk terakhir keluar pertama”atau LIFO (Last In First Out), Maka pada 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 :

  • Create(), Untuk menciptakan dan menginisialisasi Queue dengan cara membuat Head dan Tail = -1
  • 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.
  • 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
  • .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.
  • 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.
  • 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.
  • Tampil()
    Untuk  menampilkan nilai-nilai elemen Antrian menggunakan looping dari head s/d tail

CONTOH CODING :

Queue41

Queue42

Queue43

HASIL CODING :

Queue44

DEQUE

DEQUE adalah antrian dimana elemennya bisa masuk dan keluar lewat kedua ujungnya (berbeda dengan queue yang hany bisa masuk lewat ujung belakang dan keluar lewat ujung depan). Biasanya DEQUE disajikan dengan menggunakan Double link list yang memiliki dua buah pointer yang menunjuk ke posisi sebelumnya dan sesudahnya. Gambar 5.1 menunjukkan struktur umum dari sebuah DEQUE.

17

DEQUE juga mempunyai dua jenis variasi yaitu :

  • Deque input terbatas : suatu deque yang membatasi pemasukkan elemen hanya pada satu ujung dari list, sementara penghapusan elemen boleh dilakukan pada kedua ujung list.
  • Deque output terbatas : merupakan kebalikan dari deque input terbatas yaitu suatu deque yang membatasi penghapusan elemen hanya pada satu ujung dari list, sementara pemasukkan elemen boleh dilakukan pada kedua ujung list

CONTOH CODING :

Dequeue 81

Dequeue 82

Dequque 83

HASIL CODING :

Dequque84

Dequeue 85

List

ArrayList, LinkedList, Stack, dan Vector

ArrayList

Array List adalah sebuah kelas  yang  dapat penyimpanan data berupa list objek berbentuk array yang ukurannya dapat berubah secara dinamis sesuai dengan jumlah data yang dimasukkan.

Perbedaan paling mendasar antara Array dan ArrayList adalah:

  • Untuk menyimpan data dalam array biasa, maka harus mendeklarasikan jumlah elemen maksimal yang bisa menampung. Dengan kata lain jika jumlah datanya fleksibel, maka array tidak bisa digunakan.
  • ArrayList dapat menampung sejumlah data secara dinamis, sehingga seberapapun jumlahnya akan ditampung oleh ArrayList tanpa memperhatikan berapa jumlah maksimal elemen yang dapat ditampung.

ArrayList digunakan dalam menyimpan data dalam bentuk objek, sehingga untuk menyimpan data didalam ArrayList maka, buatlah sebuah kelas yang kemudian dijadikan objek yang dapat menyimpan data. ArrayList terdapat  pada kelas java.util, sehingga untuk menggunakan ArrayList, maka harus melakukan import java.util.

Perhatikanlah gambar dibawah ini yang menjelaskan mengenai gambaran ArrayList:

Lihatlah gambar diatas, gambar diatas menunjukkan bahwa size atau ukuran banyaknya data yang ditampung adalah 5 karena data yang diinputkan ada 5 data, jika ditambahkan data lagi, maka size ArrayList akan berubah secara dinamis sesuai jumlah data.

ArrayList dapat menyimpan sekumpulan data yang disimpan dalam satu-kesatuan. Misalkan: menyimpan data mahasiswa berupa NIM, Nama, dan Alamat, maka data tersebut akan disimpan dalam satu-kesatuan array biarpun data tersebut memiliki tipe data berbeda. Berarti ArrayList tersebut menyimpan 3 data variabel yang berbeda dalam satu elemen array.

CONTOH CODING :

ArrayList1

ArrayList2

ArrayList3

HASIL CODING :

ArrayList4

ArrayList5

Linked List

Pengertian Linked list :

  • sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap elemennya terdiri dari dua bagian
  • struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di memori.

Link list adalah desain tempat penyimpanan data yang terdiri dari node-node (simpul-simpul) yang saling terhubung.
Link list dapat diilustrasikan seperti kereta api, dimana kereta api terdiri dari gerbong-gerbong yang saling terhubung yang dapat mengangkut penumpang. Gerbong disini setara dengan node dalam link list yang berfungsi untuk menyimpan data.
Jika kita menyimpan data 3, 5 dan 7 dalam array, maka ilustrasi tempat penyimpanannya sbb:

2

Dengan 1 nama, array bisa menyimpan data yg bertipe sama. Dimana setiap data mempunyai indeks.

Sedangkan jika data tersebut disimpan dalam link list, maka ilustrasi tempat penyimpanannya sbb:

Singly Linked List :

~ Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data.

~ Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.

4

Singly Linked List Non Circular

Doubly Linked List :

~ Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut.

~ Pointer next dan prev-nya menunjuk ke null.

Singly Circular Linked List :

~ Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.

Double Circular Linked List :

~ Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.

Link list tidak mempunyai indeks seperti array. Kita hanya bisa memberi nama node. Akan tetapi, tidak semua node dalam link list mempunyai nama. Sebaiknya kita memberi nama untuk node yang pertama (misal namanya head), dan node yang terakhir (misal namanya tail). Tujuannya untuk memudahkan operasi link list dari depan atau belakang, misal nambah data atau menghapus data.

Langkah yang pertama, kita harus mendefinisikan apa itu node. Dalam Java, sebaiknya pendefinisian node ini dibuat dalam sebuah class, misal:

5

Kemudian kita buat design link list dalam class yang lain, misal:

7

Operasi-operasi yang bisa dilakukan dalam link list yaitu:

  1. Tambah data (insert)
  2. Edit data (edit)
  3. Hapus data (delete)
  4. Pengurutan data (sorting)
  5. Pencarian data (searching)

Tambah Depan

Untuk tambah data dari depan, caranya:

8

Tambah Belakang

Untuk tambah data dari belakang, caranya:

9

Hapus Depan

Untuk menghapus data dari depan, caranya:

10

Hapus Belakang

Untuk menghapus data dari belakang, caranya:

11

CONTOH CODING :

LinkedList22

HASIL CODING :

LinkedList23

Stack

Pengertian Stack pada Struktur Data adalah sebagai tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan di atas data yang lain, koleksi dari objek-objek homogen, atau Suatu urutan elemen yang elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Stack pada Struktur Data dapat diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri dari N kotak.

Stack bersifat LIFO (Last In First Out) artinya Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack

Operasi-operasi yang biasanya terdapat pada Stack yaitu:
1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
3. Clear : digunakan untuk mengosongkan stack
4. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
5. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Cara mendefenisikan Stack dengan Array of Struct yaitu:
1. Definisikan Stack dengan menggunakan struct
2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
3. Buatlah variabel array data sebagai implementasi stack
4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.

import java.util.EmptyStackException;
import java.util.Stack;
import java.util.Vector;class vektorstack{static void showpush(Stack st, String a) {
st.push(new String(a));
System.out.println(“push(” + a + “)”);
System.out.println(“stack: ” + st);
}static void showpop(Stack st) {
System.out.print(“pop -> “);
String a = (String) st.pop();
System.out.println(a);
System.out.println(“stack: ” + st);
}

CONTOH CODING :

Stack31

Stack32

HASIL CODING :

Stack33

Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong.
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.

IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1) maka belum full.

Ilustrasi Stack pada kondisi Full

IsEmpty berfungsi untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.

Push berfungsi untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang ditunjuk oleh TOS).
Tambah satu (increment) nilai top of stack lebih dahulu setiap kali ada penambahan elemen stack.
Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumnya.

Pop berfungsi untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack.
Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen stack berkurang.

Printberfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.

Vektor

Definisi Umum

Vektor adalah struktur data yang digunakan untuk menyimpan data spasial. Data Vektor adalah terdiri dari garis atau lengkungan, yang di definisikan sebagai awal dan akhir sebuah titik yang bertemu yang dinamakan node. Lokasi dan topologi dari node tersebut disimpan secara ekplisit. Atributnya didefinisikan oleh batasan-batasannya (boundary) sendiri dan kurva garis digambarkan sebagai seri dari lengkungan yang saling terhubung.

Vektor berbasis GIS didefinisikan sebagai vektorial dari data geografis. Menurut karakteristik dari model data, objek geografis secara ekplisit digambarkan dengan karakteristik spasial yang di asosiasikan dengan aspek thematic.

Ada cara yang berbeda untuk mengorganisasikan database rangkap ini (Spasial dan Thematic). Biasanya, sistem vektorial terdiri dari dua komponen ; yang pertama mengatur data spasial dan yang lainnya mengatur data thematic. Ini dinamakan dengan organisasi sistem hibrid, dimana terhubung sebagai basisdata relational pada attributnya secara topologi untuk data spasial. Elemen kunci pada sistem ini di identifikasikan pada setiap objek. Indentifikasi ini adalah unix dan berbeda untuk setiap objek dan memungkinkan sistem untuk terhubung dengan basis data.

CONTOH CODING :

14

HASIL CODING :

15

Array

Array dan Matrix

 

Array

Array adalah suatu struktur data yang menampung elemen-elemen terurut dengan tipe yang sama. Di java, array merupakan object tapi array juga harus didefinisikan terlebih dahulu, array tersebut berupa tipe primitive maupun reference, jadi array harus dibuat dengan operator new misalnya pegawai = new int[7]; yang artinya membuat array 7 buah yang kesemuanya integer. Panjang array adalah variabel instansi di objek array, oleh karena itu array tahu berapa panjangnya misal pegawai dengan menggunakan pegawai.length (tapi kita tidak bisa mengubahnya).

Lalu jika tipe tersebut sudah ada, maka class array dari tipe tersebut telah ada. Misalnya nama tipe adalah TipePrimitif, maka class array-nya adalah TipePrimitif[], maksudnya sebuah object yang dibuat dari kelas TipePrimitif[] adalah array dari item yang tiap itemnya bertipe TipePrimitif, disini tanda [] berfungsi sebagai pengingat sintaks untuk mengambil item dalam array TipePrimitif. Array juga tidak bisa disimpan dalam variable, fungsi variabel hanya untuk merujuk pada array dengan cara variabel_array [ekspresi_integer], variabel bisa bernilai null yang artinya tidak merujuk pada lokasi memori apapun. Elemen-elemen dalam array bisa diakses dengan index (index didalam array bisa dimulai dari nol). Atribut length berfungsi untuk mendapatkan lebih banyak elemen pada array. Sebagaimana obyek lain, array merupakan bagian dari suatu kelas, dan mempunyai class turunan dari class object.

Class Array berfungsi untuk memudahkan melakukan operasi umum pada array, namun class array terlebih dahulu diimport dari package “java.util” yang berupa :

  • Arrays.sort(arr) : digunakan mengurutkan elemen dalam array.
  • Arrays.fill(arr, value) : mengisi elemen dalam array.
  • Arrays.toString(arr_value) : mengubah variabel array of value menjadi string.
  • Arrays.copyOf(arr, length) : mengcopy data array sebanyak length yang telah ditentukan
  • Arrays.equals(arr_8, arr_9) : membandingkan apakah arr_8 sama dengan arr_9.

Contoh sederhana array dengan alokasi string sebanyak 3 :

class Flower {

public static void main(String[] args) {

String[] bunga = new String[3]; // mengalokasikan array string sebanyak 3

bunga[0] = “matahari”; // indeks 0

bunga[1] = “lavender”;   // indeks 1

bunga[2] = “tulip”;     // indeks 2

System.out.println(“Nama Bunga ; “ + bunga[0]);       // menampilkan indeks 0

System.out.println(“Nama Bunga : “ + bunga[1]);       // menampilkan indeks 1

System.out.println(“Nama Bunga : “ + bunga[2]);       // menampilkan indeks 2

}

}

Array dinamis merupakan sebuah obyek yang serupa dengan array, namun bisa berubah ukuran, yang berfungsi untuk mengakomodasi jumlah data yang mampu ditampungnya. Sama halnya dengan array, array dinamis mengisi dan mengambil posisi tertentu. Bedanya hanya array dinamis tidak mempunyai jumlah maksimum sesuai dengan jumah memori yang tersedia dalam computer. Array dinamis menggunakan metode get dan put sebagai motode instansi. Berikut ini adalah contoh menggunakan array dinamis :

publicclass ArrayDinamisInt {

private int[] nilai; // untuk Array – menyimpan data

public DynamicArrayOfInt() {

nilai = new int[1]; // nilai Array akan bertambah jika diperlukan

}

public int get(int posisi) {

// mengambil nilai dari posisi tertentu di array

// jika posisi tsb di luar data array, nilai 0 akan dikembalikan

if (posisi >= nilai.length)

return 0;

else

return nilai[posisi];

}

public void put(int posisi, int nilaiX) {

// menyimpan nilai ke posisi yang diinginkan dalam array

if (posisi >= nilai.length) {

// Posisi yang ditentukan berada di luar array data

// membuat Besar ukuran array 2x, Atau jika ukurannya masih

// terlalu kecil, maka ukurannya akan sebesar 2*posisi

int ukuranBaru = 2 * nilai.length;

if (posisi >= ukuranBaru)

ukuranBaru = 2 * posisi;

int[] nilaiBaru = new int[ukuranBaru];

System.arraycopy(nilai, 0, nilaiBaru, 0, nilai.length);

nilai = nilaiBaru;

System.out.println(“Ukuran array dinamis menjadi + ukuranBaru);

}

nilai[posisi] = nilaiX;

}

}

CONTOH CODING :

Array1
HASIL CODING :

Array2

Matrix (Java)

Matriks adalah struktur data dengan memori internal.Struktur ini praktis untuk di pakai memakan memory ! (Matriks integer 100 x 100 memakan 10000 x tempat penyimpanan integer).

Sering dikatakan bahwa matriks adalah tabel atau array berdimensi 2.Tetapi patut di perhatikan,bahwa pengertian “dimensi 2”, “baris dan kolom” adalah dalam pemikiran kita.Pengaturan letak elemen matriks dalam memori komputer selalu tetap sebagai deretan sel “linier”.Pengertian 2 dimensi ini hanya untuk mempermudah pemrograman dalam mendesain programnya.Maka matriks adalah salah satu contoh struktur data “lojik”.

Contoh : untuk matriks 3 x 4 sebagai berikut :

1 2 3 4
5 6 7 8
9 10 11 12

Dapat disimpan secara linier dan kontigu dengan dua alternatif sebagai berikut :

1. Perbaris

1 2 3 4 5 6 7 8 9 10 11 12

2. Perkolom

1 5 9 2 6 10 3 7 11 4 8 12

Banyaknya baris dan banyaknya kolom biasanya disebut sebagai ukuran matriks.

Contoh : matriks berukuran 4 x 5 mempunyai baris sebanyak 4 dam kolom sebanyak 5,sehingga dapat menyimpan 20 elemen.Ada beberapa bahasa pemrograman yang meminta ukuran matriks pada pendefinisian,ada yang meminta penomoran minimum dan maksimum dari baris dan kolom.Pada notasi algoritmik yang kita pakai,cara kedua yang akan di pakai,sebab ukuran matriks dapat di dedukasi dari penomoran.

Matriks adalah struktur data yang statik,yaitu ukuran maksimum memorinya di tentukan dari awal.Batas indeks baris dan kolom harus terdefinisi dengan pasti saat dideklarasikan dan tak dapat di ubah-ubah.Seringkali dalam persoalan semacam ini ,kita memesan memory secara “berlebihan” untuk alasan terjaminnya memory yang tersedia,dan hanya memakai sebagian saja.Biasanya memori yang di pakai (selanjutnya sisebut efektif) adalah yang “kiri atas” seperti ilustrasi sebagai berikut,dimana pada saat deklarasi,memori maksimum yang di sediakan adalah 10 x 10,dan hanya akan di pakai untuk 3 x 4.

Pendeklarasian matriks
Sebelum matriks digunakan untuk menyimpan data, terlebih dahulu matriks harus dideklarasikan. Mendeklarasikan matriks artinya menentukan nama matriks, tipe datanya dan ukuran matriks. Pendeklarasian matriks di dalam teks algoritma di tulis di dalam bagian deklarasi. Pendeklarasian matriks itu dapat memudahkan membuat suatu program dengan cara pendeklarasian matriks tersebut.

Definisi Matriks
Matriks atau array dua dimensi  adalah struktur data yang mengacu pada sebuah/sekumpulan elemen yang di akses.Berbeda dengan larik,maka pada matriks  index terdiri dari dua bagina yaitu index baris dan index kolom.Setiap elemen matriks dapat di akses melalui indeknya,misalanya mengisi elemen matriks yang baris ke 2 dan kolom ke 1 dengan nilai 100,maka cara mengisinya adalah A(2,1)        100.Contoh matriks bernama A dengan ukuran 2 x 3 (yang memiliki indeks baris 2 dan indeks kolom 3) :

Elemen Matriks : A[1,1], A[1,2],  A[1,3], A[2,1], A[2,2], A[2,3]

Indeks baris dari Matriks A : 1, 2

Indeks kolom dari Matriks : 1, 2, 3

Mengisi elemen Matriks : A[2,1]   100

CONTOH CODING :

Capture

HASIL CODING :

1