Kamis, 19 Maret 2020

DASTRUK

Hashing Table and Binary Tree



Hashing Data Structure


Hashing is an important Data Structure which is designed to use a special function called the Hash function which is used to map a given value with a particular key for faster access of elements. The efficiency of mapping depends of the efficiency of the hash function used.
Let a hash function H(x) maps the value x at the index x%10 in an Array. For example if the list of values is [11,12,13,14,15] it will be stored at positions {1,2,3,4,5} in the array or Hash table respectively.


Hashing benar-benar mendasar dalam penciptaan teknologi blockchain. Jika seseorang ingin memahami apa itu blockchain, mereka pasti harus mengerti apa artinya hashing.
Binary Tree Binary Tree adalah tree dengan syarat bahwa tiap node hanya boleh memiliki 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 child.

Operasi-operasi pada Binary Tree : 1. Create : Membentuk binary tree baru yang masih kosong. 2. Clear : Mengosongkan binary tree yang sudah ada. 3. Empty : Function untuk memeriksa apakah binary tree masih kosong. 4. Insert : Memasukkan sebuah node ke dalam tree. Ada tiga pilihan insert: sebagai root, left child, atau right child. Khusus insert sebagai root, tree harus dalam keadaan kosong. 5. Find : Mencari root, parent, left child, atau right child dari suatu node. (Tree tak boleh kosong) 6. Update : Mengubah isi dari node yang ditunjuk oleh pointer current. (Tree tidak boleh kosong) 7. Retrieve : Mengetahui isi dari node yang ditunjuk pointer current. (Tree tidak boleh kosong) 8. DeleteSub : Menghapus sebuah subtree (node beserta seluruh descendantnya) yang ditunjuk current. Tree tak boleh kosong. Setelah itu pointer current akan berpindah ke parent dari node yang dihapus. 9. Characteristic : Mengetahui karakteristik dari suatu tree, yakni : size, height, serta average lengthnya. Tree tidak boleh kosong. (Average Length = [jumlahNodeLvl1*1+jmlNodeLvl2*2+…+jmlNodeLvln*n] / Size) 10. Traverse : Mengunjungi seluruh node-node pada tree, masing-masing sekali. Hasilnya adalah urutan informasi secara linier yang tersimpan dalam tree. Ada tiga cara traverse : Pre Order, In Order, dan Post Order.

Sabtu, 29 Februari 2020

Data Structure

1   PENJELASAN DARI LINKED LIST

Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam suatu linked list, terdapat istilah head dan tail. 

·                     Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
·                     Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list

Ada beberapa macam Linked List, yaitu :
1.                 Single Linked List
2.                 Double Linked List
3.                 Operasi Pada Single Linked List

Single Linked List
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.

Double Linked List
Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.

Operasi Pada Single Linked List 

1.     Insert = Istilah  Insert berarti menambahkan  sebuah  simpul baru ke dalam  suatu linked  list.
2.     Konstruktor = Fungsi ini membuat sebuah  linked  list yang baru dan masih kosong. 
3.     IsEmpty = Fungsi ini menentukan apakah  linked list kosong atau  tidak.
4.     Find First = Fungsi ini mencari elemen pert ama dari linked  list 
5.     Find Next = Fungsi ini mencari elemen  sesudah elemen yang ditunjuk now. 
6.     Retrieve = Fungsi  ini  mengambil  elemen  yang  ditunjuk  oleh  now.  Elemen  tersebut  lalu dikembalikan oleh fungsi. 
7.     Update = Fungsi ini mengubah elemen yang ditunjuk oleh  now dengan  isi dari  sesuatu. 
8.     Delete Now = Fungsi  ini  menghapus  elemen  yang  ditunj uk  oleh  now.  J ika  yang  dihapus  adalah elemen pertama dari  linked  list (head), head akan berpindah ke elemen berikut. 

 2. JELASKAN FUNGSI STACK

Pengertian Stack
    Stack adalah metode atau teknik dalam menyimpan atau mengambil data ke dan dari memori. Stack dapat diibaratkan sebuah tumpukan dalam suatu tempat yang hanya memiliki suatu pintu diatasnya. kaidah stack adalah First In Last Out atau Last In First Out (LIFO), benda yang terakhir masuk akan menjadi benda yang pertama dikeluarkan.

   Stack dengan Array
     Sesuai dengan sifat stack, maka pengambilan atau penghapusan elemen dalam stack harus dimulai dari elemen teratas. Ilustrasinya sebagai berikut:
     Dapat dilihat dalam visualisasi stack degan array, dimna index array ke-1 diisi oleh TV, index ke-2 diisi oleh VCD dan index ke-3 diisi oleh COMBO. TOP  dianggab sebagai puncak dari stack. Harus diingat bahwa banyak stack yang mungkin harus dibatasi karena alokasi memory pada array yang bersifat statis dan terbatas.

   Double stack dan Array
     Dauble stack dan array adalah teknik khusus yang digunakan untuk menghemat pemakaian memory dalam pembuatan dua stack dengan array. intinya adalah pengguna hanya sebuah array untuk menampung dua stack.
     keterangan: Array dapat dibagi untuk 2 stack, stack 1bergerak ke kanan dan stack 2 bergerak ke kiri. Jika Top 1 (elemen teratas dari stack 1) bertemu dengan Top 2 (elemen teratas dari stack 2) maka double stack telah penuh.

   Stack dengan Single Linked List


     Linked list memiliki keunggulan dibanding array yaitu dalam penggunaan alokasi memory. Dengan menggunakan linked list maka tempat yang disediakan akan sesuai dengan banyaknya elemen yang mengisi stack linked list tidak loco ada istilah full sebab biasanya program tidak menetukan jumlah elemen stack yang mungkin ada kecuali juka suda dibatasi oleh pembuatnya. Namun sebenarnya stack ini pun memiliki batas kapasitas, yakni di batasi oleh jumlah memory yang tersediah

Linked List

Linked List atau dikenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memiliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan). Elemen data yang dihubungkan dengan link pada Linked List disebut Node. Biasanya didalam suatu linked list, terdapat istilah head dan tail. 
  • Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
  • Tail adalah elemen yang berada pada posisi terakhir dalam suatu linked list

Ada beberapa macam Linked List, yaitu :
  1. Single Linked List
  2. Double Linked List
  3. Circular Linked List
  4. Multiple Linked List

Single Linked List

Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL.
contoh :

contoh codingannya :

struct Mahasiswa{
      char nama[25];
      int usia;
      struct Mahasiswa *next;
}*head,*tail;



Double Linked List

Double Linked List merupakan suatu linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunjuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL.

contoh :

contoh codingannya :

struct Mahasiwa{
     char nama[25];
     int usia;
     struct Mahasiswa *next,*prev;
}*head,*tail;

Circular Linked List

Circular Linked List merupakan suatu linked list dimana tail (node terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang menunjuk NULL. Ada 2 jenis Circular Linked List, yaitu :
  • Circular Single Linked List

  • Circular Double Linked List

Multiple Linked List

Multiple Linked List merupakan suatu linked list yang memiliki lebih dar 2 buat variabel pointer. contoh :

Linked List Vs Array



Memory Allocation

Dalam C/C++, alokasi memory dapat dilakukan dengan menggunakan malloc , sedangkan untuk dealokasi dapat menggunakan free. Fungsi free hanya membebaskan memory tetapi tidak menghapus isi dari memory tersebut. 

contoh penggunaan malloc:

int *px = (int *) malloc(sizeof(int));
char *pc = (char *) malloc(sizeof(char));
struct Facebook *curr = (struct Facebook*) malloc(sizeof(struct Facebook));


contoh penggunaan free:

free(curr);

    Alokasi suatu memory biasanya dibutuhkan didalam linked list saat akan menambah node/data baru.

    Insert dan Delete Node dalam Single Linked List

    Insert (push) dan delete (pop) node pada linked list dapat dilakukan pada posisi depan (head), tengah (mid) dan belakang (tail)

    Insert (Push)

    Contoh codingan push depan :



    Contoh codingan push belakang :


    Delete (Pop)

    Contoh codingan pop depan :



    Contoh codingan pop belakang :


    Insert dan Delete Node dalam Double Linked List

    Insert (push) dan delete (pop) node pada linked list dapat dilakukan pada posisi depan (head), tengah (mid) dan belakang (tail)


    Insert (Push)

    Contoh codingan push depan :



    Contoh codingan push belakang :


    Delete (Pop)

    Contoh codingan pop depan :


    Contoh codingan pop belakang :


    Header Linked List

    Selain ke-4 jenis Linked List diatas, ada juga jenis lain yaitu header linked list. Header linked list merupakan header spesial yang terdiri dari node headernya. Jadi, linked list jenis ini tidak menunjuk pada node pertama (head) namun hanya menyimpan alamat dari node headernya.

    Priority Queue

    Priority Queue mirip dengan queue biasa yang telah dijelaskan pada Array, Pointer dan Struktur Data yang dipost sebelumnya. Hanya saja queue ini di urutkan berdasarkan prioritasnya. Misalnya kita ingin membuat queue berdasarkan umur yang paling muda ke tua. Maka umur menjadi prioritas. Penyusunan node ini mungkin mirip seperti sorting.

    contoh codingan priority queue :