Minggu, 30 September 2018

Tugas Struktur Data

NAMA        : GANANG DIAN PRADANA PUTRA

NIM            : 862010117006

KELAS       : 3A


A. PENGERTIAN STRUKTUR DATA


Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer agar bisa dipakai 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.
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.
I . Larik (Bahasa Inggris: array)
Dalam ilmu komputer, adalah suatu tipe data terstruktur yang dapat menyimpan banyak data dengan suatu nama yang sama dan menempati tempat di memori yang berurutan (kontigu) serta bertipe data sama pula.
Larik dapat diakses berdasarkan indeksnya. Indeks larik umumnya dimulai dari 0 dan ada pula yang dimulai dari angka bukan 0. Pengaksesan larik biasanya dibuat dengan menggunakan perulangan (looping).
Sebuah array dapat dikatakan sebagai suatu himpunan terurut dengan elemen-elemen homogenTerurut, dimaksudkan bahwa elemen pertama, elemen kedua, dst masing-masing dapat diidentifikasi. Sedangkan homogen berarti masing-masing elemen tersebut mempunyai tipe data yang sama.

Array dapat dikelompokkan atas 2 bagian, yaitu :

      1. Array Satu Dimensi.
      2. Array Multi Dimensi.

1.     ARRAY SATU DIMENSI
Bentuk array yang paling sederhana adalah array satu dimensi. Array jenis ini dapat dianggap sebagai sebuah vektor. Suatu array A berdimensi satu dengan N buah elemen, secara fisik dapat digambarkan sebagai berikut :
A(1)
A(2)
…..
A(I)
…..
A(n)
Indeks dari elemen suatu array menyatakan posisinya dalam urutan secara umum suatu array A berdimensi satu dengan elemen berjenis data T yang mempunyai indeks dari L s/d U dituliskan sbb: A(L:U) = {A(I)}
Untuk I = L, L+1, L+2, …………….., U-1, U, dimana masing-masing  A(I) berjenis data T.
L disebut sebagai batas bawah dari indeks A dan U sebagai batas atas dari A.
Jumlah elemen dalam suatu array disebut sebagai range.
Range dari array A(L:U) adalah U – L + 1.
Range dari array B(1:N) adalah N – l + 1= N.

2.    ARRAY MULTI DIMENSI
Array dua dimensi adalah salah satu contoh dari array jenis multi dimensi (dimensi banyak). Array ini elemen-elemennya merupakan array pula. Bentuk yang dianggap dapat mewakili array dua dimensi ini adalah matriks.  Suatu array B yang terdiri atas M elemen dimana masing-masing elemennya berupa array dengan N elemen, dapat digambarkan sebagai suatu tabel MxN, dengan bentuk sbb:
1
2
3
J
N
1
2
3
I
M
Array ini dituliskan :   B(1:M,1:N) = {B(I,J)},
                                                Untuk  I = 1,2,…,M
                                                            J = 1,2,…,N
Jumlah elemen (range) dari array B ini adalah M x N.
Secara umum, array 2 dimensi B dengan batas bawah indeks pertama L1, batas atas indeks pertama U1, batas bawah indeks kedua L2 batas atas indeks kedua U2, dituliskan:
            B(L1 : U1, L2 : U2) = {B(I,J)}
            Untuk L1 < I < U1 dan L2 < J < U2
Jumlah elemen baris dari array B adalah : ( U2 – L2 + 1 )
Jumlah elemen kolom dari array B adalah : ( U1 – L1 + 1)
Jumlah total elemen array B adalah : (U2 – L2 + 1 )(U1 – L1 + 1)

CROSS SECTION
Yang dimaksud dengan Cross section dari array 2 dimensi adalah suatu himpunan yang anggotanya adalah elemen-elemen dalam satu baris saja atau satu kolom saja. Notasinya menggunakan *.
Contoh : Misal diberikan array B(1:M,1:N).
        B(4,*) = {B(4,1), B(4,2), …,B(4,N)}
                        B(*,4) = {B(1,4), B(2,4), …,B(M,4)}

 TRANSPOSE
Transpose dari suatu array dua dimensi, adalah suatu array dua dimensi pula dengan menukar posisi indeksnya. Transpose dari array berukuran M x N adalah suatu array berukuran N x M. Transpose dari suatu array dari B dinotasikan dengan BT, dan didefinisikan:     B(I,J) = BT (J,I)
Selanjutnya secara umum, suatu array A berdimensi N dapat dituliskan sbb:
                        A(L1:U1,L2:U2,…,LN:UN)
Jumlah elemen array ini adalah :                                                                                                                                                                                                N
(U1 – L1 + 1)(U2- L2+ 1)… (UN – LN + 1) (UK – LK + 1)
                                                                                                  k=1
Sebagai contoh perhatikan sebuah array berdimensi 3 yang menggambarkan (berisi) jumlah mahasiswa STMIK Asia untuk kelas reguler dan eksekutif.
Array ini dapat digambarkan sbb :
Jika array ini diberi nama Asia, maka bentuknya dapat dituliskan sbb:
            Asia(1:2,1:2, A:E) = {Asia(i,j,k)}
            dimana            I = 1,2 (1 = pria, 2 = wanita)
                                    J = 1,2 (1 = reguler, 2 = eksekutif)
                                    K = A,B,C,D,E (kelas A s/d E)
Seluruh mahasiswa reguler dapat ditunjukkan dengan Asia (*,1,*)
sedangkan seluruh mahasiswa eksekutif dapat ditunjukkan dengan Asia (*,2,*)


 DEKLARASI ARRAY DALAM BAHASA PEMROGRAMAN.
Misal diberikan array dengan nama A yang mempunyai 24 elemen dengan masing-masing elemen berjenis data integer, maka deklarasinya dalam bahasa pemrograman adalah sbb:     VAR A : ARRAY [1..24] OF INTEGER;
Dalam mendeklarasikan suatu array ada 3 hal yang harus ada pada deklarasi tersebut, yaitu:
1.      Nama array
2.      Range dari indeksnya
3.      Tipe elemen-elemen datanya

 PEMETAAN ARRAY KE STORAGE
Ada beberapa cara untuk menyatakan suatu array pada storage, tetapi konsepnya hampir sama dengan apa yang ada pada data fungsi.
ARRAY SATU DIMENSI
Misal diberikan array satu dimensi dengan nama A yang mempunyai indeks 1 s/d N, yaitu A(1:N). Secara fisik array A(1:N) dapat digambarkan sbb:
A(1)
A(2)
A(3)
A(I)
A(N)
Yang perlu kita ketahui disini adalah letak elemen ke I dari array A(1:N), atau letak masing-masing elemen array pada storage. Letak suatu elemen biasanya disebut sebagai starting address atau starting location atau base location
Untuk mengetahui starting addresssuatu elemen array, perlu diketahui lebih dulu antara lain :
  1. Starting address dari array yang bersangkutan.
  2. Ukuran masing-masing elemen array atau ruang yang digunakan masing-masing elemen array.
Misal starting address dari array A(1:N) adalah B dan masing-masing elemennya menggunakan ruang sebanyak  S bit. Maka starting address elemen ke I dari array A(1:N) adalah           : B + ( I – 1 ) * S
Hal ini disebabkan ada (I – 1) elemen array A, masing-masing dengan ukuran atau panjang S secara fisik mendahului elemen ke I pada array tersebut.
Secara umum dapat dikatakan bahwa :
      Starting address elemen ke I dari array A(L:U) adalah (B +( I – L ) * S jika starting addressarray A adalah B dan masing-masing elemenya menggunakan ruangan sebanyak S bit.

ARRAY MULTI DIMENSI
Prinsip yang digunakan disini tetap didasarkan pada array satu dimensi. Oleh karena itu untuk array multi dimensi, linierisasi-nya dapat dilakukan berdasarkan baris atau kolom.
Contoh : Misal diberikan array  A(1:3,1:4). Array ini secara fisik dapat digambarkan sbb :
1
2
3
4
1
2
3
Linierisasi menurut baris akan mengakibatkan bentuk diatas menjadi :
1
2
3
Jika B adalah starting address array A(1:3,1:4) dan S adalah ruang yang digunakan oleh masing-masing elemennya, maka starting address dari elemen A(I,J) adalah :  B + (I-1) * 4 * S + (J-1) * S
Hal ini karena ada ( I – 1) baris, masing-masing dengan panjang 4 * S yang mendahului baris dimana elemen A(I,J) berada dan ada (J-1) elemen masing-masing dengan panjang S yang mendahului elemen A(I,J) pada baris ke I.
Contoh  Dari array A(1:3,1:4) akan dicari starting adress elemen A(2,4).
baris
1
baris
2
baris
3
                                                                                    A(2,4)
Starting address A(2,4)           = B + (2 – 1) * 4 * S + (4 – 1) * S
                                                = B + 7 * S
Secara umum elemen A(I,J) dari array A(l:U,L:U) mempunyai starting address :
                                    B + (I-L1) * (U2-L2+1) * S + (J-L2) * S
Alternatif lain untuk linierisasi adalah dengan menggunakan cara kolom jika diberikan array A(1:3,1:4) diatas, maka bentuk linierisasinya :
Jika B adalah starting address dari array A(1:4,1:6) dan S adalah ruang digunakan untuk masing-masing elemennya, maka starting address dari A(I,J) adalah :
                                    B + (J – 1) * 4 * S + (I – 1) * S
Hal ini disebabkan ada (J – I) kolom masing-masing dengan 4 elemen yang panjangnya s yang mendahului kolom tempat elemen A(I,J) berada dan ada (I-1) elemen masing-masing dengan panjang S yang mendahului elemen A(I,J) pada kolom ke J.
Secara umum dapat dikatakan bahwa elemen A(I,J) dari array A(L1:U1,L2:U2), menurut kolom mempunyai starting address : B + (J-L2) * (U1-L1+1) * S + (I-L1) * S
Jika starting adress array tersebut adalah B dan masing-masing elemenya menggunakan ruang sebanyak S bit.
Contoh : Misal diberikan array K(1:4,1:6) dengan starting address B dan masing-masing elemenya menggunakan ruang S bit. Maka starting adress dari elemen k(2,4) adalah :
                                    = B + (4 – 1) * (4-1+1)  * S + (2 – 1) * S
                                    = B + 3 * 4* S + 1 * S
                                    = B + 13 * S

Bahasa Pascal

Larik dalam bahasa Pascal dapat didefinisikan dengan indeks awal dan indeks akhirnya.
Contoh:
program larik;
var arr: array[1..10] of integer;  //larik dengan indeks awal 1 dan indeks akhir 10
begin
  arr[1] := 5; //memasukkan nilai ke indeks 1
  writeln(arr[i]); //mencetak angka 5
end.

Bahasa C

Larik dalam bahasa C selalu dimulai dari indeks 0. Larik dapat didefinisikan secara statikatau dinamik. Jika didefinisikan statik, ukuran larik akan tetap dari awal program hingga akhir program. Jika didefinisikan dinamik, ukuran larik dapat berubah selama program berjalan karena memesan tempat pada memori heap. Proses pemesanan tempat pada memori disebut dengan alokasi. Sedangkan proses pembebasan memori yang sudah dipesan disebut dengan dealokasi.
Contoh larik statik:
#include <stdio.h>
int main(){
  int arr[10]; //indeks awal 0 dan indeks akhir 9
  arr[0] = 5;
  printf("%d\n", arr[0]);
}
Contoh larik dinamik:
#include <malloc.h>
int main(){
  int * arr;
  arr = (int *) malloc(10 * sizeof(int)); //memesan 10 tempat pada memori
  arr[0] = 5;
  free(arr);                              //menghancurkan larik. Memori pada heap dibebaskan
  arr = (int *) malloc(5 * sizeof(int));  //memesan 5 tempat baru pada memori
  free(arr);                              //di akhir program jangan lupa untuk menghancurkan larik dinamik
{

Bahasa Java

Dalam bahasa Java tipe data larik direpresentasikan sebagai sebuah objek khusus. Karena itu pada bahasa Java larik yang dibuat selalu bersifat dinamik. Namun walaupun bersifat dinamik, larik pada bahasa Java tidak perlu dihancurkan karena proes penghancuran dilakukan secara otomatis melalui suatu prosedur yang disebut dengan Pengumpulan sampah (Inggris: Garbage Collecting).
Sama seperti bahasa C, indeks larik selalu dimulai dari 0.
Contoh:
public class larik {  
  public static void main(String args[]) {
    int[] arr = new arr[10];
    arr[0] = 5;
    System.out.println(arr[0]); 
  }  
}

PHP
Sama seperti di JAVA larik di PHP juga merupakan sebuah object lebih tepatnya lagi map terorder. Ada dua tipe larik di PHP, indexed array (simple array) dan associated array (key=>value array). Di PHP, element larik bisa berupa string, Bilangan, boolean, dan semua tipe data primitive lainnya, termasuk larik juga bisa menjadi element larik lainnya.
Cara medefinisikan larik:
#mendefinisikan array kosong 
$larik = array();
Contoh indexed array (simple array):
$jam = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$hari = array('senin', 'selasa', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu');
Contoh associated array:
$bulan = array('1'=>'January', '2'=>'February', '3'=>'Maret', '4'=>'April');

$komponenKalender = array(
  'bulan'=> array(1, 2, 3, 4, 5, 6, 7, 8, 9 ,10 , 11, 12),
  'hari' => array('senin', 'selasa', 'selasa', 'rabu', 'kamis', 'jumat', 'sabtu')
);

 RECORD
Record adalah himpunan dari elemen-elemen yang heterogen. Heterogen adalah elemen-elemennya dapat mempunyai tipe data yang berbeda.
Beberapa hal yang perlu diketahui dalam record sbb:
1.      ELEMENTARY ITEM adalah suatu field yang tidak mempunyai subfield.
2.      GROUP ITEM adalah suatu field yang mempunyai subfield.
3.      TUPEL adalah gabungan atribut yang menjadi suatu informasi dari proses                       basis data.
Contoh RECORD :
      PEGAWAI
Job Tittle
Emp. No
Pay Rate
Name
Telp. No
Analys
00012724
1.000.000
Bob Geldof
7801725
Programmer
00023451
   800.000
Ceu Rika
7521475
( String(20) )
( String(8) )
( Real(9,2) )
( String(25) )
( String(7) )
      Record-record yang tipenya sama : FILE.
Untuk menyatakan suatu data dalam record yang mempunyai identifikasi yang khusus, maka harus punya 1 field khusus yang disebut KEY (kunci field).
 DEKLARASI RECORD DALAM BAHASA PEMROGRAMAN
            PROGRAM DALAM PASCAL
      Type
            Pegawai = Record;
                                          Job_Tittle : String[20];
                                          Emp_No  : String[8];
                                          Pay_Rate : Real;
                                          Name       : String[25];
                                          Telp_No   : String[7];
                                   End;

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.
  • Struktur data majemuk, yang terdiri dari:
Linier : Stack, Queue, serta List 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 )
B. SEKILAS TENTANG BAHASA PEMROGRAMAN JAVA :
Java adalah bahasa pemrograman yang dapat dijalankan di berbagai komputer termasuk telepon genggam. Bahasa ini awalnya dibuat oleh James Gosling saat masih bergabung di Sun Microsystems saat ini merupakan bagian dari Oracle dan dirilis tahun 1995 . Bahasa ini banyak mengadopsi sintaksis yang terdapat pada C dan C++ namun dengan sintaksis model objek yang lebih sederhana serta dukungan rutin-rutin aras bawah yang minimal. Aplikasi-aplikasi berbasis java umumnya dikompilasi ke dalam p-code (bytecode) dan dapat dijalankan pada berbagai Mesin Virtual Java (JVM). Java merupakan bahasa pemrograman yang bersifat umum/non-spesifik (general purpose), dan secara khusus didisain untuk memanfaatkan dependensi implementasi seminimal mungkin. Karena fungsionalitasnya yang memungkinkan aplikasi java mampu berjalan di beberapa platform sistem operasi yang berbeda, java dikenal pula dengan slogannya, “Tulis sekali, jalankan di mana pun“. Saat ini java merupakan bahasa pemrograman yang paling populer digunakan, dan secara luas dimanfaatkan dalam pengembangan berbagai jenis perangkat lunak aplikasi ataupun aplikasi berbasis web.

II. 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 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 Menambah data atau menghapus data.
A. CODING PROGRAM LINKED LIST :
import java.util.LinkedList;
public class LinkedListSimple {
public static void main(String[] args) {
LinkedList lList = new LinkedList();
lList.add(“Yogyakarta”);
lList.add(“Semarang”);
lList.add(“Kediri”);
lList.add(“Magelang”);
lList.add(“Jepara”);
if(lList.size()==0){
System.out.println(“Kota tidak ada”);
}
else{
System.out.println(“Jumlah Kota: “+lList.size());
System.out.println(“Daftar Nama Kota: “+lList);
lList.remove(1);
System.out.println(“Kota Semarang Dihapus, Daftar Kota Sekarang: ”
+lList);
System.out.println(“Nama Kota Pertama: “+lList.get(0));
System.out.println(“Nama Kota Terakhir: “+lList.get(3));
}
}
}
B. HASIL PROGRAM LINKED LIST :
linkedlist
III. STACK (TUMPUKAN) :
Stack adalah salah satu struktur data yang memiliki sistem kerja Last In First Out (LIFO), artinya yang terakhir masuk pertama keluar. Dapat di ilustrasikan seperti sebuah tumpukan kotak, ketika mengambil sebuah kotak di dalam tumpukan itu maka harus diambil satu persatu dari kotak yang paling atas dari tumpukan kotak tersebut. Atau Dosen saya mengilustrasikan sebagai tumpukan piring, tapi intinya sama saja kan?  Sebuah stack hanya dapat ditambahkan dan dikurangi elemennya hanya dari satu sisi yakni elemen atasnya atau biasa disebut Top Of Stack.
Istilah yang digunakan antara lain :
PUSH      = masuk, simpan, tulis
POP         = keluar, ambil, hapus
Fungsi dalam Stack :
Fungsi init           : fungsi yang digunakan untuk inisialisasi atau membuat     stack baru yang masih kosong.
Fungsi full           : digunakan untuk mengetahui stack penuh atau tidak.
Fungsi empty      : digunakan untuk mengetahui stack kosong atau tidak.
Fungsi clear        : digunakan untuk mengosongkan stack. Stack dianggap  kosong apabila puncak stack berada pada
posisi -1.
Fungsi push        : digunakan untuk menambahkan data ke dalam stack. Penambahan data tidak bisa dilakukan apabila
stack     sudah penuh. Urutan perintahnya adalah: menambahkan     nilai top dan menambahkan data
pada posisi nilai top. Jika dalam Linked List menggunakan method addLast.
Fungsi pop         : digunakan untuk mengeluarkan data teratas stack  dengan syarat bahwa stack tidak kosong.
Urutan perintahnya adalah  menghapus data pada posisi nilai top dan menurunkan nilai top. Jika dalam Linked List menggunakan method removeLast.

A. CODING PROGRAM STACK:
import java.util.EmptyStackException;
import java.util.Stack;
public class fStack {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack stack=new Stack();
System.out.println(“Stack items\t: “+stack);
stack.add(“Bali”);
stack.add(“Lombok”);
stack.add(“Bandung”);
stack.add(“Medan”);
System.out.println(“Daftar Kota Di Indonesia\t: “+stack);
System.out.println(“Jumlah Kota\t: “+stack.size());
System.out.println(“Cek Kota Lombok?\t: “+stack.contains(“Lombok”) );
System.out.println(“Lokasi Kota Lombok\t: “+stack.search(“Lombok”));
System.out.println(“Lokasi Kota Medan\t: “+stack.search(“Medan”));
System.out.println(“Kota Paling Atas\t: “+stack.peek());
System.out.println(“Pop, “+stack.pop() + “\t Stack items: “+stack);
stack.clear();
System.out.println(“Hapus Semua Kota, Daftar Kota Sekarang: “+stack);
}
}
B. HASIL PROGRAM STACK :
     stack    
IV. QUEUE (ANTRIAN) :
Queue (antrian) adalah struktur data dimana data yang pertama kali dimasukkan adalah data yang pertamak kali bisa dihapus. Atau bisa juga disebut dengan struktur data yang menggunakan mekanisme FIFO (First In First Out). Queue dalam kehidupan sehari-hari seperti antrian pada penjualan tiket kereta api, dimana orang yang pertama datang adalah orang yang pertama kali dilayani untuk membeli tiket. Jika ada orang baru yang datang akan membali tiket, maka posisinya berada pada urutan paling belakang dalam antrian tersebut.Orang yang berada pada posisi terakhir dalam antrian adalah yang terakhir kali dapat dilayani dan memperoleh tiket kereta api (kalau kurang beruntung, maka akan kehabisan tiket). Contoh lain adalah nasabah yang antri di teller bank, paket data yang menunggu untuk ditransmisikan lewat internet, antrian printer dimana terdapat antrian print job yang menunggu giliran untuk menggunakan printer, dsb.
Istilah-istilah yang digunakan dalam queue (antrian) :
– Memasukkan data (insert) disebut juga dengan putadd, atau enqueue.
– Menghapus data (remove) biasa disebut dengan istilah deleteget, atau dequeue.
– Bagian belakang queue, dimana data bisa dimasukkan disebut dengan backtail (ekor),
atau end (akhir).
– Sedangkan bagian depan (frontqueue dimana data bisa dihapus juga biasa disebut
dengan istilah kepala(head).
Fungsi dalam Queue:
Fungsi init               : digunakan untuk membuat queue baru atau kosong, yaitu dengan memberi nilai awal (head) dan
nilai akhir (tail) dengan -1.
Fungsi full               : digunakan untuk mengetahui apakah queue sudah     penuh atau belum. Dilakukan dengan
memeriksa  nilai akhir (tail) apakah sudah sama dengan maksimal  queue.
Fungsi empty         : digunakan untuk mengetahui apakah queue masih     kosong atau tidak. Dilakukan dengan memeriksa
nilai  akhir (tail) bernilai -1 atau tidak.
Fungsi enqueue     : digunakan untuk menambahkan elemen ke dalam queue.
Fungsi dequeue     : digunakan untuk mengambil elemen dari queue, dengan cara memindahkan semua elemen satu
langkah ke posisi     depannya sehingga elemen yang paling depan tertimpa.
Fungsi clear           : digunakan untuk menghapus semua elemen dalam queue.  Ada dua cara yang bisa digunakan, yaitu
menuliskan  fungsi seperti inisialisasi atau memanggil fungsi remove  sampai queue kosong.
A.CODING PROGRAM QUEUE :
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
public class gQueue {
public static void main(String[] args) {
// TODO Auto-generated method stub
Queuequeue=new LinkedList();
queue.add(“Bangka Belitung”);
queue.add(“Wamena”);
queue.add(“Madura”);
queue.add(“Tanggerang”);
System.out.println(“Daftar Kota\t: “+queue);
System.out.println(“Jumlah Kota\t: “+queue.size());
System.out.println(“DAFTAR KOTA SECARA VERTIKAL”);
Iteratori=queue.iterator();
while (i.hasNext()){
String s= i.next();
System.out.println(s);
}
System.out.println(“Kota Teratas adalah : “+queue.peek());
System.out.println(“Hapus Kota: “+queue.poll());
System.out.println(“Daftar Kota Sekarang Adalah: “+queue);
System.out.println(“Hapus Semua Kota: “+queue.removeAll(queue));
System.out.println(“Daftar Kota Setelah Dihapus Semua: “+queue);
System.out.println(“Total Kota\t: “+queue.size());
}
}
 B. HASIL PROGRAM QUEUE:
     QUEUE    
V. DEQUEUE :
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.
DEQUE juga mempunyai dua jenis variasi yaitu :
  1. Deque input terbatas : suatu deque yang membatasi pemasukkan elemen hanya pada satu ujung dari list, sementara penghapusan elemen boleh dilakukan pada kedua ujung list.
  2. 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
A. CODING PROGRAM DEQUEUE :
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
public class DequeueDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Dequedeque=new LinkedList();
deque.add(“Makassar”);
deque.add(“Samarinda”);
deque.add(“Riau”);
System.out.println(“Daftar Kota\t\t: “+deque);
System.out.println(“Jumlah Kota\t\t: “+deque.size());
System.out.println(“DAFTAR KOTA SECARA VERTIKAL”);
Iterator y=deque.iterator();
while (y.hasNext()){
String e = y.next();
System.out.println(e);
}
deque.addFirst(“Palembang”);
deque.addFirst(“Jakarta”);
System.out.println(“Daftar Kota Sekarang\t: “+deque);
deque.addLast(“Semarang”);
deque.addLast(“Yogyakarta”);
System.out.println(“Daftar Kota Sekarang\t: “+deque);
System.out.println(“Kota Pertama adalah\t: “+deque.getFirst());
System.out.println(“Kota Terakhir adalah\t: “+deque.getLast());
}
}
B. HASIL PROGRAM DEQUEUE :
deque
VI. IF THEN ELSE :
Secara umum, ada tiga struktur program , yaitu :
–  Sequence -execute satu pernyataan setelah lainnya.
–  Choice -execute hanya satu beberapa pernyataan tergantung pada kondisi ( jika dan beralih pernyataan ) .
–  Repetition -execute beberapa pernyataan berulang-ulang (sementara , untuk , do … while ) .
Pernyataan IF-THEN Adalah yang paling dasar dari semua laporan aliran kontrol . Ini memberitahu program untuk mengeksekusi bagian tertentu dari kode hanya jika tes tertentu bernilai benar . If-Then Dan If-Then-Else,pernyataan bersyarat biarkan program Java membuat keputusan sederhana tentang apa yang harus dilakukan selanjutnya . Mereka bekerja dengan cara yang logis yang sama seperti yang kita lakukan ketika membuat keputusan dalam kehidupan nyata
A. CODING PROGRAM IF THEN ELSE :
import java.util.Scanner;
public class IfThenTry {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scInput = new Scanner (System. in);
String ket = “”;
System.out.println(“Masukkan Nilai: “);
int bil = scInput.nextInt ();
if (bil >= 75) {
ket = “Lulus”;
}
System.out.println (“Dengan Nilai ” + bil + “, Anda dinyatakan ” + ket);
}
}
B. HASIL PROGRAM IF THEN ELSE :
RF
VII. RECURSION :
Recursion adalah proses pemanggilan dirinya sendiri (fungsi atau prosedur). Fungsi maupun prosedur yang memanggil dirinya disebut fungsi atau prosedur rekursif. Fungsi untuk suatu bagian program yang mengembalikan (menghasilkan) hanya satu nilai. Sebuah function call adalah suatu ekspresi jadi ia memberikan satu nilai.Procedure adalah suatu bagian program yang melakukan aksi/fungsi khusus, biasanya berdasarkan sekumpulan parameter. Sebuah procedure call adalah suatu statemen, jadi ia melakukan aksi. Banyak obyek dalam matematika didefinisikan dengan menampilkan suatu proses untuk  menghasilkan obyek-obyek tersebut. Misalnya : n faktorial (n!) didefinisikan sebagai produk dari semua integer diantara n dan 1. Contoh lain adalah bilangan asli. 1 adalah bilangan asli.Successor dari 1 adalah bilangan asli.
Perbedaan rekursi dengan prosedur/fungsi adalah rekursi bisa memanggil kedirinya sendiri tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur/fungsi. Ciri masalah yang dapat diselesaikan secara rekursif adalah masalah tersebut dapat direduksi menjadi satu atau lebih masalah-masalah serupa yang lebih kecil. Secara umum suatu algoritma rekursif selalu mengandung 2 macam kasus :
1. satu atau lebih kasus yang pemecahan masalahnya dilakukan dengan menyelesaikan masalah serupa yg lebih
sederhana (menggunakan recursive call).
2. satu atau lebih kasus pemecahan masalahnya dilakukan tanpa recursive call. Kasus ini disebut kasus dasar atau
penyetop. Supaya tidak terjadi rekursif tak hingga, maka setiap langkah rekursif haruslah mengarah ke kasus penyetop.
FIBONACCI_RECURSION :
Barisan angka khusus yang dibuat oleh fibonacci dengan menulis dua angka awal yang dijumlahkan. Kemudian angka kedua dijumlahkan dengan hasil penjumlahan sebelumnya hingga membentuk barisan angka.
Deret fibonacci bisa dipakai sebagai trik sulap,dengan cara yang sama yaitu membuat barisan hingga diperoleh 10 angka.Jika semua angka itu dijumlahkan hasilnya sama dengan angka ketujuh barisan itu yang dikalikan sebelas.
Contoh:
pilih dua buah angka(misal 6 n 3)
dijumlahkan menjadi 9
jumlahkan angka kedua(3) dgn angka sebelumnya(9)=12
jumlahkan lagi dua angka paling akhir(9+12=21)
teruskan hal yang sama(12+21=33)
lalu 21+33=54
lalu 33+54=87
lalu 54+87=141
lalu 87+141=228
terakhit suruh teman anda menjumlahkan semua angka tersebut dengan cepat
(6+3+9+12+21+33+54+87+141+228+369+597)
anda bisa menghitungnya dengan cepat dengan mengalikan angka ke7(54) dengan sebelas (54×11=594) 
A. CODING PROGRAM FIBONACCI :
import java.util.Scanner;
public class Fibonaccidemo {
public static void main(String args []) {
System.out.print(“Enter the number upto which fibonacci series to print: “);
int number = new Scanner (System.in).nextInt();
System.out.println(“\n\nFibonacci series upto ” + number +” numbers: “);
for (int i=1; i<=number; i++){
System.out.print(fibonacciRecusion(i) + ” “);
}
}
public static int fibonacciRecusion(int number){
if (number == 1 || number == 2){
return 1;
}
return fibonacciRecusion(number-1) + fibonacciRecusion(number-2);
}
public static int fibonacciLoop(int number){
if (number == 1 || number == 2)       {
return 1;
}
int fibo1=1, fibo2=1, fibonacci=1;
for(int i=3; i<=number; i++){
fibonacci = fibo1 + fibo2;
fibo1 = fibo2;
fibo2 = fibonacci;
return fibonacci;
}
return fibonacci;
}
}
 B. HASIL PROGRAM FIBONACCI :
fibonacci
FACTORIAL_RECURSION :
 Faktorial bilangan asli n adalah perkalian semua bilangan asli yang kurang atau sama dengan n. Faktorial dilambangkan dengan tanda !. Jadi jika n!, maka dibaca “n faktorial“.
n! = 1 x 2 x … x (n-2) x( n-1) x n
Untuk faktorial 0, hasilnya adalah 1.
0! = 1
Berikut ini adalah faktorial 0 sampai faktorial 10.
0! = 1
1! = 1
2! = 1 × 2 = 2
3! = 1 × 2 × 3 = 6
4! = 1 × 2 × 3 × 4 = 24
5! = 1 × 2 × 3 × 4 × 5 = 120
6! = 1 × 2 × 3 × 4 × 5 × 6 = 720
7! = 1 × 2 × 3 × 4 × 5 × 6 × 7 = 5040
8! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 = 40320
9! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 = 362880
10! = 1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 × 10 = 3628800
Faktorial biasa digunakan untuk menghitung banyaknya susunan yang dapat dibentuk dari sekumpulan
benda tanpa memperhatikan urutannya.
A.CODING PROGRAM FACTORIAL:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class faktorialrecursionjava {
public static void main(String  args[] )throws
NumberFormatException, IOException{
System.out.println(“Please Enter the Number : “);
BufferedReader br = new BufferedReader
(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
int result=fact (a);
System.out.println(“Factorial of the number is: “+result);
}
static int fact(int b)
{
if (b <= 1)
return 1;
else
return b*fact(b-1);
}
}
B. HASIL PROGRAM FACTORIAL :
    faktorial
VIII. FOR AND MATRIX:
Matrik atau array dua dimensi adalah struktur data yang mengacu pada sebuah/sekumpulan elemen yang diakses melalui indeks. Berbeda dengan larik, maka pada matriks indeks terdiri dari dua bagian yaitu indeks baris dan indeks kolom. Setiap elemen matriks dapat diakses melalui indeksnya, misalnya mengisi elemen matriks yang bariske-2 dan kolom ke-1 dengan nilai 100, maka cara mengisinya adalah A[2,1] 100.
Vektor merupakan ADT (abstrak data type), dimana struktur data Vektor sesungguhnya cukup serupa dengan lank I dimensi. keduanya baik lank maupun vektor dapat menyimpan beberapa nilai yang bertipe data yang sama serta dapat diakses secara acak, banyak kemudahan pada ADT Vektor java, method method yang diperlukan untuk  melakukan manipulasi data vektro sudah tersedia di java Interface Vektor, sebelum dapat digunakan class program java hams memanggil java.util.Vector;,sehingga semua interface vektor (method) akan dapat dikenali Konstruktor new Vector() membuat vektor tanpa elemen.
A.CODING PROGRAM FOR AND MATRIX:
import java.util.Scanner;
public class ForMatrixExample {
public static void main(String[] args) {
int b=3; int k=3;
System.out.println(“Input Matrix: “);
int[][] matrixA = new int [b][k];
for(int i=0; i<b; i++){
for(int j=0; j<k; j++){
matrixA[i][j]=input();
}
}
for(int i=0; i<b; i++){
for(int j=0; j<k; j++){
System.out.print(matrixA[i][j]+” “);
}
System.out.println();
}
}
static int input(){
Scanner a=new
Scanner(System.in);
int b=a.nextInt();
return b;
}
}
B. HASIL PROGRAM FOR AND MATRIX :
formatrix
IX. SET :
Method set() biasanya digunakan untuk menge-set atau memberikan atau mengganti nilai property (variabel) milik sebuah objek
Set diimplementasikan menjadi :
1.HashSet
2.TreeSet
3.LinkedHashSet
HashSet :
HashSet mengimplementasikan tabel hash yang akan kita bahas di bagian berikutnya. Operasi penambahan, pencarian, dan penghapusan dilakukan dengan sangat efisien pada tabel hash, bahkan lebih cepat lagi dari TreeSet. Elemen pada HashSet tidak disimpan dalam urutan tertentu.
Iterator dari HashSet akan mengunjungi elemen-elemen pada HashSet dalam urutan yang sepertinya acak dan mungkin berubah jika elemen baru ditambahkan. Karena elemen pada HashSet tidak diurutkan, maka semua objek (termasuk yang tidak mengimplementasikan interface Comparable) bisa dimasukkan dalam HashSet. Kita bisa menggunakan HashSet jika elemen yang kita akan masukkan tidak bisa dibandingkan, atau urutannya tidak penting, atau jika kecepatan lebih dipentingkan.
A. CODING PROGRAM HashSet :
import java.util.HashSet;
public class HashsetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet HS = new HashSet();
HS.add(“Surabaya”);
HS.add(“Semarang”);
HS.add(“Surakarta”);
HS.add(“Solo”);
HS.add(“Sidoarjo”);
System.out.println(“Daftar Kota \t : ” + HS);
System.out.println(“Total Kota \t : “+ HS.size());
System.out.println(“Item \”Surabaya\” ada di HashSet \t : “+  HS.contains(“Surabaya”));
System.out.println(“Item \”Magelang\” ada di HashSet \t : “+ HS.contains(“Magelang”));
HS.remove(“Surakarta”);
System.out.println(“Item \”Surakarta\” dihapus \t : ” + HS);
HS.removeAll(HS);
System.out.println(“Hapus Seluruh Kota \t : ” + HS);
System.out.println(“Daftar Kota Setelah Dihapus? \t : ” +  HS.isEmpty());
}
}
B. HASIL PROGRAM HashSet
Has
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).
A. CODING PROGRAM LinkedHashSet
import java.util.LinkedHashSet;
public class LinkedHashSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedHashSet<String> linkedset = new LinkedHashSet<String>();
linkedset.add(“Jayapura”);
linkedset.add(“Jakarta”);
linkedset.add(“Bali”);
linkedset.add(“Aceh”);
linkedset.add(“Manado”);
System.out.println(“Jumlah Kota= ” + linkedset.size());
System.out.println(“Daftar Kota: ” + linkedset);
System.out.println(“Hapus Jakarta Dari Daftar Kota: ” a  + linkedset.remove(“Jakarta”));
System.out.println(“Hapus Medan:” + linkedset.remove(“Medan”));
System.out.println(“Cek Kota Manado=” + linkedset.contains(“Manado”));
System.out.println(“Daftar Kota Sekarang: ” + linkedset);
}
}
B. HASIL PROGRAM LinkedHahSet :
LHS
TreeSet :
Objek bertipe TreeSet memiliki sifat di mana elemen-elemennya terurut dalam urutan menaik. Iterator dari suatu TreeSet akan mengunjungi elemen dalam set tersebut dalam urutan menaik. TreeSet tidak bisa menyimpan semua objek, karena objek yang disimpan harus bisa diurutkan.
A. CODING PROGRAM TreeSet :
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet tSet = new TreeSet();
tSet.add(“Palembang”);
tSet.add(“Prabumulih”);
tSet.add(“Pagaralam”);
tSet.add(“Lahat”);
tSet.add(“Muara Enim”);
System.out.println(“Kota dan Kabupaten Di Sumatera Selatan \t : ” + tSet);
System.out.println(“Kota Prabumulih Ada? \t : “+ tSet.contains(“Prabumulih”));
System.out.println(“Total Kota Di Sumatera Selatan \t : ” + tSet.size());
tSet.remove(“Lahat”);
System.out.println(“Hapus Kota \”Lahat\” deleted\t : ” + tSet);
tSet.clear();
System.out.println(“Daftar Kota Setelah Dibersihkan \t : ” + tSet);
}
}
B. HASIL PROGRAM TreeSet 
TS
X.  MAPS :
Map juga dapat menampung beragam tipe data. Berbeda dengan List dan Set, Map hanya bisa menyimpan data secara berpasangan yang terdiri atas ‘key’ dan ‘value’. Dalam Map, nilai key tidak boleh ada yang sama. Apabila kita memasukkan value dengan key yang sama, maka hanya value terakhirlah yang disimpan dalam Map.
A. CODING PROGRAM MAPS :
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Maps1Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map<Integer, String> mapInt_String = new HashMap<Integer,String>();
mapInt_String.put(1, “Bandung”);
mapInt_String.put(2, “Jakarta”);
mapInt_String.put(3, “Yogyakarta”);
mapInt_String.put(4, “Semarang”);
mapInt_String.put(5, “Surabaya”);
for (Iterator<String> iterator = mapInt_String.values().iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string);
}
Map<String, String> mapString_String = new HashMap<String, String>();//map<String, String>
mapString_String.put(“Kota Palembang”, “Sumatera Selatan”);
mapString_String.put(“Kota Padang”, “Sumatera Barat”);
mapString_String.put(“Kota Medan”, “Sumatera Utara”);
mapString_String.put(“Kota Bandar Lampung”, “Lampung”);
mapString_String.put(“Kota Aceh”, “Nangroe Aceh Darussalam”);
System.out.println(“========================================”);
for (Iterator<String> iterator = mapString_String.values().iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string);
}
System.out.println(“========================================”);
for (Iterator<String> iterator = mapString_String.keySet().iterator(); iterator.hasNext();) {
String string = iterator.next();
System.out.println(string + ” Berasal Dari Provinsi ” + mapString_String.get(string));
}
}
}
B. HASIL PROGRAM MAPS
M
XI. TREE OBJECT :
Tree dalam pemrograman merupakan struktur data yang tidak linear / non linear yang digunakan terutama untuk merepresentasikan hubungan data yang bersifat hierarkis antara elemen-elemennya. Kumpulan elemen yang salah satu elemennya disebut dengan root (akar) dan sisa elemen yang lain disebut sebagai simpul (node/vertex) yang terpecah menjadi sejumlah himpunan yang tidak saling berhubungan satu sama lain, yang disebut subtree / cabang.
 A. CODING PROGRAM TREE OBJECT :
//add three libraries after package and before ClassName
import javax.swing.*;
import java.awt.BorderLayout;
import java.util.*;
public class Tree extends JFrame {
/**
* @param args
*/
String[][] Data = {
{“Sumatera Selatan”}, {“Palembang”, “Prabumulih”,”Pagaralam”,”Lahat”},
{“Sumatera Barat”}, {“Agam”, “Dharmasraya”, “Padang Pariaman”,”Solok”,”Bukit Tinggi”,”Padang”},
{“Sumatera Utara”}, {“Deli Serdang”, “Asahan”, “Medan”,”Langkat”},
};
public Tree(){
super(“Indonesia”);
setSize(250, 450);
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) {
// TODO Auto-generated method stub
Tree object = new Tree();
object.init();
object.setVisible(true);
}// main
}// class
B. HASIL PROGRAM TREE OBJECT
treeobject
XII. GRAPH  :
Graph adalah kumpulan noktah (simpul) di dalam bidang dua dimensi yang dihubungkan dengan sekumpulan garis (sisi). Graph dapat digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Representasi visual darigraphadalah dengan menyatakan objek sebagai noktah, bulatan atau titik (Vertex), sedangkan hubungan antara objek dinyatakan dengan garis (Edge).
G = (V, E)
Dimana
G = Graph
V = Simpul atau Vertex, atau Node, atau Titik
E = Busur atau Edge, atau arc
Graph merupakan suatu cabang ilmu yang memiliki banyak terapan. Banyak sekali struktur yang bisa direpresentasikan dengan graf, dan banyak masalah yang bisa diselesaikan dengan bantuan graf. Seringkali graf digunakan untuk merepresentasikan suaru jaringan. Misalkan jaringan jalan raya dimodelkan graf dengan kota sebagai simpul (vertex/node) dan jalan yang menghubungkan setiap kotanya sebagai sisi (edge) yang bobotnya (weight) adalah panjang dari jalan tersebut.
Ada beberapa cara untuk menyimpan graph di dalam sitem komputer. Struktur data bergantung pada struktur graph dan algoritma yang digunakan untuk memmanipulasi graph. Secara teori salah satu dari keduanya dapat dibedakan antara struktur list dan matriks, tetapi dalam penggunaannya struktur terbaik yang sering digunakan adalah kombinasi keduanya.
  • Graph tak berarah (undirected graph atau non-directed graph) :
  • Urutan simpul dalam sebuah busur tidak dipentingkan. Misal busur e1 dapat disebut busur AB atau BA
  • Graph berarah (directed graph) :
  • Urutan simpul mempunyai arti. Misal busur AB adalah e1 sedangkan busur BA adalah e8.
  • Graph Berbobot (Weighted Graph)
  • Jika setiap busur mempunyai nilai yang menyatakan hubungan antara 2 buah simpul, maka busur tersebut dinyatakan memiliki bobot.
  • Bobot sebuah busur dapat menyatakan panjang sebuah jalan dari 2 buah titik, jumlah rata-rata kendaraan perhari yang melalui sebuah jalan, dll.





Sumber : https://juliandhestarickoadesyaputra.wordpress.com/struktur-data/
               
               https://rumahradhen.wordpress.com/materi-kuliahku/semester-iii-2/struktur-data/pengenalan-struktur-data/

               https://sumbersinau.wordpress.com/2013/04/30/algoritma-dan-struktur-data-tree/