REVIEW STRUKTUR DAN ORGANISASI DATA

 

Review Mandiri Matkul Struktur Data

 

pengenalan data structure,kegunaan data structure dan penjelasan mengenai Array (Pertemuan 1)

Apa itu Struktur Data?

Struktur data adalah cara menyimpan dan mengatur data secara terstruktur pada sistem komputer atau database sehingga lebih mudah diakses. Secara teknis, data dalam bentuk angka, huruf, simbol, dan lainnya ini diletakkan dalam kolom-kolom dan susunan tertentu.

Dalam menyusun data, terdapat beberapa istilah yang perlu Anda pahami, yaitu node dan indeks. Berikut adalah penjelasan tentang kedua istilah tersebut.

  • Node, yaitu elemen yang terdapat dalam struktur data. Setiap node berisi pointer ke node selanjutnya.
  • Indeks, yaitu objek dalam sistem database yang bisa mempercepat proses pencarian data. 

Struktur data bisa digunakan untuk mengelola database, melakukan kompres file, hingga mengolah data lainnya. Praktis, struktur ini menjadi hal yang harus dipelajari karena dapat membantu Anda untuk menyatukan berbagai elemen data secara efektif. Apalagi, struktur data juga akan mempengaruhi ketepatan algoritma suatu program.

Kegunaan Struktur Data

Dalam pemrograman, struktur data memiliki banyak kegunaan. Hal inilah yang membuat banyak orang tertarik untuk belajar pemrograman.

  • Membuat proses pemrograman yang mudah. Struktur data bisa digunakan untuk membuat perintah dengan bahasa pemrogram dengan lebih mudah. 
  • Menyimpan dan mengatur data. Mudah menyimpan dan mengatur data secara efisien, rapi, dan terorganisir.
  • Pertukaran data. Anda bisa membagikan informasi dengan cepat dan mudah walaupun dilakukan antar aplikasi.
  • Meningkatkan kualitas algoritma. Struktur data bisa berpengaruh ke tingkat efektivitas  algoritma.
  • Mengantisipasi Masalah Coding. Masalah ketika coding bisa selesai lebih cepat dengan menggunakan struktur data. Hal ini karena kesalahan atau error bisa segera ditemukan.
  • Mengelola sumber daya dan layanan. Sumber daya dan layanan dalam sistem operasi bisa diatur melalui struktur data. Struktur data dalam konteks ini biasanya memuat manajemen direktori file, alokasi memori, dsb.
  • Pengindeksan. Struktur data bisa digunakan untuk mengindeks objek yang disimpan dalam database.
  • Searching. Indeks yang terdapat pada struktur data akan mempercepat proses pencarian data tertentu.
  • Skalabilitas. Struktur data dipakai untuk mengalokasikan dan mengelola penyimpanan data di seluruh lokasi penyimpanan. Dengan begitu, suatu aplikasi big data bisa terjamin performa dan kemampuan upgrade-nya.

 

Array

Array mempunyai kumpulan elemen yang jaraknya saling berdekatan. Array dapat membantu seseorang untuk mencari data secara acak hanya menggunakan indeksnya. 

Kapasitas elemen yang dapat dialokasikan pada tipe array bersifat statis. Jika Anda ingin menyisipkan elemen baru ke array, maka harus membuat array baru dengan ukuran yang lebih besar. Sebaliknya, jika ingin menghapus elemen tertentu, Anda harus membuat array baru dengan ukuran yang lebih kecil.

Selain itu, array juga memungkinkan Anda untuk menyimpan beberapa data dengan jenis yang sama dalam satu nama. Tipe array biasa digunakan untuk membangun struktur data, seperti vektor dan matriks.

 

Keunggulan tipe array:

  • Bisa digunakan sebagai implementasi tipe lainnya, seperti queue dan stack.
  • Proses pencarian data bisa dilakukan lebih cepat.

Kekurangan tipe array:

  • Penambahan dan pengurangan data membutuhkan waktu yang lebih lama karena tipe array menampung data secara berurutan.

Contoh Codingan Array :

public class SortingSearching {

            static void sort(int[] angka) {

        for (int i = 0; i < angka.length; i++) {

            for (int j = 0; j < angka.length-1; j++) {

                if (angka[j] > angka [j + 1]) {

                    int wadah = angka [j];

                    angka [j] = angka [j+1];

                    angka [j+1] = wadah;

                }

            }

        }

    }

    static int Search(int[]angka, int cari, int i, int j) {

        int tengah;

        while (i <= j) {

            tengah = (i+j)/2;

            if (cari == angka[tengah]) return tengah;

            else if(cari<angka[tengah]) j = tengah - 1;

            else i = tengah + 1;

        }

        return - 1;

    }

    public static void main (String[] args) {

        int[] angka = {5,10,7,3,8,4,9,1,2,13,15,11,14,12};

        System.out.println("====== Di bawah adalah list angka ======");

        sort(angka);

 

        for (int i = 0; i < angka.length; i++) {

            System.out.print(angka[i] + " "

        }

        System.out.println("");

        int cari = 50;

        int hasil = Search(angka, cari, 0, angka.length-1);

        if (hasil >= 0) {

            System.out.println("");

            System.out.println("Angka yang di cari adalah angka " + cari);

            System.out.println("Angka ketemu di indeks ke-" + hasil);

        }

        else

            System.out.println("");

            System.out.println("Angka yang di cari adalah angka " + cari);

            System.out.println("Angka tidak ditemukan");

    }

}

konsep dan implementasi linkedlist (pertemuan 2)

Linked list adalah struktur data yang terdiri dari urutan data linier yang dihubungkan satu sama lain. Saat menggunakan tipe linked list, Anda harus mengakses data secara manual. Hal ini karena Anda tidak bisa mencari data dengan sistem acak.

Keunggulan tipe linked list:

  • Ukuran lebih dinamis.
  • Alokasi penggunaan memori bisa Anda sesuaikan dengan kebutuhan.
  • Penambahan atau pengurangan data lebih cepat.

Kekurangan tipe linked list:

  • Menguras memori yang lebih besar.
  • Tidak bisa kembali ke node sebelumnya (reverse traversal), kecuali pada jenis doubly linked list.
  • Proses traversal lebih panjang karena tidak langsung mengakses data dengan indeks.

Contoh Codingan linked list :

import java.util.Iterator;

import java.util.LinkedList;

public class App {

    public static void main(String[] args) throws Exception {

        LinkedList linkedList = new LinkedList<Integer>();

        // insert / add

        linkedList.add(5);

        linkedList.add(4);

        linkedList.add(9);

        boolean ketemu = linkedList.contains(4);

        if (ketemu == true) {

            System.out.println("Data 4 ketemu di linked list");

        }

        // display data

        Iterator<Integer> iterator = linkedList.iterator();

        while (iterator.hasNext()) {

            System.out.println(iterator.next());

        }

        // remote tail

        linkedList.removeLast();

        // get tail

        System.out.println(linkedList.getLast());

    }

}


 

konsep stack dan implementasi stack (pertemuan 3)

Pengertian Stacks Stack/Tumpukkan adalah struktur data linier yang mengikuti urutan tertentu di mana operasi dilakukan. Insert(penyisipan) dan remove(penghapusan) data ada pada satu akhir yang sama Stacks memakai strategi LIFO (Last In First Out). Strategi ini adalah elemen yang di sisipkan paling terakhir adalah dia yang akan dikeluarkan pertama kali Ada banyak sekali contoh stack di kehidupan nyata kita. Contohnya Tumpukkan kursi chitose

 

Keunggulan tipe stack:

  • Dapat mengelola data secara efisien.
  • Bisa membersihkan objek secara otomatis.
  • Dapat mengontrol memori dengan mandiri.

Kekurangan tipe stack:

  • Kapasitas memori yang sangat terbatas.
  • Kemungkinan terjadi overflow ketika jumlah objek terlalu banyak.
  • Tidak dapat mengakses data secara acak.

 

Stack mempunyai beberapa function :

·         push() untuk menyisipkan elemen pada stack

·         pop() untuk menghapus sebuah elemen pada stack

·         top() untuk mengetahui elemen paling atas

·         isEmpty() untuk mengetahui apakah stack kosong

·         size() untuk mengetahui ukuran stack

·

Contoh Codingan Stack:

public class Stack {
    static final int MAX = 1000;
    int top;
    String a[] = new String[MAX];
    public Stack() {
        top = -1;
    }
    public void push(String x){
        if (top >= (MAX - 1)) {
            System.out.println("Stack Overflow");
        } else {
            a[++top] = x;
            System.out.println(x + " Dimasukan ke dalam stack");
        }
    }
    public String pop() {
        String x;
        x = a[top--];
        return x;
    }
    public String top() {
        String x;
        x = a[top];
        return x;
    }
    public int size() {
        return top +1;
    }
    public boolean isEmpty() {
        return top <= 0;
    }
    public static void main(String[] args) {
        Stack stack = new Stack();
        System.out.println("Apakah stack kosong? " + stack.isEmpty());
        System.out.println();
        stack.push("luffy");
        stack.push("Zoro");
        stack.push("Nami");
        stack.push("Ussop");
        stack.push("Sanji");
        stack.push("Chopper");
        stack.push("Robbin");
        stack.push("Franky");
        stack.push("Brook");
        stack.push("Jinbe");
        System.out.println();
        System.out.println("Top : " + stack.top());
        System.out.println("Size : " + stack.size());
        System.out.println("Popped: " + stack.pop());
        System.out.println("Top : " + stack.top());
    }
}


 

konsep Queue dan implementasi Queue (pertemuan 4 & 5)

Apa itu Queue, Queue adalah salah satu implementasi dari linked list. Queue menerapkan konsep FIFO (First In First Out) atau FCFS (First Come, First Serve). Berbeda dengan Stack yang menerapkan konsep LIFO (Last In, First Out). Simplenya, yaa seperti jika kita mengantri untuk membeli sesuatu. Begitulah konsep dari Queue. Untuk Lebih jelasnya, mari kita perhatikan gambar berikut ini.

·         Front: adalah kepala dari antrian (titik di mana antrian dimulai)

·         Back: adalah ekor dari antrian (titik akhir dari antrian)

·         Enqueue: proses menambahkan satu value ke dalam antrian

·         Dequeue: proses mengeluarkan satu value dari antrian

Dapat kita perhatikan dari gambar di atas, bahwa queue memiliki limitasi dalam storage-nya. Itulah kenapa disebut queue, yang berarti antrian. Yakni suatu manajemen penyimpanan sementara untuk menunggu ketika value di depannya sedang di proses. Dalam komputer pun juga ada antrian, namun karena kecepatan proses sangat cepat, jadi seolah olah seluruh instruksi dijalankan bersama – sama.

Keunggulan tipe queue:

  • Data yang masuk akan dilayani sesuai urutannya.
  • Proses antrean data lebih cepat dan optimal.
  • Menangani beberapa tipe data sekaligus.

Kekurangan tipe queue:

  • Jika waktu pelayanan habis, maka data yang terakhir masuk tidak bisa dilayani.
  • Proses yang rumit saat harus menambah atau menghapus elemen dari tengah.
  • Butuh waktu lama untuk mencari antrean.

 

Contoh Codingan Queue :

public class Queue {

    // capacity adalah kapasitas yang bisa collection tampung

    // size adalah jumlah elemen pada queue keadaan sekarang

    int capacity, size;

    int front, rear;

    String[] elements;

    // constructor

    public Queue(int capacity) {

        this.capacity = capacity;

        size = 0;

        front = size;

        rear = capacity - 1;

        elements = new String[capacity];

    }

    public boolean isFull() {

        return capacity == size;

    }

    public boolean isEmpty() {

        return size == 0;

    }

    public void enqueue(String e) {

        if (isFull()) {

            System.out.println("Queue is Full, element cannot be enqueued");

            return;

        }

        rear = (rear + 1) % capacity;

        elements[rear] = e;

        size++;

        System.out.println("Element "+e+" enqueued successfully");

    }

    public void dequeue() {

        if (isEmpty()) {

            System.out.println("Queue is empty, element cannot be dequeued");

            return;

        }

        elements[front] = null;

        front = (front + 1) % capacity;

        size--;

    }

    public void showAll() {

        for (int i = 0; i < elements.length; i++) {

            System.out.println(elements[i]);

        }

    }

}

Contoh Codingan Class Main nya

public class App {

    public static void main(String[] args) {

        Queue antrianBioskop = new Queue(3);

        antrianBioskop.dequeue();

        antrianBioskop.enqueue("Andrew");

        antrianBioskop.enqueue("Elis");

        antrianBioskop.enqueue("Roman");

        antrianBioskop.enqueue("Andrew");// harusnya full

        antrianBioskop.dequeue();

        antrianBioskop.dequeue();

        System.out.println("Selesai");

    }

}

 

Komentar