Selasa, 17 Maret 2020

Binary Search Tree

Binary Search Tree

Binary Search Tree atau sering disebut Sorted Binary Tree adalah tree yang terurut. Yang berfungsi untuk menyimpan nama atau bilangan yang disimpan didalam memori. Binary Search Tree memungkinkan dengan pencarian yang cepat, penambahan dan penghapusan data.

Binary Search Tree

Ciri-ciri Binary Search Tree :
  • Setiap node mempunyai value dan tidak ada value yang double.
  • Value dikiri lebih kecil daripada root-nya.
  • Value dikanan lebih besar atau sama dengan root-nya.
  • Memiliki sifat rekrusif ( bisa memiliki child).
Cara Insert :
Insertion Binary Search TreeInsertion Example BSTInsertion BSTInsertion BST
Warna hijau adalah rootnya, dengan value 30. Warna orange adalah node baru, dengan value 35. Karena 35 > 30, maka diarahkan ke sub-tree kanan. Lalu dicek lagi 35 < 37, maka diarahkan kekiri. Lalu dicek lagi 35 > 32, maka diarahkan kekanan, karena sudah menemukan tempat untuk node baru ditulislah node baru tersebut.

Cara Delete :
Picture8Picture9
Warna orange adalah node yang ingin didelete, dengan value 37. karena 37 memiliki 2 anak, kita bisa mengambil value 35 atau 42 untuk menggantikan value 37.

Sumber :

Kamis, 12 Maret 2020

Hashing and Binary Tree

Hashing

hasing
Hashing beraarti memenggal dan kemudian menggabungkan. Hash menggunakan memori penyimpanan utama berbentuk array dengan tambahan algoritma untuk mempercepat  proses data.
Hashing digunakan sebagai metode untuk menyimpan data dalam sebuah array agar penyimpanan data, pencarian dara, penambahan data dan penghapusan data dapat dilakukan dengan cepat.
Pelacakan dengan menggunakan Hash terdiri dari dua langkah utama, yaitu :

Menghitung Fungsi Hash
Fungsi Hash adalah suatu fungsi yang mengubah key emnjadi alamat dalam tabel. Fungsi Hash menempatkan sebuah key ke suatu alamat dalam tabel. Seharusnya key - key yang berbeda ditempatkan pada alamat yang berbeda juga. Pada kenyataanya, kemungkinan besar yang terjadi adalah dua atau lebih key yang berbeda ditempatkan pada alamat yang sama dalam tabel. Peristiwa tersebut disebut collisiion / tabrakan. karena itulah diperlukan langkah berikut, yaitu collision solution / pemecahan tabrakan.

Collision Resolution
Collision resolutin merupakan proses untuk menangani 2 atau lebih key ke alamat yang sama. Dengan cara mencari lokasi yang kosong dalam tabel Hash secara terurut.



Binary Tree

Istilah dalam Tree
 Gambar
Gambar
GambarBinary Tree atau Pohon Biner adalah sebuah pohon dalam struktur data yang memiliki hubungan one to many. Tree bisa digambarkan dengan kumpulan simpul, dan setiap simpul memiliki paling banyak 2 anak. Binary tree tidak memiliki lebih dari tiga level dari Root.
Gambar
Binary tree adalah suatu tree dengan syarat bahwa tiap simpul hanya boleh memiliki dua subtree, dan kedua subtree tersebut harus dipisah. Pohon biner juga dapat disimpan sebagai struktur data implisit dalam array, dan jika pohon tersebut metupakan pohoh biner lengkap, metode ini tidak boros tempat. 










Sumber :

Sabtu, 07 Maret 2020

Lingked List (II)

Lingked List (II)

Singly Lingked List

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

Doubly Lingked List

Doubly 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 Lingked List

Insert

Penyisipan bisa dilakukan di depan (Insert First), di belakang (Insert Last), dan di tengah (Insert After dan Insert Before).


Insert First


Insert First

Penyisipan di awal list, sehingga pointer head juga akan berpindah ke elemen baru.





Insert Last

Insert Last

Penyisipan di akhir list, sehingga pointer tail juga akan berpindah ke elemen baru.

Insert after/before
Penyisipan after/before kurang lebih sama satu sama lain.

Insert After

Insert Before

Delete

Penghapusan bisa dilakukan di depan (Delete First), di belakang (Delete Last), dan ditengah (Delete After, Delete Before, dan Delete Pcari).




Delete First

Penghapusan di awal list, sehingga pointer head akan berpindah ke node selanjutnya, sementara node awal akan di dealokasi.


Delete Last

Penghapusan di akhir list, pointer tail akan berpindah node sebelumnya, sementara node akhir akan di dealokasi.



Delete Node

Penghapusan node dengan data tertentu.

Selasa, 25 Februari 2020

Linked List



Linked list adalah kumpulan item yang disebut nodes, yang terdiri dari information field dan next address field. Information field berisi satu elemen dari list, sedangkan next address field berisi alamat dari node berikutnya.

Create Node merupakan fuction yang isinya untuk mengisi lingked list, dengan cara input node pertama atau dapat disebut head. Misalnya 5, berarti head -> data = 5, karena ini Node awal jadi tidak ada Node berikutnya, sehingga dapat ditulis head -> next = NULL. Head yang sudah diinput akan ditampung didalam temp untuk proses looping.


Push Head / Menambahkan Node di Depan
Data A merupakan Node awal, karena listnya masih kosong, maka data A akan menjadi Head dan Tail. Yang dapat ditulis :
if (head==NULL){
   head = tail = newnode;
}






Untuk menambahkan node baru diawal adalah dengan cara, node baru -> next node lama , lalu awal_ptr diganti dengan node yang baru.

if(awal_ptr == NULL) { awal_ptr=baru; awal_ptr->next = NULL; } else { baru->next = awal_ptr; awal_ptr = baru; }

Menambahkan Node di Tengah
Proses penyisipan di tengah berarti proses penyisipan pada posisi tertentu.
Data E merupakan Node baru yang ingin dimasukkan menggantikan ke posisi C.
Carilah posisi yang merupakan posisi sebelum posisi penyisipan, yaitu B. Setelah itu
diberikan nama bantu, lalu sambungkan field next dari baru ke posisi next dari bantu.
Setelah itu pindahkan field next dari baru ke data baru
if(awal_ptr != NULL) { cout<<"Akan disisip setelah Data Ke ? : "; cin>>posisi_sisip; bantu=awal_ptr; baru =new node; for(int i=1;i<posisi_sisip-1;i++) { if(bantu->next != NULL) bantu=bantu->next; else break; } cout << "Masukkan Nama : "; cin >> baru->nama; cout << "Masukkan Umur : "; cin >> baru->umur; cout << "Masukkan tingggi : "; cin >> baru->tinggi; baru->next=bantu->next; bantu->next=baru; } else { cout<<"Belum ada data !! silahkan isi data dulu...."; getch();} }

Menambahkan Node di Belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya.
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.
void insertBelakang (int databaru){
  TNode *baru,*bantu;
  baru = new TNode;
  baru->data = databaru;
  baru->next = baru;
  if(isEmpty()==1){
    head=baru;
    head->next=head;
  }
  else {
    bantu = head;
    while(bantu->next != head){
      bantu=bantu->next;
    }
    bantu->next = baru;
    baru->next = head;
  }
printf(“Data masuk\n“);
}

Sumber :