Skip to main content

Summary 2

Linked list

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(); 
    } 

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