Selasa, 31 Maret 2020

Rangkuman Mid Semester II

Hai, jadi kali ini saya akan merangkum keseluruhan materi yang sudah dibahas sampai Mid Semester ini.

Pointer 

Setiap variabel yang kita buat pada program akan memiliki alamat memori.

Alamat memori berfungsi untuk menentukan lokasi penyimpanan data pada memori (RAM).

Alamat memori biasnya direpresentasikan dalam bilangan heksa desimal.

Nah, Pointer adalah sebuah variabel berisi alamat memori dari variabel yang lain.
Ada beberapa langkah yang harus dilakukan saat menggunakan pointer:
  1. Membuat pointer
  2. Mengisinya dengan alamat memori
  3. Mengakses nilai dari pointer
Pointer di C sangat familiar dengan asteris atau *. Berikut beberapa cara mendeklarasikan pointer.

int *nama_pointer;
double *nama_pointer;
float *nama_pointer;
char *nama_pointer;

Pointer sangat krusial dalam struktur data. Karena seperti yang kita ketahui, bahwa seluruh struktur data memerlukan pointer untuk melakukan maintanance data dan tracking.

Linked List

Linked List adalah bagian dari Struktur Data Linked list atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memliki field yang menyimoan alamat/ referensi dari record selanjutnya (dalam urutan) elemen data yang dihubungkan dengan link pada linked list disebut Node.

Biasanya didalam suatu lnked list, terdapat istilah head and tail.
  • Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
  • Tail adalah element yang berada pada posisis terakhir dalam suatu linked list
Ada beberapa macam Linked List, yaitu :
  • Single Linked List
  • Single Linked List adalah sekumpulan record atau umumnya kita kenal juga sebagai node yang saling terhubung melalui pointer pada masing-masing record.
Single Linked List

    Single Linked List pada umumnya memiliki 2 pointer yang berfungsi  sebagai paramater untuk memudahkan saat memroses record. Pointer yang pertama yaitu Head, pointer yang menunjuk ke record paling pertama dan Tail, yaitu pointer yang menunjuk ke record paling akhir. Dalam Single Linked List, record paling akhir atau Tail selalu menunujuk ke NULL yang menandakan tidak ada record selanjutnya.




  • Circular Single Linked List
  • Circular Single Linked List pada dasarnya adalah Single Linked List yang pointer Tail (pointer terakhir) dari linked list tersebut selalu menunjuk ke Head (pointer pertama) dari linked list itu sendiri. Sehingga kalau digambarkan / dibayangkan, linked list tersebut membentuk sebuah loop karena itulah linked list tersebut dinamakan Circular. Berbeda dari Single Linked List, Circular Single Linked List pada praktiknya tidak akan memiliki pointer yang menyimpan nilai NULL, karena semuanya saling terkoneksi membentuk loop.

    Circular Single Linked List

  • Double Linked List
  • Double Linked List memiliki konsep yang sama dengan Single Linked List, yang membedakan adalah jumlah pointernya. Pada Single Linked List, setiap pointer hanya memiliki satu pointer didalamnya untuk menyimpan alamat dari record selanjutnya. Sementara pada Double Linked List, setiap pointer punya dua pointer didalamnya yang berfungsi untuk menyimpan alamat dari record sebelumnya dan alamat dari record selanjutnya. 

    Double Linked List

    Contoh codingan :

    struct mahasiswa{
    char nama[100];
    int no_urut;
    mahasiswa *next, *prev;
    }*head, *tail;

    Seperti yang sudah saya jelaskan sebelumnya, pada codingan Double Linked List, terdapat dua pointer berupa next dan prev. Sementara, pada codingan Single Linked List, pasti hanya memiliki satu pointer berupa next.

  • Circular Double Linked List
  • Di atas sudah saya jelaskan bahwa perbedaan Circular Single Linked List dengan Single Linked List hanya terletak pada tail saja yaitu tail memiliki pointer next yang tidak NULL melainkan menunjuk ke head. Maka untuk Circular Double Linked List pun demikian, hanya saja sekarang konsep Single Linked List nya dirubah menjadi Double Linked. Berikut saya beri gambarannya.
Circular Double Linked List

Hash Table

Hash Table Hash table merupakan salah satu struktur data yang digunakan dalam penyimpanan data sementara. Tujuan dari hash table adalah untuk mempercepat pencarian kembali dari banyak data yang disimpan. Hash table menggunakan suatu teknik penyimpanan sehingga waktu yang dibutuhkan untuk penambahan data (insertions), penghapusan data (deletions), dan pencarian data (searching) relatif lebih cepat dibanding struktur data atau algoritma yang lain.

Pada Hash Table, kita akan mengenal suatu fungsi sederhana yang peranannya sangat esensial pada Hash Table. Fungsi tersebut adalah Hash Function. Apa sih Hash Function itu? Hash Function adalah fungsi yang memuat Hashing di dalamnya yang peranannya untuk mengubah value dari data yang akan disimpan, menjadi key value yang nantinya akan digunakan sebagai index untuk menyimpan data tersebut dalam struktur data. Mengapa kita membutuhkan Hash Function sih? Karena, prinsip Hash table sendiri adalah menggunakan memori penyimpanan utama berbentuk array dengan tambahan algoritma untuk mempercepat pemrosesan data. Pada intinya hash table merupakan penyimpanan data menggunakan key value yang didapat dari nilai data itu sendiri. Jadi, Hash Function sangat dibutuhkan dalam Hash Table dan justru inilah yang membedakannya dengan struktur penyimpanan lainnya.

Hashing

Secara singkat, Hasing adalah Transformasi aritmatik sebuah data menjadi nilai yang merepresentasikan diri aslinya. Data tersebut bisa beragam, misalnya bisa saja ID, Nama, Nomor Kependudukan, bisa String, Integer, dan seterusnya. Intinya, apapun itu yang unik dari sebuah data, bisa di convert menjadi key melalui Hashing. Hashing sendiri merupakan sebuah aksi yang menjadi bagian dari Hash Function.

Binary Tree

Binary Tree adalah tree dengan syarat bahwa tiap node hanya memiliki boleh maksimal dua subtree dan kedua subtree tersebut harus terpisah. Sesuai dengan definisi tersebut, maka tiap node dalam binary tree hanya boleh memiliki paling banyak dua anak / child.
Binary Tree

Dalam implementasi nya, Binary Tree digunakan sebagai sebuah sorted data structure, salah satu contohnya Binary Search Tree. Akan saya beri sedikit gambaran dalam codingannya.

Contoh Codingan deklarasi Binary Search Tree :

 Struct node {
 int value;
 node *left, *right; 
 }*root;

Konsep Linked List sangat terpakai di sini, hanya perlu penyesuain di beberapa syarat tree saja. Namun, untuk insertion, searching, ataupun deletion akan ada perbedaan yang cukup signifikan dengan Linked List.

Binary Search Tree


Binary Search Tree atau BST adalah salah satu implementasi struktur data dinamis yang non-linear dalam bentuk binary tree yang datanya dalam kondisi terurut atau sorted. BST memungkinkan proses pencarian, penambahan, ataupun penghapusan data menjadi lebih cepat dengan rata-rata kompleksitas waktu O(log n) walaupun dalam kondisi tertentu, dapat memiliki kompleksitas O(n) atau sama seperti kompleksitas struktur data linear. Hal tersebut dapat terjadi apabila Binary Tree yang terbentuk tidak seimbang atau menjadi Skewed Binary Tree (bentuk yang sudah dijelaskan di pertemuan sebelumnya). Efisiensi Binary Search Tree dapat dilakukan dengan banyak cara salah satunya AVL, namun di pertemuan kali ini kita hanya akan membahas Binary Search Tree dan operasi-operasi yang dimilikinya.
Binary Search Tree



Kesimpulan yang bisa saya ambil dari materi Mid Semester ini adalah bahwa dalam struktur data semuanya saling terkait dan saling mencukupi satu sama lain. Sebuah Binary Search Tree tidak akan dapat berdiri sendiri tanpa konsep Linked List. Sementara Hash Table tidak akan berjalan tanpa konsep Hashing.  Kemudian, dalam struktur data, konsep pointer sangatlah krusial seperti yang saya jelaskan sebelumnya, Karena dalam struktur data, kita mencari cara paling baik dalam mengelola sebuah data. Banyak bentuk struktur data yang bisa saja diterapkan, namun kita sebagai programmer harus mengenali struktur data mana yang paling cocok digunakan dalam mengelola sebuah record. Misalnya, kita mau menerima input dari sebuah database besar, nah kita harus memikirkan efisiensinya. Dalam konteks ini, menurut saya struktur data tree akan lebih efisien digunakan daripada Hash Table atau Linked List. Jadi, kita harus paham betul seluruh konsep dalam struktur data sebelum mengimplementasikannya. Sekian dari penjelasan dan kesimpulan yang bisa saya ambil.

Tidak ada komentar:

Posting Komentar