Stack
Stack adalah tumpukan dimana ia memiliki sistem Last In First Out (LIFO). Contohnya seperti tumpukan buku, dimana jika kita memiliki tumpukan buku maka buku yang teratas akan diambil terlebih dahulu sedangkan yang pertama kali di letakan adalah buku yang paling bawah.
Queue
Queue adalah antrian dimana ia memiliki sistem First In First Out (FIFO). Contohnya seperti antrian tiket kereta, dimana orang yang mengantri duluan akan mendapatkan tiketnya duluan.
Hashing
Hashing adalah teknik untuk mengubah atau mengconvert sebuah string karakters ke suatu key yang lebih singkat nilainya yang merepresentasikan string originalnya.
Hashing digunakan untuk mengambil items dari database karena lebih cepat untuk menemukan item menggunakan key atau kunci yang lebih pendek atau singkat.
Teknik Hashing ini sangat sering digunakan dalam bilang security, selain itu teknik ini juga digunakan oleh Teknologi Block Chain yang sangat populer sekarang ini. Block Chain digambarkan sebagai sebuah block yang menyimpan data, hash, dan hash of previous block. Ketiga tersebut diproteksi dengan menggunakan hash.
More Info: https://linkedlistads.blogspot.com/2020/03/hash-table-binary-tree-at-data-structure.html
Hash Table
Hash Table adalah tabel dalam bentuk array dimana kita menyimpan string original. Index pada tabel adalah key yang di hash.
More Info: https://linkedlistads.blogspot.com/2020/03/hash-table-binary-tree-at-data-structure.html
Binary Tree
Binary Tree adalah pohon yang memiliki paling banyak 2 anak (children).
Bahasa - bahasa dalam Tree:
tree
----
level 0 --> j <-- root
/ \
level 1 --> f k <-- f & k adalah children dari j
/ \ \
level 2--> a h z <-- leaves | a & h adalah children dari f
More Info: https://linkedlistads.blogspot.com/2020/03/hash-table-binary-tree-at-data-structure.html
Binary Search Tree (BST)
Binary search tree adalah sebuah binary tree data structure yang berlandaskan node.
Binary search tree memiliki keuntungan yakni searching dan sortingnya cepat, dan juga deletion dan insertionnya mudah.
Binary search tree memiliki beberapa sifat yakni:
1. Anak pada bagian kiri dari node x lebih kecil daripada x.
2. Anak pada bagian kanan dari node x lebih besar daripada x.
3. Anak dari node x juga termasuk binary search tree.
Binary search tree memiliki 3 operation basic yakni:
- Searching
- Insertion
- Deletion
More Info: https://linkedlistads.blogspot.com/2020/03/binary-search-tree.html
Berikut ini adalah salah satu contoh penggunaan Linked List:
----Dreamer's Market----
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//---L!L---
struct data {
char nama[20];
int qty;
int price;
struct data*next, *prev;
} *head, *tail, *curr;
void front_push(char nama[], int qty, int price) {
curr = (struct data*)malloc(sizeof(struct data));
strcpy(curr->nama, nama);
curr->qty = qty;
curr->price = price;
if (head == NULL) {
head = tail = curr;
} else {
curr->next = head;
head->prev = curr;
head = curr;
}
tail->next = NULL;
head->prev = NULL;
}
void back_push(char nama[], int qty, int price) {
curr = (struct data*)malloc(sizeof(struct data));
strcpy(curr->nama, nama);
curr->qty = qty;
curr->price = price;
if (head == NULL) {
head = tail = curr;
} else {
tail->next = curr;
curr->prev = tail;
tail = curr;
}
tail->next = NULL;
head->prev = NULL;
}
bool push(char nama[], int qty, int price) {
curr = head;
while (curr != NULL) {
if (strcmp(curr->nama, nama) == 0) return false;
curr = curr->next;
}
curr = (struct data*)malloc(sizeof(struct data));
strcpy(curr->nama, nama);
curr->qty = qty;
curr->price = price;
if (head == NULL) {
head = tail = curr;
} else if (strcmp(curr->nama, head->nama) < 0) {
front_push(nama, qty, price);
} else if (strcmp(curr->nama, tail->nama) > 0) {
back_push(nama, qty, price);
} else {
struct data *temp;
temp = head;
while (strcmp(temp->next->nama, curr->nama) < 0 ){
if (temp->next == NULL) break;
temp = temp->next;
}
curr->next = temp->next;
temp->next->prev = curr;
temp->next = curr;
curr->prev = temp;
}
return true;
}
void front_pop() {
curr = head;
head = head->next;
free(curr);
head->prev = NULL;
}
void back_pop() {
curr = tail;
tail = tail->prev;
free(curr);
tail->next = NULL;
}
void pop(int at, int max) {
if (at == 1) front_pop();
else if (at == max) back_pop();
else {
struct data *temp = head;
for (int i = 0; i < at-2; i++) {
temp = temp->next;
}
curr = temp->next;
temp->next = curr->next;
curr->next->prev = temp;
free(curr);
}
}
//---!!!---
void add_item() {
getchar();
while (true) {
system("cls");
char item[20];
int qty;
printf("Input your item name: ");
scanf("%[^\n]", item);
getchar();
printf("Input your item quantity: ");
scanf("%d", &qty);
if (qty < 1) {
printf("Quantity must larger than 0!", qty);
getchar();
continue;
}
int price = rand() % 100001;
bool cond = push(item, qty, price);
if (cond) {
return;
} else {
printf("Item already exist!");
getchar();
}
}
}
void edit_item() {
while (true) {
system("cls");
curr = head;
int i = 0;
int in;
printf("|---------------------------------------|\n");
printf("| Num. | Item Name | Quantity |\n");
while (curr != NULL) {
i++;
printf("| %-4d | %-19s | %-8d |\n", i, curr->nama, curr->qty);
curr = curr->next;
}
printf("|---------------------------------------|\n");
printf("Enter Item Number to edit >> ");
scanf("%d", &in);
if (in <= i && in > 0) {
curr = head;
for (int j = 0; j < in-1; j++) {
curr = curr->next;
}
getchar();
while (true) {
char nama[20];
int qty;
int price = curr->price;
system("cls");
printf("Old Name: %s\n", curr->nama);
printf("Input New Name: ");
scanf("%[^\n]", nama);
struct data *temp = head;
bool cond = true;
getchar();
while (temp != NULL) {
if (strcmp(temp->nama, nama) == 0) {
printf("Name Already Exist!");
cond = false;
getchar();
break;
}
temp = temp->next;
}
if (cond == false) continue;
printf("Old Quantity: %d\n", curr->qty);
printf("Input New Quantity: ");
scanf("%d", &qty);
if (qty < 1) {
printf("Quantity must larger than 0!", qty);
getchar();
continue;
}
printf("---Saved!---");
strcpy(curr->nama, nama);
curr->qty = qty;
getchar();
return;
}
}
}
}
void remove_item() {
while (true) {
system("cls");
curr = head;
int i = 0;
int in;
printf("|---------------------------------------|\n");
printf("| Num. | Item Name | Quantity |\n");
while (curr != NULL) {
i++;
printf("| %-4d | %-19s | %-8d |\n", i, curr->nama, curr->qty);
curr = curr->next;
}
printf("|---------------------------------------|\n");
printf("Enter Item Number to Remove >> ");
scanf("%d", &in);
if (in <= i && in > 0) {
pop(in, i);
printf("---Remove Success!---");
return;
}
}
}
void checkout() {
curr = head;
int i = 0;
int total = 0;
printf("|-----------------------------------------------------------------|\n");
printf("| Num. | Item Name | Quantity | Price | Sub Price |\n");
while (curr != NULL) {
i++;
printf("| %-4d | %-19s | %-8d | %-7d | %-13d |\n", i, curr->nama, curr->qty, curr->price, curr->price*curr->qty);
total += curr->price*curr->qty;
curr = curr->next;
}
printf("|-----------------------------------------------------------------|\n");
printf("| Total Price : Rp.%-46d |\n", total);
printf("| Kindness is Free! :) |\n");
printf("|-----------------------------------------------------------------|\n");
getchar();
getchar();
system("cls");
}
void menu() {
int in;
do {
system("cls");
printf("---Dreamer's Market---\n");
printf("1. Add Item\n");
printf("2. Edit Item\n");
printf("3. Remove Item\n");
printf("4. Checkout\n");
printf("0. Exit\n");
printf(">> ");
scanf("%d", &in);
if (in == 1) add_item();
else if (in == 2) edit_item();
else if (in == 3) remove_item();
else if (in == 4) checkout();
} while (in != 0);
}
int main() {
menu();
return 0;
}