Skip to main content

Review

Pointer adalah variable yang berisi alamat memory sebagai nilainya dan berbeda dengan variable biasa yang berisi nilai tertentu. 
Type *variabel-name 
Dengan : 
Type adalah tipe dasar pointer 
Variabel name adalah nama variabel pointer 
adalah variabel pada alamatnya yang ditentukan oleh operand. 

Array adalah ebuah variabel yang memiliki serangkaian elemen dari jenis tipe data yang sama 
tipeData identifier[ukuran]; 
Contohnya : int berat[10] 

Struct adalah kumpulan dari variabel yang dinyatakan dalam sebuah nama dengan sifat setiap variabelnya berbeda. 
struct data { 
char kode[5]; 
char nama[100]; 
int harga; 
}; 
Nested struct(di dalam struct ada struct);
struct dosen { 
struct mahasiswa { 
int nama; 
char NIM[100]; 
char alamat[100]; 
               }; 
char nama dosen[100]; 
char kode[100]; 
}; 

Linked list merupakan kumpulan dari data yang terdiri dari  urutan record data yang menyimpan alamat disebut node. Setiap node akan menunjuk node lain menggunakan pointer. 
Head  merupakan elemen yang berada di posisi awal. 
Tail merupakan elemen yang berada di posisi akhir. 

Single Linked List adalah sekumpulan dari node yang saling terhubung dengan node lain melalui sebuah(satu) pointer. Rangkaian diawali dengan sebuah head untuk menyimpan alamat awal dan di akhiri dengan node yang mengarah pointer ke null. 
Single Linked List hanya memiliki satu arah. Single Linked List sendiri pun, terdapat beberapa metode yang dapat dilakukan yaitu : 
Creation 
Insert :1. Depan2. Belakang3. Posisi 
Delete :1. Depan2. Belakang3. Posisi 
Traversal 
Sorting 
Searching 
Termination 
Keuntungan single linkd list : 
  • jenis data yang berbeda dapat di linked. 
  • Operasi remove and insert dilakukan hanya dengan mengubah pointernya. 
Kelemahan single likned list : 
  • Diperlukan ruang tambah untuk menyatakan pointernya. 
  • Diperlukan waktu yang leih banyak dalam mencari suatu node dalam linked list. 
  

Insert pada single linked list 
void pushDepan(char Vkode[5], char Vnama[100], int Vharga){ 
//    data *curr = malloc(sizeof(data));  harus dikonfersi dengan menambah ((nama struct) *) 
    data *curr = (data *)malloc(sizeof(data)); 
  
    strcpy(curr->kode,Vkode); 
    strcpy(curr->nama,Vnama);     
    curr->harga = Vharga;    //harga pertama struct, Vharga adalah parameter 
    curr->next=NULL; 
     
    if(head==NULL) 
    { 
        head=tail=curr; 
    } 
    else 
    { 
        curr->next=head; 
        head=curr; 
    } 
  
} 
  
void pushBelakang(char Vkode[5], char Vnama[100], int Vharga){ 
//    data *curr = malloc(sizeof(data));  harus dikonfersi dengan menambah ((nama struct) *) 
    data *curr = (data *)malloc(sizeof(data)); 
  
    strcpy(curr->kode,Vkode); 
    strcpy(curr->nama,Vnama);     
    curr->harga = Vharga;    //harga pertama struct, Vharga adalah parameter 
    curr->next=NULL; 
     
    if(head==NULL) 
    { 
        head=tail=curr; 
    } 
    else 
    { 
        tail->next=curr; 
        tail=curr; 
    } 
  
} 
  
void push(char Vkode[5], char Vnama[100], int Vharga){ 
    data *curr = (data *) malloc(sizeof(data)); 
    strcpy(curr->kode,Vkode); 
    strcpy(curr->nama,Vnama);     
    curr->harga = Vharga;    //harga pertama struct, Vharga adalah parameter 
    curr->next=NULL; 
     
    if(head==NULL) //jika linked list masih kosong 
    { 
        head=tail=curr; 
    } 
    else if(Vharga < head->harga) 
    { 
        pushDepan(Vkode,Vnama,Vharga); 
    } 
    else if(Vharga > tail->harga) 
    { 
        pushBelakang(Vkode,Vnama,Vharga); 
    } 
    else 
    { 
        data *temp= head; 
        while(temp->next->harga < Vharga) 
        { 
            temp= temp->next; 
        } 
        curr->next = temp->next; 
        temp->next = curr;     
    } 
} 
  
Delete pada single linked list 
void popDepan(){ 
    if(head==NULL) 
    { 
        printf("Thers is no data to delete\n"); 
    } 
    else 
    { 
        if(head==tail)     //1. Jika data di linked list sisa 1 node 
        { 
            free(head); 
            head = tail = NULL;     
        } 
        else 
        { 
            data *curr=head; 
            head= head->next; 
            free(curr); 
        } 
    } 
} 
  
void popBelakang(){ 
    if(head==NULL) 
    { 
        printf("Thers is no data to delete\n"); 
    } 
    else 
    { 
        if(head==tail)     //1. Jika data di linked list sisa 1 node 
        { 
            free(head); 
            head = tail = NULL;     
        } 
        else 
        { 
            data *curr=tail; 
            tail= head; 
            while(tail->next !curr) 
            { 
                tail= tail->next; 
            } 
            tail->next = NULL; 
        } 
    } 
} 
  
void pop(char key[5]){ 
    data *curr = head; 
    while(curr!=NULL && strcmp(curr->kode,key)!=0) 
    { 
        currcurr->next; 
    } 
    if(curr==NULL)     //jika data tidak ditemukan 
    { 
        printf("Data not found\n"); 
    } 
    else{  //jika data ditemukan 
        if(curr==head)  //data yang mau di delete ada di data pertama 
        { 
            popDepan(); 
        } 
        else if(curr==tail)   // data yang mau di delete ada di belakang 
        { 
            popBelakang(); 
        } 
        else  /jika data yang mau di delete ada di tengah 
        { 
            data *temp=head; 
            while(temp->next !curr) 
            { 
                temp= temp->next; 
            } 
            temp->next= curr->next; 
            free(curr); 
        } 
    } 
} 
  
void popAll(){ 
    while(head!=NULL) 
    { 
        popDepan(); 
    } 
} 

Hash table merupakan salah satu struktur data yang digunakan dalam penyimpanan data sementara dengan cara penyimpanan data menggunakan key value yang didapat dari nilai data itu sendiri.
Keuntunga Hash table :
-          Relatif lebih cepat
-          Kecepatan insert, delete dan search relative sama
-          Fungsi sederhana
A close up of a logo

Description automatically generated
Operasi Pada Hash Table:
-          insert: diberikan sebuah key dan nilai, insert nilai dalam table
-          find: diberikan sebuah key, temukan nilai yang mempunyai hubungan dengan key
-          remove: diberikan sebuah key,temukan nilai yang berhubungan dengan key, kemudian hapus nilai tersebut
-          getIterator: mengambalikan iterator,yang memeriksa nilai satu demi satu.

Pada penerapan hashing, terdapat beberapa keadaan yang memungkinkan terjadinya tabrakan (collision). Ada beberapa cara mengatasi collision :
1. Closed hashing (Open Addressing)
closed hashing menyelesaikan collision dengan menggunakan memori yang masih ada tanpa menggunakan memori diluar array yang digunakan. Closed hashing mencari alamat lain apabila alamat yang akan dituju sudah terisi oleh data.
2. Double hashing
alamat baru untuk menyimpan data yang belum dapat masuk ke dalam table diperoleh dengan menggunakan hash function lagi. Hash function kedua yang digunakan setelah alamat yang dihasilkan oleh hash function awal telah terisi tentu saja berbeda dengan hash function awal itu sendiri.
3. Open Hashing
separate chaining membuat tabel yang digunakan untuk proses hashing menjadi sebuah array of pointer yang masing-masing pointernya diikuti oleh sebuah linked list, dengan chain (mata rantai) 1 terletak pada array of pointer, sedangkan chain 2 dan seterusnya berhubungan dengan chain 1 secara memanjang.
Teknik Hashing biasanya digunakan dalam penerapan blockchain, sederhananya bisa dibilang itu adalah cara bagaimana mensecure password and stuffs yang penting.


BINARY TREE
Pohon biner adalah pohon 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.
A picture containing watch

Description automatically generated
Binary Tree dengan sifat bahwa semua left child harus lebih kecil dari pada right child dan parentnya. Juga semua right child harus lebih besar dari left childserta parentnya. Binary seach tree dibuat untuk mengatasi kelemahan pada binarytree biasa, yaitu kesulitan dalam searching / pencarian node tertentu dalam binary tree. Pada dasarnya operasi dalam binary search tree sama dengan Binary treebiasa, kecuali pada operasi insert, update, dan delete.
A. Insert : Pada Binary Search Tree, insert dilakukan setelah ditemukan lokasiyang tepat. (Lokasi tidak ditentukan oleh user sendiri).
B. Update : Seperti pada Binary Tree biasa, namun disini update akan berpengaruh pada posisi node tersebut selanjutnya. Bila setelah diupdate mengakibatkan tree tersebut bukan Binary Search Tree lagi, maka harus dilakukan perubahan pada tree dengan melakukan perubahan pada tree dengan melakukan rotasi supaya tetap menjadi Binary Search Tree.
C. Delete : Seperti halnya update, delete dalam Binary Search Tree juga turut mempengaruhi struktur dari tree tersebut.


Comments

Popular posts from this blog

Summary 6

Struktur data heap adalah sebuah objek array yang dapat dengan mudah divisualisasikan sebagai complete tree. Ada korespondensi satu ke satu diantara elemen array dan node dari tree. tree itu benar-benar penuh pada semua tingkatan kecuali mungkin yang terendah, yang diisi dari kiri sampai titik tertentu. Semua node dari heap juga memenuhi hubungan bahwa nilai kunci pada setiap node pada kurangnya sama besar dengan nilai pada anak-anaknya. Ini dapat dilihat sebagai sebuah pohon biner dengan dua kendala tambahan: ·          Bentuk property : pohon itu adalah complete binary tree , yaitu semua tingkat tree, kecuali mungkin yang terakhir (paling dalam) sepenuhnya diisi, dan, jika tingkat terakhir tree itu tidak lengkap, maka node pada tingkat itu diisi dari kiri ke kanan. ·        Sifat heap: setiap node lebih besar dari atau sama dengan masing-masing anak sesuai dengan perbandingan predikat yang ditetapkan untuk struktu...

Summary 5

AVL Tree adalah Binary Search Tree yang memiliki perbedaan tinggi/ level maksimal 1 antara subtree kiri dan subtree kanan. AVL Tree muncul untuk menyeimbangkan Binary Search Tree. Dengan AVL Tree, waktu pencarian dan bentuk tree dapat dipersingkat dan disederhanakan. AVL Rotation ·         Single Rotation o    L-L Rotation o    R-R Rotation ·         Double Roteation o    L-R Rotation o    R-L Rotation