pert5 - binary search tree - 2101711791 - Malik Naufal Dwiyanto

BINARY SEARCH TREE

binary search tree adalah binary tree yg di rancang untuk menskemakan urutan data yg akan dimasukkan ke dalam memori agar proses pencarian, penghapusan dan penambahan data dapat berjalan secara efisien.
sifat dari skema binary tree adalah setiap elemen yg berada pada leftsubtrees selalu lebih kecil dari rightsubtrees.

contoh: 

diketqhui sekumpulan elemen sebagai berikut:

60, 75, 25, 50, 15, 66, 33, 44

tree


tree2

pert4 - tree, binary tree, dan expression - 2101711791 - Malik Naufal Dwiyanto

TREE


merupakan salah satu bentuk struktur data yg tidak linear dan menggambarkan hubungan yg bersifat hierarkis astara data satu dengan yg lain. 
bisa disimpulkan bahwa tree merupakan kumpulan node dengan satu elemen khusus yg di sebut root.
Image result for tree data structure
contoh tree

berikut adalah istilah umum yg ada pada tree:

  • preodecessor: node yg berada diatas node tertentu.
  • successor: node yg brada di bawah node tertentu.
  • ancestor: semua node yg terletak sebelum node tertentu terletak pada jalur yg sama.
  • descendant: seluruh node tertentu yg terletak di bawah node tertentu dan ada pada satu jalur.
  • parent: predecessor di atas satu node.
  • child: successor satu node dibawah suatu node.
  • sibling: node2 yg memiliki satu parent yg sama dengan suatu node,
  • Subtree : bagian dari tree yang berupa suatu node beserta descendantnya dan memiliki semua karakteristik dari tree tersebut.
  • Size : banyaknya node dalam suatu tree.
  • Height : banyaknya tingkatan/level dalam suatu tree.
  • Root : satu-satunya node khusus dalam tree yang tak punya predecssor.
  • Leaf : node-node dalam tree yang tak memiliki seccessor
  • Degree : banyaknya child yang dimiliki suatu node


BINARY TREE

binarry tree adalah tree dengan maksimal 2 subnode di tiap nodenya.


binary tree

tipe2 binary tree:

  • perfect: binary tree dengan setiap tingkatnya memiliki kedalaman yg sama.
  • complete: binary tree yg dimana setiap tingkat, kecuali muhgkin yg terahir benar2 terisi.
  • skewed: binary tree yg setiap nodenya paling banyak memiliki satu anak.
  • balance: binary tree yg dimana tidakada leaf yg lebih jauh dari root daripada leaf lainnya.

Image result for perfect binary tree
Image result for skewed binary tree

operasi pada binary tree:

  • create: membuat binary tree baru yg masih kosong.
  • clear: mengosongkan binary tree yg sudah ada.
  • empty: function untuk memeriksa apakah binary tree tersebut masih kosong atau tidak.
  • insert: memasukkan node kedalam tree.
  • find: mencari root, parent, left child atau right child dari suatu node,
  • update: mengubah isi dari node yg di tunjuk oleh pointer.
  • retrieve: mengetahui isi dari node yg ditunjuk oleh pointer.
  • deletesub: menghapus sebuah subtree.
  • characteristic: mengetahui carakteristic suatu tree.
  • traverse: mengunjungi seluruh node-node pada tree, masing masing sekali.


EXPRESSION TREE 



prefix: *+abc
postfix: ab+c*
infix: (a+b)*c

yinggal di ubah sesuai aturan binary tree /  tree

pert3 - implementasi linked list 2 - 2101711791 - Malik Naufal Dwiyanto

KONSEP STACK

stack adalah salah satu konsep dari tipe data abstrack yg tersusun. pertama kali di ajukan dalam desain computer milik Alan M.Turing pada tahun 1946. stack atau tumpukan memiliki dua konsep dasar yaitu pop dan push.


Push: adalah proses menambahakan data ke atas suatu tumpukan.
Pop: mengambildata palimg atas dari tumpukan dan membuangnya.

kedua operasi inilah yg menjadi cirikhas sebuah stack sehingga stack bekerja secara LIFO (Last In Last Out). selain operasi pop dan push ada juga operasi peek yaitu melihat isi data paling atas tranpa membuangnya.



dalam dunia nyata stack biasa di umpamakan seperti tumpukan piring yang kalu kita mau menambah atau mengurangi tumpukanya harus di ambil/di taruh dari yg paling atas terlebih dahulu.


PREFIX INFIX DAN POSTFIX

prefix DKK adalah sebuah notasi yg terbentuk dari operand dan operator, opreand adalah data atau nilai yg membantu dalam proses, sedangkan operator adalah fungsi yg dgunakan dalam proses.

prefix: adalah notasi yg berbentuk operator ada di depan operand.
infix: adalah notasi dimana operator ada d tengah operand.
postfix: adalah notasi dimana operator ada setelah operand.



 DEPTH FIRST SEARCH DAN BREATH FIST SEARCH

DFS:
pencarian dilakukan pada satu node dalam setiap level dari yg aling kiri. jika pada level yg plaing dalam solusi belum ditemukan maka pencarian akan dillanjutkan pada node sebelah kanan. node yang kiri dapat dihapus dari memori.

BFS:
merupakan algoritma yg melakukan pencarian secara melebar yang mengunjungi simpul secara preorder yaitu mengunjungi suatu simpul tersebut terlebih dahulu. selanjutnya simpul yg belum dikunjungi yang bertetangga denagn simpul yg tadi dikunjungi demikian seterusnya.






per2 - implementasi linked list - 2101711791 - Malik Naufal Dwiyanto

DEFINISI LINKED LIST

Linked list adalah suatu cara untuk menyimpan data dengan struktur sehingga dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data yang diperlukan. Program akan berisi suatu struct atau definisi kelas yang berisi variabel yang memegang informasi yang ada didalamnya, dan mempunyai suatu pointer yang menunjuk ke suatu struct sesuai dengan tipe datanya.
Struktur dinamis ini mempunyai beberapa keuntungan dibanding struktur array yang bersifat statis. Struktur ini lebih dinamis, karena banyaknya elemen dengan mudah ditambah atau dikurangi, berbeda dengan array yang ukurannya bersifat tetap.
Manipulasi setiap elemen seperti menyisipkan, menghapus, maupun menambah dapat dilakukan dengan lebih mudah.

Contoh :

//Program:link1.cpp
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct nod {
            int data;
            struct nod *next;
} NOD, *NODPTR;

void CiptaSenarai(NODPTR *s)
{
            *s = NULL;
}

NODPTR NodBaru(int m)
{
            NODPTR n;

            n = (NODPTR) malloc(sizeof(NOD));
            if(n != NULL) {
                        n -> data = m;
                        n -> next = NULL;
}
return n;
}

void SisipSenarai (NODPTR *s, NODPTR t, NODPTR p)
{
            if (p==NULL) {
                        t -> next = *s;
                        *s = t;
            }
            else {
                        t -> next = p -> next;
                        p ->next = t;
            }
}

void CetakSenarai (NODPTR s)
{
            NODPTR ps;
            for (ps = s; ps != NULL; ps = ps -> next)
                        printf("%d -->", ps -> data);
            printf("NULL\n");
}

int main ()
{
            NODPTR pel;
            NODPTR n;

            CiptaSenarai(&pel);
            n = NodBaru(55);
            SisipSenarai(&pel, n, NULL);
            n= NodBaru(75);
            SisipSenarai(&pel, n, NULL);
            CetakSenarai(pel);
            return 0;
}

Bila program dijalankan maka :
          75->55->NULL


TEKNIK DALAM LINKED LIST

Pengulangan Linked List

Secara umum pengulangan ini dikenal sebagai while loop. Kepala pointer (head pointer) dikopikan dalam variabel lokal current yang kemudian dilakukan perulangan dalam linked list. Hasil akhir dalam linked list dengan current!=NULL. Pointer lanjut dengan current=current->next.

Contoh :

            // Return the number of nodes in a list (while-loop version)
            int Length(struct node * head) {
                        int count = 0;
                        struct node* current = head;
                        while (current != NULL) {
                                    count++;
                                    current=current->next;
                        }
                        return (count);
            }

Membuat Kepala Senarai Dengan Perintah Push()

Cara termudah untuk membuat sebuah senarai dengan menambah node pada “akhir kepala” adalah dengan push().

Contoh :

            struct node* AddAtHead() {
                        struct node* head = NULL;
                        int i;
                        for ( i=1; i<6; i++) {
                                    push (&head, i);
                        }
                        // head == { 5, 4, 3, 2, 1 };
                        return (head);
            }

Dalam membuat tambahan node pada akhir senarai (list) dengan menggunakan perintah Push(), jika terjadi kesalahan maka urutan akan terbalik.

pert1 - pointer, array, perkenalan data stuktur, dan perkenalan linked list - 2101711791 - Malik Naufal Dwiyanto

ARRAY

  • Array adalah kumpulan dari data homogen yang mempunyai index/kunci untuk setiap kontennya. 
  • Array dibagi menjadi dua jenis yaitu Array indexed dan associative.
    • Indexed artinya setiap konten di dalam Array di tandai oleh angka desimal yang berawal dari 0.
    • Sedangkan associative Array adalah Array yang setiap kontennya ditandai oleh karakter, string, atau apapun sehingga dapat di asosiasikan kontennya.
  • Array juga dibagi berdasarkan dimensinya.
    • Array 1D.
    • Array 2D.
    • Array multi dimension.
  • Maksimal data yang dapat ditampung oleh Array adalah ketika memori pada JDK java itu habis, beberapa sumber menyebutkan bahwa alokasi memori aman pada java berada pada angka 2 147 483 639 (integer.MAX_value - 8) jika mengalokasikan Array lebih besar dapat mengakibatkan OutOfMemory.
  • Operasi pada Array.
    • Transfersal.
    • Insertion.
    • Searching.
    • Deleton.
    • Merging.
    • Sorting.

POINTER

  • Variable Pointer adalah variable yang di gunakan untuk merujuk ke suatu alamat tertentu.
  • Variable Pointer tidak berisikan value melainkan berisikan alamat suatu variable lain.
  • operator yang paling penting digunakan dalam pointer adalah "*" dan "&".

STRUKTUR DATA

  • Struktur data adalah cara menyimpan atau merepresentasikan data dalam komputer agar bisa dipakai secara efisien