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

a. Type data sederhana tunggal, misalnya

Integer, real, boolean dan karakter

b. Type data sederhana majemuk, misalnya

String

2. Struktur Data, meliputi :

a. Struktur Data sederhana, misalnya array dan record

b. 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).

Representasi data dengan struktur data linear 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.

Masalah-masalah Graph
Masalah path minimum (Shortest path problem):
mencari route dengan jarak terpendek dalam suatu jaringan transportasi.

Masalah aliran maksimum (maximum flow problem):
menghitung volume aliran BBM dari suatu reservoir ke suatu titik tujuan melalui jaringan pipa.

Masalah pencariah dalam graph (graph searching problem):
mencari langkah-langkah terbaik dalam program permainan catur komputer.

Masalah pengurutan topologis (topological ordering problem):
menentukan urutan pengambilan mata-mata kuliah yang saling berkaitan dalam hubungan prasyarat (prerequisite).

Masalah jaringan tugas (Task Network Problem):
membuat penjadwalan pengerjaan suatu proyek yang memungkinkan waktu penyelesaian tersingkat.

Masalah pencarian pohon rentang minimum (Minimum Spanning Tree Problem):
mencari rentangan kabel listrik yang totalnya adalah minimal untuk menghubungkan sejumlah kota.

Travelling Salesperson Problem:
tukang pos mencari lintasan terpendek melalui semua alamat penerima pos tanpa harus mendatangi suatu tempat lebih dari satu kali.

Four-color problem:
dalam menggambar peta, memberikan warna yang berbeda pada setiap propinsi yang saling bersebelahan.

Definisi
Suatu graph didefinisikan oleh himpunan verteks dan himpunan sisi (edge). Verteks menyatakan entitas-entitas data dan sisi menyatakan keterhubungan antara verteks. Biasanya untuk suatu graph G digunakan notasi matematis
G = (V, E)

V adalah himpunan verteks dan E himpunan sisi yang terdefinisi antara pasangan-pasangan verteks. Sebuah sisi antara verteks x dan y ditulis {x, y}.

Suatu graph H = (V1, E1) disebut subgraph dari graph G jika V1 adalah himpunan bagian dari V dan E1 himpunan bagian dari E.

Digraph & Undigraph

Graph Berarah (directed graph atau digraph): jika sisi-sisi pada graph, misalnya {x, y} hanya berlaku pada arah-arah tertentu saja, yaitu dari x ke y tapi tidak dari y ke x; verteks x disebut origin dan vertex y disebut terminus dari sisi tersebut. Secara grafis maka penggambaran arah sisi-sisi digraph dinyatakan dengan anak panah yang mengarah ke verteks terminus, secara notasional sisi graph berarah ditulis sebagai vektor dengan (x, y).
graph di samping ini adalah suatu contoh Digraph G = {V, E}
dengan V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
dan E = {( (A,B),(A,C), (A,D), (A,F), (B,C), (B,H), (C,E), (C,G), (C,H), (C,I), (D,E), (D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I), (I,J), (I,M), (J,K), (J,M), (L,K), (L,M)}.

Graph Tak Berarah (undirected graph atau undigraph): setiap sisi {x, y} berlaku pada kedua arah: baik x ke y maupun y ke x. Secara grafis sisi pada undigraph tidak memiliki mata panah dan secara notasional menggunakan kurung kurawal.
graph di samping ini adalah suatu contoh Undigraph G = {V, E}
dengan V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
dan E = { {A,B},{A,C}, {A,D}, {A,F}, {B,C}, {B,H}, {C,E}, {C,G}, {C,H}, {C,I}, {D,E}, {D,F}, {D,G}, {D,K}, {D,L}, {E,F}, {G,I}, {G,K}, {H,I}, {I,J}, {I,M}, {J,K}, {J,M}, {L,K}, {L,M}}.

Dalam masalah-masalah graph undigraph bisa dipandang sebagai suatu digraph dengan mengganti setiap sisi tak berarahnya dengan dua sisi untuk masing-masing arah yang berlawanan.
Undigraph di atas tersebut bisa dipandang sebagai Digraph G = {V, E}
dengan V = {A, B, C, D, E, F, G, H, I,J, K, L, M}
dan E = { (A,B),(A,C), (A,D), (A,F), (B,C), (B,H), (C,E), (C,G), (C,H), (C,I), (D,E), (D,F), (D,G), (D,K), (D,L), (E,F), (G,I), (G,K), (H,I), (I,J), (I,M), (J,K), (J,M), (L,K), (L,M), (B,A), (C,A), (D,A), (F,A), (C,B), (H,B), (E,C), (G,C), (H,C), (I,C), (E,D), (F,D), (G,D), (K,D), (L,D), (F,E), (I,G), (K,G), (I,H), (J,I), (M,I), (K,J), (M,J), (K,L), (M,L)}

Selain itu, berdasarkan definisi ini maka struktur data linear maupun hirarkis adalah juga graph. Node-node pada struktur linear atupun hirarkis adalah verteks-verteks dalam pengertian graph dengan sisi-sisinya menyusun node-node tersebut secara linear atau hirarkis. Sementara kita telah ketahui bahwa struktur data linear adalah juga tree dengan pencabangan pada setiap node hanya satu atau tidak ada. Linear 1-way linked list adalah digraph, linear 2-way linked list bisa disebut undigraph.

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 merge s

  •     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.

 

      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 :

Class Searching :

Hasil Output :

Tree

Tree

Tree merupakan salah satu bentuk struktur data bukan linier yang menggambarkan bentuk hierarki antara elemen-elemen. Tree biasanya terdiri dari root (akar) dan node-node (simpul-simpul) yang berada di bawah root. Struktur seperti tree sangat banyak sekali dgunakan dalam dunia nyata, misalnya: struktur organisasi suatu perusahaan, pengaturan filesystem, daftar isi sebuah buku, dan masih banyak lagi.

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 :

  1. Full Binary Tree : semua node (kecuali leaf pasti memiliki 2 anak dan tiap subtree memiliki panjang path yang sama)Full Binary Tree
  2. 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
  3. 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 :

JTreeObject1

JTreeObject2

HASIL CODING :

JTreeObject3

JTreeObject4

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
diimplementasikan 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.

  • HasHMap

CONTOH CODING :

HashMap10

HashMap11

HASIL CODING :

HashMap12

  • TreeMap

CONTOH CODING :

Treemap1

Treemap2

HASIL CODING :

Treemap3

  • LinkedHashMap

CONTOH CODING :

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).

  •  Hashset

CONTOH CODING :

HashSet51

HASIL CODING :

HashSet52

  • TreeSet

CONTOH CODING :

TreeSet61

HASIL CODING :

TreeSet62

  •  LinkedHashSet

CONTOH CODING :

LinkedHashSet71

HASIL CODING :

LinkedHashSet72

Recursive

Recursive

(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 Fibonacci 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 Peano 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 Hofstadter selain anda; lalu tanya dia rekursi itu apa.”

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

 Rekursi dalam matematika

rec2

Segitiga Sierpinski—sebuah rekursi terbatas dari segitiga membentuk suatu jeruji geometris.

Himpunan yang didefinisikan secara rekursif

Contoh: bilangan asli

Contoh kanonikal dari himpunan yang didefinisikan secara rekursif yaitu diberikan oleh bilangan asli:

0 ada dalam

jika n ada dalam , maka n + 1 ada dalam

Himpunan dari bilangan asli adalah himpunan terkecil yang memenuhi dua properti sebelumnya.

Contoh: himpunan dari proposisi benar terjangkau

Contoh menarik lainnya adalah himpunan dari semua proposisi “benar terjangkau” dalam suatu sistem aksioma.

  • Jika suatu proposisi adalah sebuah aksioma, maka ia adalah suatu proposisi benar terjangkau.
  • Jika suatu proposisi dapat dihasilkan dari proposisi benar terjangkau dengan menggunakan aturan-aturan inferensi, maka ia adalah proposisi benar terjangkau.
  • Himpunan dari proposisi benar-terjangkau adalah himpunan terkecil dari proposisi yang memenuhi kondisi tersebut.

Himpunan ini disebut ‘proposisi benar terjangkau’ karena dalam pendekatan non-konstruktif terhadap fondasi matematika, himpunan dari proposisi benar bisa lebih besar daripada himpunan yang dibangun secara rekursif dari aksioma-aksioma dan aturan-aturan inferensi.

Contoh klasik dari rekursi adalah definisi dari fungsi faktorial, diberikan dalam kode C:

unsigned int factorial(unsigned int n)

{

if (n == 0) {

return 1;

} else {

return n * factorial(n-1);

}

}

Teorema rekursi

Dalam teori himpunan, ini adalah teorema yang menjamin bahwa fungsi yang terdefinisi secara rekursif itu ada. Diberikan suatu himpunan X, sebuah elemen a dari X dan sebuah fungsi , teorema menyatakan bahwa ada fungsi unik (dengan menunjukkan himpunan dari bilangan asli termasuk nol) sehingga

untuk setiap bilangan asli n.

Pembuktian keunikan

Ambil dua fungsi dan sehingga:

dengan a adalah elemen dari X.

Ia dapat dibuktikan dengan induksi matematika bahwa untuk semua bilangan asli n:

Kasus dasar: sehingga persamaan memenuhi untuk .

Langkah Induktif: Misalkan untuk beberapa . Maka

Karenanya F(k) = G(k) menyiratkan F(k+1) = G(k+1).

Dengan induksi, untuk semua .

Contoh-contoh

Beberapa relasi perulangan umum yaitu:

Dalam matematika, faktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Secara umum dapat dituliskan sebagai:

Sebagai contoh, nilai dari adalah Berikut ini adalah daftar sejumlah faktorial :

n n!
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
12 479001600
14 87178291200
16 20922789888000
18 6402373705728000
20 2432902008176640000
25 1.5511210043×1025
42 1.4050061178×1051
50 3.0414093202×1064
70 1.1978571670×10100
100 9.3326215444×10157
450 1.7333687331×101.000
1000 4.0238726008×102.567
3249 6.4123376883×1010.000
10000 2.8462596809×1035.659
25206 1.2057034382×10100.000
100000 2.8242294080×10456.573
205023 2.5038989317×101.000.004
1000000 8.2639316883×105.565.708

 

Fungsi faktorial didefinisikan sebagai:

Selain definisi tersebut, terdapat juga definisi secara rekursif, yang didefinisikan untuk

Untuk n yang sangat besar, akan terlalu melelahkan untuk menghitung n! menggunakan kedua definisi tersebut. Jika presisi tidak terlalu penting, pendekatan dari n! bisa dihitung menggunakan rumus Stirling:

Juga terdapat definisi analitik untuk faktorial, yaitu menggunakan fungsi gamma:

Finding Factorial of a Number in Java

The factorial of a number is defined is the product of natural numbers from one to that particular number. Mathematically,

n! = 1 * 2 * 3 * …. * (n-1) * n

For example, the factorial of 4 is

4! = 1 * 2 * 3 * 4 = 24

This article will explain you how to find the factorial of a number through iteration as well as recursion.

Finding factorial of a number in Java using Iteration

Let the number whose factorial is to be found be stored in the variable n. A new variable ‘result’ of type int is declared and initialised with the integer 1.

int result = 1;

Now, our task is to multiply the variable result with all natural numbers from 1 to n. For this purpose, we use a for loop with a counter i that ranges from 1 to n. Within the loop, the existing value of result will be multiplied with the loop counter.

for (int i = 1; i <= n; i++) {
result = result * i;
}

Let us take a small number n = 3 to understand how the above loop works. Before entering the loop, result would be initialised to one. The loop will execute thrice with the value of i = 1, 2 and 3. When the value of i becomes 4, the loop condition fails. When the value of i is 1, the existing result would be multiplied with 1 which again gives one. In the second iteration, result will be multiplied with 2 and in the third iteration with 3. These calculations are shown below:

result = 1
i = 1 result = result * i = 1 * 1 = 1
i = 2 result = result * i = 1 * 2 = 2
i = 3 result = result * i = 2 * 3 = 6

When the loop exists, the value result which was initially one would be already multiplied by all natural numbers from 1 to n. Thus, result holds the factorial of the number.

Given below is a program which finds the factorial of the number 7.

public class Factorial {

public static void main(String[] args) {
int n = 7;
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
System.out.println(“The factorial of 7 is ” + result);
}
}

The output of the above program would be

The factorial of 7 is 5040

We can start the loop counter, i from 2 instead of 1 because in the first iteration the value of result gets multiplied by 1 which again gives one. The modified loop can be written as

for (int i = 1; i <= n; i++) {
result = result * i;
}

We can also start the loop counter from n and decrement it till 2 or 1. In that case, the loop would look like

for (int i = n; i >= 1; i–) {
result = result * i;
}

Given below is another program where the number whose factorial is to be calculated is taken as an input from the user and the result is displayed on the screen.

CONTOH CODING :

import java.util.Scanner;

public class Factorial {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(“Enter the number whose factorial is to be found: “);
int n = scanner.nextInt();
int result = factorial(n);
System.out.println(“The factorial of ” + n + ” is ” + result);
}

public static int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
}

Here is a sample execution

Enter the number whose factorial is to be found: 7
The factorial of 7 is 5040

Finding factorial of a number in Java using Recursion

The factorial of a number be found using recursion also. The base case can be taken as the factorial of the number 0 or 1, both of which are 1. The factorial of some number n is that number multiplied by the factorial of (n-1). Mathematically,

factorial ( 0 ) = 1
factorial ( n ) = n * factorial ( n – 1 )

Given below is a program which calculates the factorial of 7 using recursion.

public class Factorial {

public static void main(String[] args) {
int n = 7;
int result = factorial(n);
System.out.println(“The factorial of 7 is ” + result);
}

public static int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n – 1);
}
}
}

Example:

publicclassTest{   publicstaticvoid main(String args[]){    double x=11.635;    double y=2.76;     System.out.printf(“The value of e is %.4f%n”,Math.E);    System.out.printf(“pow(%.3f, %.3f) is %.3f%n”,                                         x, y,Math.pow(x, y));   }}

This produces the following result:

The value of e is 2.7183pow(11.635, 2.760) is 874.008

Bilangan Fibonacci

Dari Wikipedia bahasa Indonesia, ensiklopedia bebas

Dalam matematika, bilangan Fibonacci adalah barisan yang didefinisikan secara rekursif sebagai berikut:

Penjelasan: barisan ini berawal dari 0 dan 1, kemudian angka berikutnya didapat dengan cara menambahkan kedua bilangan yang berurutan sebelumnya. Dengan aturan ini, maka barisan bilangan Fibonaccci yang pertama adalah:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946…

Barisan bilangan Fibonacci dapat dinyatakan sebagai berikut:

Fn = (x1n – x2n)/ sqrt(5)

dengan

Fn adalah bilangan Fibonacci ke-n

x1 dan x2 adalah penyelesaian persamaan x2 – x – 1 = 0.

Perbandingan antara Fn+1 dengan Fn hampir selalu sama untuk sebarang nilai n dan mulai nilai n tertentu, perbandingan ini nilainya tetap. Perbandingan itu disebut rasio emas yang nilainya mendekati 1,618.

Fibonacci number programs that implement this definition directly are often used as introductory examples of recursion. However, many other algorithms for calculating (or making use of) Fibonacci numbers also exist.

This simple java program uses recursion to print the first 10 Fibonacci numbers to the console.

<<Fibonacci.java>>=

public class Fibonacci {

public static int fib(int n) {

if (n < 2) {

return n;

}

else {

return fib(n-1)+fib(n-2);

}

}

test main

}

Although it is based directly on the definition of a Fibonacci number, the recursive Fibonacci algorithm is extremely expensive, requiring time O(2n). It also performs a huge amount of redundant work because it computes many Fibonnaci values from scratch many times. A simple linear-time iterative approach which calculates each value of fib successively can avoid these issues:

<<FibonacciIterative.java>>=

public class FibonacciIterative {

public static int fib(int n) {

int prev1=0, prev2=1;

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

int savePrev1 = prev1;

prev1 = prev2;

prev2 = savePrev1 + prev2;

}

return prev1;

}

test main

}

CONTOH CODING FACTORIAL :

Factorial1

Factorial2

HASIL CODING :

Factorial3

CONTOH CODING FIBONACCI :

Fibonacci1

Fibonacci2

HASIL CODING :

Fibonacci3

Queue & 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 :
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

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

Array List

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.

Vector

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

Arrays

Arrays

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) : mengcop
  • y 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

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

Struktur Data

Team Member :

1. Achmad Susanto

2. Andi Baskara

3. Andriansyah

4. Anita Rahma Syafitri

5. Ari Wibowo

6. Belpha Yayang Anugrah

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, misalnyaString

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 )

REVIEW 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.

Rekaman disebut juga tipe terstruktur.

Kata Kunci

Struktur data, Pengertian struktur data, struktur data adalah, definisi struktur data, yhs-mystartdefault, apa itu struktur data, manfaat struktur data, arti struktur data, pengertian struktur, apa yang dimaksud dengan struktur data.