• Summary


    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.

    Linked List dan Array
    (Sumber: https://www.pinterest.se/pin/741757001101474327/)

    Array
    Variable bertipe array adalah suatu tipe data yang bersifat statis (urutan dan ukuran sudah pasti). Kelemahan dari array statis adalah penggunaan ruang memori yang sudah digunakan tidak dapat dihapus apabila nama variable array tersebut sudah tidak digunakan kembali dalam suatu program (penyebab kemubaziran).

    Circular Linked List

    (Sumber: https://algorithms.tutorialhorizon.com/circular-linked-list-complete-implementation/)

    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.

    Doubly Linked List

    (Sumber: https://www.studytonight.com/data-structures/doubly-linked-list)

    Double Linked List adalah Linked List yang simpul terakhirnya menunjuk ke simpul awal, dan simpul awalnya menunjuk ke simpul akhir, atau dapat disebut Linked List yang dibuat seakan-akan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling bersebelahan jika Linked List tersebut masih kosong.



    Konsep Stack
    (Sumber: https://dev.to/rinsama77/data-structure-stack-and-queue-4ecd)

    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.

    Notasi Infix, Postfix, dan Prefix

    (Sumber: http://risasisteminformasi.blogspot.com/2013/02/notasi-prefixinfix-dan-postfix.html)

    Notasi ini terbentuk dari Operand dan Operator. Operand adalah data atau nilai yang membantu dalam proses,sedangkan Operasi adalah fungsi yang digunakan dalam proses. Setelah kita mengenal dan mengetahui dengan Operand dan Operator, maka mari kita mengenal juga tingkat/ level yang ada didalam notasi tersebut:
    1.  ( ) (Kurung).
    2.  ^ (Pangkat).
    3.  * / (Perkalian / Pembagian).
    4.  + - (Penjumlahan / Pengurangan).

    1. Infix : notasi yang terbentuk atas operator dengan operand, dimana oprator didepan operand.
    2. Postfix : notasi yang membentuk atas operator dengan operand, dimana operator berada diantara operand.
    3. Prefix : notasi yang membentuk atas operator dengan operand, dimana operator berada dibelakang operand.
    Contoh : A + B * C
      maka notasi postfix adalah ABC*+.

    Konsep Queue

    (Sumber: https://saungkode.wordpress.com/2014/04/10/konsep-queue-antrian-pada-struktur-data/)

    Prinsip kerja Queue adalah FIFO (First In First Out), di mana data yang masuk terlebih dahulu akan keluar pertama.



    Hashing Table

    (Sumber : https://medium.com/dev-blogs/ds-with-js-hash-table-4715c94083d2)

    Hash Table adalah sebuah struktur data yang terdiri atas sebuah tabel dan fungsi yang bertujuan untuk memetakan nilai kunci yang unik untuk setiap record (baris) menjadi angka (hash) lokasi record tersebut dalam sebuah tabel. Keunggulan dari struktur hash table ini adalah waktu aksesnya yang cukup cepat, jika record yang dicari langsung berada pada angka hash lokasi penyimpanannya.

    (Sumber: https://medium.com/dev-blogs/ds-with-js-hash-table-4715c94083d2)

    Beberapa contoh bagaimana hashing metode ini digunakan dalam kehidupan sehari-hari misalnya di universitas, setiap mahasiswa pastiya diberi NIP atau nomor identifikasi yang digunakan sebagai informasi mengenai mereka. Kelebihan dari hash table antara lain relatif lebih cepat dan memiliki kecepatan dalam insertions, deletions, maupun searching relatif sama.


    Binary Tree
    (Sumber: https://en.wikipedia.org/wiki/Binary_tree)

    Binary Tree atau Pohon Biner adalah sebuah pohon dalam struktur data yang bersifat hirarkis (hubungan one to many). Tree bisa didefenisikan sebagai kumpulan simpul dengan setiap simpul mempunyai paling banyak dua anak. Secara khusus, anaknya dinamakan kiri dan kanan.

    Binary Search Tree
    adalah struktur data yang mengadopsi konsep Binary Tree namun terdapat aturan bahwa setiap clild node sebelah kiri selalu lebih kecil nilainya dari pada root node. Begitu pula sebaliknya, setiap child node sebelah kanan selalu lebih besar nilainya daripada root node.
    (Sumber: https://www.programiz.com/dsa/binary-search-tree)

    Ciri-ciri:
    1.     Setiap node mempunyai value dan tidak ada value yang double.
    2.     Value yang ada di kiri tree lebih kecil dari rootnya.
    3.     Value yang ada di kanan tree lebih besar dari rootnya.
    4.     kiri dan kanan tree bisa menjadi root lagi atau bisa mempunya child Jadi BST ini memiliki sifat (rekrusif).

    Binary Search Tree Operations
    • Operasi insert, pada binary search tree insert dilakukan setelah ditemukan lokasi yang tepat. (lokasi tidak ditemukan oleh user sendiri).
    • Operasi search, pencarian dalam binary search tree untuk suatu nilai key dapat dilakukan secara recursive maupun dengan proses iterative.
    • Operasi Delete, operasi delete diakukan terhadap node dengan 2 child, maka untuk menggantikannya, diambil node paling kiri dari right subtree.
    Minimarket App

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <time.h>

    struct data{
    char name[110];
    // double price;
    int qty;

    data *next, *prev;
    }*curr, *head, *tail;

    void addList(char *name, int qty){
    curr = (struct data*) malloc (sizeof(struct data));
    strcpy(curr->name, name);
    curr -> qty = qty;

    if (head == NULL){
    head = tail = curr;
    }
    else if (strcmp(curr->name, head->name) < 0){
    curr -> next = head;
    head -> prev = curr;
    head = curr;
    }
    else if (strcmp(curr->name, tail->name) > 0){
    tail -> next = curr;
    curr -> prev = tail;
    tail = curr;

    }
    else {
    data *temp = head;
    while(strcmp(curr->name, temp->name) < 0){
    temp = temp -> next;
    }
    curr -> next = temp -> next;
    temp -> next -> prev = curr;
    temp -> next = curr;
    curr -> prev = temp;
    }
    head -> prev = tail -> next = NULL;
    }

    void removeList(char remove[]){
    if(head != NULL){
        curr = head;
        while(curr != NULL){
            if(strcmp(remove, curr->name) == 0){
                if (curr==head){
                    if (head == tail){
                        head = tail = NULL;
                        printf ("\nRemove item successful.\n");
                        free(curr);
                        return;
                    }
                    else {
                        head = head -> next;
                        head->prev = NULL;
                      printf ("\nRemove item successful.\n");
                        free(curr);
                        return;
                    }
                }
                else if (curr==tail){
                    tail = tail->prev;
                    tail->next = NULL;
                    printf ("\nRemove item successful.\n");
                    free(curr);
                    return;
                }
                else{
                    curr->next->prev = curr->prev;
                    curr->prev->next = curr->next;
                    printf ("\nRemove item successful.\n");
                    free(curr);
                    return;
                }
            }
            curr = curr->next;
        }
        printf("File not found\n");
    }

    else{
    printf("\nList is empty.\n");
    }
    }

    updateList(char update[]){
    if(head != NULL){
    removeList(update);

    char newProd[110];
    int newQty;
    printf("Input new product: ");
    gets(newProd);
    printf("Input new quantity: ");
    scanf("%d", &newQty);
    fflush(stdin);

    addList(newProd, newQty);

        printf ("\nUpdate successful. \n");
    }
        
        else{
    printf("\nList is empty.\n");
    }
    }


    void viewList(){
    if(head != NULL){
    curr = head;
    int i = 1;
    while (curr != NULL) {
    printf("%.2d. %s \n  Qty: %d \n", i, curr -> name, curr -> qty);
    curr = curr -> next;
    i++;
    }
    }

    else{
    printf("\nList is empty.\n");
    }
    }

    int main(){
    int menu = 0;
    do{
    printf("Minimarket App\n");
    printf("===============\n");
    printf("1. Buy\n");
    printf("2. Edit\n");
    printf("3. Delete\n");
    printf("4. Checkout\n");
    do{
    printf("Input >> ");
    scanf("%d", &menu);
    } while(menu<1 || menu>5);
    fflush(stdin);

    switch (menu){
    case 1:
    char name[110];
    int qty;

    printf("Input product name: ");
    gets(name);
    printf("Input product quantity: ");
    do{
    scanf("%d", &qty);
    } while(qty<1);
    fflush(stdin);

    addList(name, qty);
    break;

    case 2:
    char update[110];
    viewList();
    printf("Input which product to be updated: ");
    gets(update);
    updateList(update);
    break;

    case 3:
    char remove[110];
    viewList();
    printf("Input which product to be deleted: ");
    gets(remove);
    removeList(remove);
    break;
    }

    printf("\n");
    } while(menu != 4);

    srand( time(NULL) );
    printf("===============\nTotal : Rp.%d.000,-\n", rand() % 999);
    printf("Kindness is free %c", 1);

    return 0;

    }
  • 0 comments:

    Post a Comment

    GET A FREE QUOTE NOW

    Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.

    Powered by Blogger.
    ADDRESS

    4759, NY 10011 Abia Martin Drive, Huston

    EMAIL

    contact-support@mail.com
    another@mail.com

    TELEPHONE

    +201 478 9800
    +501 478 9800

    MOBILE

    0177 7536213 44,
    017 775362 13