Jadi Untuk kali ini saya belajar Tentang Single Linked List dan Double Linked List
Bedanya Single dan Double Linked List adalah :
Single Linked List hanya mempunyai Next sedangkan Double Linked List mempunyai Next dan prev untuk mengubah node node di dalam linked List
Linked List dapat digunakan untuk proteksi data seperti membuat suatu langkah mendapatkan node dengan memanfaatkan next dan prev
Linked List akan terpakai karena dapat menginput data secara Dynamic menggunakan Memory Allocation / Malloc dengan return type void pointer
Malloc akan selalu di TypeCasting ke Struct agar tidak mereturn void pointer.
Berikut adalah Contoh dari Double Linked List
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
node *next;
node *prev;
}*head,*tail;
node *newnode(int data){
node *curr = (node *)malloc(sizeof(node));
curr->data = data;
curr->next = curr->prev = NULL;
return curr;
}
void view(){
node *ptr = head;
while(ptr != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
}
void pushHead(node *data){
if(head == NULL){
head = tail = data;
}
else{
head->prev = data;
data->next = head;
head = data;
}
head->prev = NULL;
}
void pushTail(node *data){
if(head == NULL){
head = tail = data;
}
else{
tail->next = data;
data->prev = tail;
tail = data;
}
tail->next = NULL;
}
void pushMid(node *data){
if(head == NULL){
head = tail = data;
}
else{
if(data->data<head->data){
pushHead(data);
}
else if(data->data >tail->data){
pushTail(data);
}
else{
node *ptr = head;
while(ptr->next->data<data->data){
ptr = ptr->next;
}
data->next = ptr->next;
ptr->next->prev = data;
data->prev = ptr;
ptr->next = data;
}
}
}
void popHead(){
node *temp = head;
head = head->next;
temp->next = NULL;
free(temp);
}
void popTail(){
node *temp = tail;
tail = tail->prev;
temp->prev = NULL;
tail->next = NULL;
free(temp);
}
popMid(int data){
node *temp = head;
if(head == tail){
}
else{
while(temp){
if(temp->data == data)break;
temp = temp->next;
}
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
temp->next = NULL;
temp->prev = NULL;
free(temp);
}
}
void popAll(){
while(head != NULL){
popHead();
}
}
int main(int agrs,char **argv){
// pushTail(newnode(15));
// pushTail(newnode(7));
// pushTail(newnode(5));
// pushTail(newnode(25));
// pushTail(newnode(3));
// pushHead(newnode(1));
// pushHead(newnode(2));
// pushHead(newnode(3));
// pushHead(newnode(4));
pushMid(newnode(1));
pushMid(newnode(3));
pushMid(newnode(2));
pushMid(newnode(4));
pushMid(newnode(5));
// popHead();
// popTail();
popAll();
view();
return 0;
}
Jadi Untuk kali ini saya belajar Tentang cara push dan pop di dalam Single Linked List
Ini adalah contoh kode yang saya pelajari di rumah setelah kelas CB01 jam 9.00 - 11.00 dan LB08 11.20 - 15,00 :
#include <stdio.h>
#include <windows.h>
struct Node{
int data;
Node *next;
}*head,*tail;
Node *newData(int data){
Node *curr = (Node *)malloc(sizeof(Node));
curr->data = data;
curr->next = NULL;
return curr;
}
void view(){
Node *temp = head;
while(temp != NULL){
printf("%d ",temp->data);
temp = temp->next;
}
}
void pushHead(Node *data){
if(head == NULL){
head = tail = data;
}
else{
data->next = head;
head = data;
}
}
void pushTail(Node *data){
if(head == NULL){
head = tail = data;
}
else{
tail->next = data;
tail = data;
}
}
int main(int agrc,char **argv){
// pushHead(newData(10));
// pushHead(newData(30));
// pushHead(newData(20));
// pushHead(newData(50));
pushTail(newData(50));
pushTail(newData(10));
pushTail(newData(40));
pushTail(newData(30));
view();
return 0;
}
serta ini yang saya pelajari di kelas CB01 yaitu pushTail dan popTail :
#include <stdio.h>
#include <stdlib.h>
struct node{
int angka;
struct node *next;
}*head,*tail,*curr;
void push(int angka){
// ini adalah pushHead yang diajarkan di CB01
curr = (struct node*)malloc(sizeof(struct node));
curr->angka = angka;
if(head == NULL){
head = tail = curr;
}
else{
curr->next = head;
head = curr;
}
tail->next = NULL;
}
void pop(){
// ini adalah popHead yang diajarkan di kelas LB08
curr = head;
if(head != NULL){
head = head->next;
free(curr);
curr->next = NULL;
}
}
void view(){
curr = head;
while(curr != NULL){
printf("%d ",curr->angka);
curr = curr->next;
}
}
int main(int argc, char **argv){
push(112);
push(33);
push(10);
push(15);
view();
getchar();
pop();
pop();
pop();
pop();
view();
return 0;
}
Hash Table serta implementasi di BlockChain
Hash Table adalah struktur data yang mengimplementasikan tipe data abstrak dari sebuah array asosiatif, serta struktur yang dapat memetakan kunci ke nilai.
secara singkatnya adalah Table yang menyimpan data dan hanya dapat diakses orang yang mempunyai kunci / keynya (Seperti Locker).
Di Hash Table sendiri sering adanya Collision karena cara input datanya dengan cara menggunakan fungsi random dan itu dapat diselesaikan dengan 2 Cara yaitu Chainning / Linear Probing.Chainning adalah suatu cara yang digunakan apabila fungsi hashing dalam hash Table memasukan data yang sama ke dalam bucket yang sama / kolom yang sama maka akan membentuk suatu penyambung baru (pointer) dan akan berbentuk seperti chain.Sedangkan Linear Probing data tersebut akan turun ke bawah dan membuat penunjuk ke bawahnya agar data tersebut dapat di akses.
Lalu untuk implementasinya di block chain biasanya data yang banyak akan di hashing ke hash table dan juga digunakan Teknik Chainning agar tidak mengalami Collision dan menstore data lebih aman karena apabila orang tidak mempunyai key tidak dapat mengakses value di dalam hash table tersebut.
Juga apakah masih relevan untuk Blockchain yang sekarang?
Tidak karena Dalam komputasi, Hash adalah struktur data yang mengimplementasikan tipe data abstrak dari sebuah array asosiatif, serta struktur yang dapat memetakan kunci ke nilai. Tabel hash menggunakan fungsi hash untuk menghitung indeks ke dalam array dari ember atau slot, dari mana nilai yang diinginkan dapat ditemukan sedangkan block chain adalah buku besar digital di mana transaksi yang dilakukan dalam bitcoin atau mata uang digital lain dicatat secara kronologis dan terbuka agar dapat dilakukannya tracking terhadap transaksi tertentu.
Meski seperti itu kita tetap dapat membuat blockchain kecil dengan Hash Table.
Tapi untuk saat ini saya akan hanya mencontohkan hash table
#include <stdio.h>
#include <stdlib.h>
struct value{
int key;
int stored;
};
struct value *array;
int capacity = 10;
int size = 0;
int hashing(int key){
return(key % capacity);
}
void init(){
int i;
capacity = 10;
array = (struct value*)malloc(capacity * sizeof(struct value));
for(i = 0 ; i<capacity ; i ++){
array[i].key = 0;
array[i].stored = 0;
}
}
void insert(int key,int value){
int index = hashing(key);
if (array[index].stored == 0){
array[index].key = key;
array[index].stored = value;
size++;
}
else if(array[index].key == key){
array[index].stored = value;
}
}
void remove(int key)
{
int index = hashing(key);
if(array[index].stored == 0){
printf("This key does not exist \n");
getchar();
}
else{
array[index].key = 0;
array[index].stored = 0;
size--;
}
}
void display(){
int i;
for (i = 0; i < capacity; i++){
if (array[i].stored == 0){
printf("The Table Has no elements \n");
}
else {
printf("Array[%d] have value : key(%d) and value(%d)\n", i, array[i].key, array[i].stored);
}
}
}
int sizeHash(){
return size;
}
int main(int argc, char **argv){
int choose = 0,key = 0,value = 0,n = 0, go = 0;
init();
do {
system("cls");
printf("Implementation of Hash Table in C\n");
printf("---------------------------------\n");
printf("1. Inserting item in the Hash Table\n");
printf("2. Removing item from the Hash Table\n");
printf("3. Check the size of Hash Table\n");
printf("4. Display a Hash Table\n");
printf("0. Exit.\n\n");
printf("Choose >> ");
scanf("%d", &choose);getchar();
switch(choose){
case 1:{
printf("Enter key: ");
scanf("%d", &key);
printf("Enter Value: ");
scanf("%d",&value);
insert(key,value);
break;
}
case 2:{
printf("Enter the key to delete: ");
scanf("%d", &key);
remove(key);
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
case 3:{
n = sizeHash();
printf("The size of Hash Table is: %d\n", n);
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
case 4:{
display();
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
case 0:{
break;
}
default:{
printf("Wrong Input\n");
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
}
}while(choose != 0);
return 0;
}
Untuk Hari ini saya belajar Binary Search Tree yang adalah konsep penyimpanan data secara terstruktur yaitu data yang dimasukan disimpan di dalam sebuah tree yaitu setiap data disebut sebagai node node dan data pertama disebut root , lalu untuk data yang paling bawah atau tidak mempunyai cabang lagi disebut leaf.
untuk cara membuat suatu BST adalah
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
node* left;
node* right;
};
node* createNode(int data){
node *temp = (node*)malloc(sizeof(node));
temp->data = data;
temp->left = temp->right= NULL;
return temp;
}
node* insert(node* rootPos,int data){
if(rootPos == NULL){
return createNode(data);
}
else{
if(data<rootPos->data){
rootPos->left = insert(rootPos->left,data);
}
else if(data>rootPos->data){
rootPos->right = insert(rootPos->right,data);
}
}
return rootPos;
}
void inOrder(node* root){
if(root != NULL){
inOrder(root->left);
printf("%d ->",root->data);
inOrder(root->right);
}
}
node *succesor(node *root){
if(root->left != NULL){
root->left = succesor(root->left);
}
return root;
}
node* Del(node* rootPos,int data){
if(rootPos == NULL){
return NULL;
}
else{
if(data<rootPos->data){
rootPos->left = Del(rootPos->left,data);
}
else if(data>rootPos->data){
rootPos->right = Del(rootPos->right,data);
}
else{
if(rootPos->left == NULL || rootPos->right == NULL){
node *temp = rootPos->left;
if(temp == NULL){
temp = rootPos->right;
}
if(temp == NULL){
temp = rootPos;
rootPos = NULL;
free(temp);
}
else if(temp != NULL){
*rootPos = *temp;
free(temp);
}
}
else{
node* temp = succesor(rootPos->right);
rootPos->data = temp->data;
rootPos->right = Del(rootPos->right,temp->data);
}
}
}
return rootPos;
}
int main(int args,char **argv){
node* root = NULL;
root = insert(root,30);
insert(root,20);
insert(root,40);
Del(root,20);
inOrder(root);
return 0;
}
Dan Inilah Hasil Dari Coding Saya tentang Soal Dreammers Market
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
char title[18][120] = {
{" _ .-') _ _ .-') ('-. ('-. _ .-') ('-. _ .-') .-') "},
{"( ( OO) ) ( \\( -O ) _( OO) ( OO ).-. ( '.( OO )_ _( OO) ( \\( -O ) ( OO ). "},
{" \\ .'_ ,------. (,------. / . --. / ,--. ,--.)(,------. ,------. (_)---\\_) "},
{" ,`'--..._) | /`. ' | .---' | \\-. \\ | `.' | | .---' | /`. ' / _ | "},
{" | | \\ ' | / | | | | .-'-' | | | | | | | / | | \\ :` `. "},
{" | | ' | | |_.' | (| '--. \\| |_.' | | |'.'| | (| '--. | |_.' | '..`''.) "},
{" | | / : | . '.' | .--' | .-. | | | | | | .--' | . '.' .-._) \\ "},
{" | '--' / | |\\ \\ | `---. | | | | | | | | | `---. | |\\ \\ \\ / "},
{" `-------' `--' '--' `------' `--' `--' `--' `--' `------' `--' '--' `-----' "},
{" _ .-') ('-. _ .-') .-. .-') ('-. .-') _ "},
{"( '.( OO )_ ( OO ).-. ( \\( -O ) \\ ( OO ) _( OO) ( OO) ) "},
{" ,--. ,--.) / . --. / ,------. ,--. ,--. (,------. / '._ "},
{" | `.' | | \\-. \\ | /`. ' | .' / | .---' |'--...__) "},
{" | | .-'-' | | | / | | | /, | | '--. .--' "},
{" | |'.'| | \\| |_.' | | |_.' | | ' _) (| '--. | | "},
{" | | | | | .-. | | . '.' | . \\ | .--' | | "},
{" | | | | | | | | | |\\ \\ | |\\ \\ | `---. | | "},
{" `--' `--' `--' `--' `--' '--' `--' '--' `------' `--' \n\n\n"}
};
char exits[9][130] = {
{".-. .-') ('-. .-. .-') ('-. "},
{"\\ ( OO ) _( OO) \\ ( OO ) _( OO) "},
{" ;-----.\\ ,--. ,--.(,------. ;-----.\\ ,--. ,--.(,------. "},
{" | .-. | \\ `.' / | .---' | .-. | \\ `.' / | .---' .-') "},
{" | '-' /_) .-') / | | | '-' /_) .-') / | | _( OO) "},
{" | .-. `. (OO \\ / (| '--. | .-. `. (OO \\ / (| '--. (,------. "},
{" | | \\ | | / /\\_ | .--' | | \\ | | / /\\_ | .--' '------' "},
{" | '--' / `-./ /.__) | `---. | '--' / `-./ /.__) | `---. "},
{" `------' `--' `------' `------' `--' `------' "}
};
char kindness[23][110] = {
{" _____ _ _____ _ _ "},
{"/__ \\| |__ ___ /__ \\ ___ | |_ __ _ | | "},
{" / /\\/| '_ \\ / _ \\ / /\\/ / _ \\ | __| / _` || | "},
{" / / | | | || __/ / / | (_) || |_ | (_| || | "},
{" \\/ |_| |_| \\___| \\/ \\___/ \\__| \\__,_||_| "},
{" "},
{" ___ _ _ ___ "},
{" / _ \\ _ __ (_) ___ ___ (_) ___ / _ \\ "},
{" / /_)/| '__|| | / __| / _ \\ | |/ __| | | | |"},
{" / ___/ | | | || (__ | __/ | |\\__ \\ | |_| |"},
{" \\/ |_| |_| \\___| \\___| |_||___/ \\___/ "},
{" "},
{" _ _ "},
{" /\\ /\\(_) _ __ __| | _ __ ___ ___ ___ "},
{" / //_/| || '_ \\ / _` || '_ \\ / _ \\/ __|/ __| "},
{"/ __ \\ | || | | || (_| || | | || __/\\__ \\\\__ \\ "},
{"\\/ \\/ |_||_| |_| \\__,_||_| |_| \\___||___/|___/ "},
{" "},
{" _____ ___ "},
{" \\_ \\ ___ / __\\ _ __ ___ ___ "},
{" / /\\// __| / _\\ | '__| / _ \\ / _ \\ "},
{" /\\/ /_ \\__ \\ / / | | | __/| __/ "},
{" \\____/ |___/ \\/ |_| \\___| \\___| "}
};
void menu();
struct storeItem{
char name[1000];
int price,Qty;
storeItem *next,*prev;
}*head, *tail, *curr;
void pushHead(char *name,int Qty,int price){
curr = (struct storeItem *)malloc(sizeof(storeItem));
strcpy(curr->name,name);
curr->Qty = Qty;
curr->price = price;
curr->prev = curr->next = NULL;
if(head == NULL){
head = tail = curr;
}
else{
head->prev = curr;
curr->next = head;
head = curr;
}
}
void pushTail(char *name,int Qty,int price){
curr = (struct storeItem *)malloc(sizeof(storeItem));
strcpy(curr->name,name);
curr->Qty = Qty;
curr->price = price;
curr->prev = curr->next = NULL;
if(head == NULL){
head = tail = curr;
}
else{
curr->prev = tail;
tail->next = curr;
tail = curr;
}
}
void popHead(){
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else if(head == tail){
curr = head;
head = tail = NULL;
free(curr);
}
else{
curr = head;
head = head->next;
head->prev = NULL;
free(curr);
}
}
void popTail(){
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else if(head == tail){
curr = tail;
head = tail = NULL;
free(curr);
}
else{
curr = tail;
tail = tail->prev;
tail->next = NULL;
free(curr);
}
}
void PushMid(char *name,int Qty,int price){
if(head == NULL){
pushHead(name,Qty,price);
}
else if(strcmp(name,head->name) < 0){
pushHead(name,Qty,price);
}
else if(strcmp(name,tail->name) > 0){
pushTail(name,Qty,price);
}
else{
curr = (struct storeItem *)malloc(sizeof(storeItem));
strcpy(curr->name,name);
curr->Qty = Qty;
curr->price = price;
curr->prev = curr->next = NULL;
struct storeItem *temp = head;
while(temp!=NULL && strcmp(temp->name,curr->name) < 0){
temp = temp->next;
}
curr->prev = temp->prev;
curr->next = temp;
temp->prev->next = curr;
temp->prev = curr;
}
}
void popMid(char *name){
int found = -1;
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else{
curr = head;
while(curr != NULL){
if(!strcmp(curr->name,name)){
found = 1;
break;
}
curr = curr->next;
}
if(found == 1){
if(curr == head){
popHead();
printf("Item Successfully Deleted!\n");
}
else if(curr == tail){
popTail();
printf("Item Successfully Deleted!\n");
}
else{
curr->prev->next = curr->next;
curr->next->prev = curr->prev;
free(curr);
printf("Item Successfully Deleted!\n");
}
}
else{
printf("Item Not Found\n");
}
}
}
void addItem(){
char addName[1000];
int addQty,addPrice;
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("Add Items\n");
printf("===============================\n");
printf("Input item's name : ");
scanf("%[^\n]",addName);getchar();
printf("Input Quantity : ");
scanf("%d",&addQty);getchar();
addPrice = rand() % (91) * 100 + 1000;
PushMid(addName,addQty,addPrice);
printf("Item Successfully Added!\n");
printf("Press Enter to continue");getchar();
menu();
}
void changeItem(){
char changeName[1000];
int changeQty, found = -1;
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("Change Items\n");
printf("===============================\n");
printf("Input item's name to be Changed : ");
scanf("%[^\n]",changeName);getchar();
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else{
curr = head;
while(curr != NULL){
if(!strcmp(curr->name,changeName)){
found = 1;
break;
}
curr = curr->next;
}
if(found == 1){
printf("Input Quantity to be Changed : ");
scanf("%d",&changeQty);getchar();
curr->Qty = changeQty;
printf("Item Successfully Changed!\n");
}
else{
printf("Item Not Found\n");
}
}
printf("Press Enter to continue");getchar();
menu();
}
void deleteItem(){
char deleteName[1000];
int deleteQty;
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("Delete Items\n");
printf("===============================\n");
printf("Input item's name to be Deleted : ");
scanf("%[^\n]",deleteName);getchar();
popMid(deleteName);
printf("Press Enter to continue");getchar();
menu();
}
void byebye(){
system("cls");
for(int i = 0; i < 9; i++){
printf("%s",exits[i]);
printf("\n");
_sleep(100);
}
_sleep(3000);
}
void checkOut(){
system("cls");
for(int i = 0; i < 23; i++){
printf("%s",kindness[i]);
printf("\n");
}
_sleep(3000);
byebye();
}
void seePrice(){
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
curr = head;
if(curr != NULL){
printf("This is Sorted By Name\n\n");
printf("| %-30s | %-15s | %-15s | %-15s |\n","Name","Price","Qty","Total");
printf("========================================================================================\n");
while(curr != NULL){
printf("| %-30s | %-15d | %-15d | %-15d |\n", curr->name, curr->price, curr->Qty, curr->price * curr->Qty);
curr = curr->next;
}
}else{
printf("No Data\n");
}
printf("Press Enter to continue");getchar();
menu();
}
void menu(){
int choose = -1;
do{
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("1. Input Item\n");
printf("2. Change Item\n");
printf("3. Delete Item\n");
printf("4. See Price\n");
printf("5. Checkout\n");
printf(">> ");
scanf("%d",&choose);getchar();
switch(choose){
case 1:{
addItem();
break;
}
case 2:{
changeItem();
break;
}
case 3:{
deleteItem();
break;
}
case 4:{
seePrice();
break;
}
case 5:{
checkOut();
break;
}
}
}while(choose < 1 || choose > 5);
}
int main(int argc, char **argv){
SetConsoleTitle("Dreammers Market");
srand(time(NULL));
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
_sleep(100);
}
menu();
}
Bedanya Single dan Double Linked List adalah :
Single Linked List hanya mempunyai Next sedangkan Double Linked List mempunyai Next dan prev untuk mengubah node node di dalam linked List
Linked List dapat digunakan untuk proteksi data seperti membuat suatu langkah mendapatkan node dengan memanfaatkan next dan prev
Linked List akan terpakai karena dapat menginput data secara Dynamic menggunakan Memory Allocation / Malloc dengan return type void pointer
Malloc akan selalu di TypeCasting ke Struct agar tidak mereturn void pointer.
Berikut adalah Contoh dari Double Linked List
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
node *next;
node *prev;
}*head,*tail;
node *newnode(int data){
node *curr = (node *)malloc(sizeof(node));
curr->data = data;
curr->next = curr->prev = NULL;
return curr;
}
void view(){
node *ptr = head;
while(ptr != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
}
void pushHead(node *data){
if(head == NULL){
head = tail = data;
}
else{
head->prev = data;
data->next = head;
head = data;
}
head->prev = NULL;
}
void pushTail(node *data){
if(head == NULL){
head = tail = data;
}
else{
tail->next = data;
data->prev = tail;
tail = data;
}
tail->next = NULL;
}
void pushMid(node *data){
if(head == NULL){
head = tail = data;
}
else{
if(data->data<head->data){
pushHead(data);
}
else if(data->data >tail->data){
pushTail(data);
}
else{
node *ptr = head;
while(ptr->next->data<data->data){
ptr = ptr->next;
}
data->next = ptr->next;
ptr->next->prev = data;
data->prev = ptr;
ptr->next = data;
}
}
}
void popHead(){
node *temp = head;
head = head->next;
temp->next = NULL;
free(temp);
}
void popTail(){
node *temp = tail;
tail = tail->prev;
temp->prev = NULL;
tail->next = NULL;
free(temp);
}
popMid(int data){
node *temp = head;
if(head == tail){
}
else{
while(temp){
if(temp->data == data)break;
temp = temp->next;
}
temp->prev->next = temp->next;
temp->next->prev = temp->prev;
temp->next = NULL;
temp->prev = NULL;
free(temp);
}
}
void popAll(){
while(head != NULL){
popHead();
}
}
int main(int agrs,char **argv){
// pushTail(newnode(15));
// pushTail(newnode(7));
// pushTail(newnode(5));
// pushTail(newnode(25));
// pushTail(newnode(3));
// pushHead(newnode(1));
// pushHead(newnode(2));
// pushHead(newnode(3));
// pushHead(newnode(4));
pushMid(newnode(1));
pushMid(newnode(3));
pushMid(newnode(2));
pushMid(newnode(4));
pushMid(newnode(5));
// popHead();
// popTail();
popAll();
view();
return 0;
}
Jadi Untuk kali ini saya belajar Tentang cara push dan pop di dalam Single Linked List
Ini adalah contoh kode yang saya pelajari di rumah setelah kelas CB01 jam 9.00 - 11.00 dan LB08 11.20 - 15,00 :
#include <stdio.h>
#include <windows.h>
struct Node{
int data;
Node *next;
}*head,*tail;
Node *newData(int data){
Node *curr = (Node *)malloc(sizeof(Node));
curr->data = data;
curr->next = NULL;
return curr;
}
void view(){
Node *temp = head;
while(temp != NULL){
printf("%d ",temp->data);
temp = temp->next;
}
}
void pushHead(Node *data){
if(head == NULL){
head = tail = data;
}
else{
data->next = head;
head = data;
}
}
void pushTail(Node *data){
if(head == NULL){
head = tail = data;
}
else{
tail->next = data;
tail = data;
}
}
int main(int agrc,char **argv){
// pushHead(newData(10));
// pushHead(newData(30));
// pushHead(newData(20));
// pushHead(newData(50));
pushTail(newData(50));
pushTail(newData(10));
pushTail(newData(40));
pushTail(newData(30));
view();
return 0;
}
serta ini yang saya pelajari di kelas CB01 yaitu pushTail dan popTail :
#include <stdio.h>
#include <stdlib.h>
struct node{
int angka;
struct node *next;
}*head,*tail,*curr;
void push(int angka){
// ini adalah pushHead yang diajarkan di CB01
curr = (struct node*)malloc(sizeof(struct node));
curr->angka = angka;
if(head == NULL){
head = tail = curr;
}
else{
curr->next = head;
head = curr;
}
tail->next = NULL;
}
void pop(){
// ini adalah popHead yang diajarkan di kelas LB08
curr = head;
if(head != NULL){
head = head->next;
free(curr);
curr->next = NULL;
}
}
void view(){
curr = head;
while(curr != NULL){
printf("%d ",curr->angka);
curr = curr->next;
}
}
int main(int argc, char **argv){
push(112);
push(33);
push(10);
push(15);
view();
getchar();
pop();
pop();
pop();
pop();
view();
return 0;
}
Hash Table serta implementasi di BlockChain
Hash Table adalah struktur data yang mengimplementasikan tipe data abstrak dari sebuah array asosiatif, serta struktur yang dapat memetakan kunci ke nilai.
secara singkatnya adalah Table yang menyimpan data dan hanya dapat diakses orang yang mempunyai kunci / keynya (Seperti Locker).
Di Hash Table sendiri sering adanya Collision karena cara input datanya dengan cara menggunakan fungsi random dan itu dapat diselesaikan dengan 2 Cara yaitu Chainning / Linear Probing.Chainning adalah suatu cara yang digunakan apabila fungsi hashing dalam hash Table memasukan data yang sama ke dalam bucket yang sama / kolom yang sama maka akan membentuk suatu penyambung baru (pointer) dan akan berbentuk seperti chain.Sedangkan Linear Probing data tersebut akan turun ke bawah dan membuat penunjuk ke bawahnya agar data tersebut dapat di akses.
Lalu untuk implementasinya di block chain biasanya data yang banyak akan di hashing ke hash table dan juga digunakan Teknik Chainning agar tidak mengalami Collision dan menstore data lebih aman karena apabila orang tidak mempunyai key tidak dapat mengakses value di dalam hash table tersebut.
Juga apakah masih relevan untuk Blockchain yang sekarang?
Tidak karena Dalam komputasi, Hash adalah struktur data yang mengimplementasikan tipe data abstrak dari sebuah array asosiatif, serta struktur yang dapat memetakan kunci ke nilai. Tabel hash menggunakan fungsi hash untuk menghitung indeks ke dalam array dari ember atau slot, dari mana nilai yang diinginkan dapat ditemukan sedangkan block chain adalah buku besar digital di mana transaksi yang dilakukan dalam bitcoin atau mata uang digital lain dicatat secara kronologis dan terbuka agar dapat dilakukannya tracking terhadap transaksi tertentu.
Meski seperti itu kita tetap dapat membuat blockchain kecil dengan Hash Table.
Tapi untuk saat ini saya akan hanya mencontohkan hash table
#include <stdio.h>
#include <stdlib.h>
struct value{
int key;
int stored;
};
struct value *array;
int capacity = 10;
int size = 0;
int hashing(int key){
return(key % capacity);
}
void init(){
int i;
capacity = 10;
array = (struct value*)malloc(capacity * sizeof(struct value));
for(i = 0 ; i<capacity ; i ++){
array[i].key = 0;
array[i].stored = 0;
}
}
void insert(int key,int value){
int index = hashing(key);
if (array[index].stored == 0){
array[index].key = key;
array[index].stored = value;
size++;
}
else if(array[index].key == key){
array[index].stored = value;
}
}
void remove(int key)
{
int index = hashing(key);
if(array[index].stored == 0){
printf("This key does not exist \n");
getchar();
}
else{
array[index].key = 0;
array[index].stored = 0;
size--;
}
}
void display(){
int i;
for (i = 0; i < capacity; i++){
if (array[i].stored == 0){
printf("The Table Has no elements \n");
}
else {
printf("Array[%d] have value : key(%d) and value(%d)\n", i, array[i].key, array[i].stored);
}
}
}
int sizeHash(){
return size;
}
int main(int argc, char **argv){
int choose = 0,key = 0,value = 0,n = 0, go = 0;
init();
do {
system("cls");
printf("Implementation of Hash Table in C\n");
printf("---------------------------------\n");
printf("1. Inserting item in the Hash Table\n");
printf("2. Removing item from the Hash Table\n");
printf("3. Check the size of Hash Table\n");
printf("4. Display a Hash Table\n");
printf("0. Exit.\n\n");
printf("Choose >> ");
scanf("%d", &choose);getchar();
switch(choose){
case 1:{
printf("Enter key: ");
scanf("%d", &key);
printf("Enter Value: ");
scanf("%d",&value);
insert(key,value);
break;
}
case 2:{
printf("Enter the key to delete: ");
scanf("%d", &key);
remove(key);
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
case 3:{
n = sizeHash();
printf("The size of Hash Table is: %d\n", n);
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
case 4:{
display();
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
case 0:{
break;
}
default:{
printf("Wrong Input\n");
printf("\n\nPress Enter To Continue!");
getchar();
main(argc,argv);
break;
}
}
}while(choose != 0);
return 0;
}
Untuk Hari ini saya belajar Binary Search Tree yang adalah konsep penyimpanan data secara terstruktur yaitu data yang dimasukan disimpan di dalam sebuah tree yaitu setiap data disebut sebagai node node dan data pertama disebut root , lalu untuk data yang paling bawah atau tidak mempunyai cabang lagi disebut leaf.
untuk cara membuat suatu BST adalah
#include <stdio.h>
#include <stdlib.h>
struct node{
int data;
node* left;
node* right;
};
node* createNode(int data){
node *temp = (node*)malloc(sizeof(node));
temp->data = data;
temp->left = temp->right= NULL;
return temp;
}
node* insert(node* rootPos,int data){
if(rootPos == NULL){
return createNode(data);
}
else{
if(data<rootPos->data){
rootPos->left = insert(rootPos->left,data);
}
else if(data>rootPos->data){
rootPos->right = insert(rootPos->right,data);
}
}
return rootPos;
}
void inOrder(node* root){
if(root != NULL){
inOrder(root->left);
printf("%d ->",root->data);
inOrder(root->right);
}
}
node *succesor(node *root){
if(root->left != NULL){
root->left = succesor(root->left);
}
return root;
}
node* Del(node* rootPos,int data){
if(rootPos == NULL){
return NULL;
}
else{
if(data<rootPos->data){
rootPos->left = Del(rootPos->left,data);
}
else if(data>rootPos->data){
rootPos->right = Del(rootPos->right,data);
}
else{
if(rootPos->left == NULL || rootPos->right == NULL){
node *temp = rootPos->left;
if(temp == NULL){
temp = rootPos->right;
}
if(temp == NULL){
temp = rootPos;
rootPos = NULL;
free(temp);
}
else if(temp != NULL){
*rootPos = *temp;
free(temp);
}
}
else{
node* temp = succesor(rootPos->right);
rootPos->data = temp->data;
rootPos->right = Del(rootPos->right,temp->data);
}
}
}
return rootPos;
}
int main(int args,char **argv){
node* root = NULL;
root = insert(root,30);
insert(root,20);
insert(root,40);
Del(root,20);
inOrder(root);
return 0;
}
Dan Inilah Hasil Dari Coding Saya tentang Soal Dreammers Market
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
char title[18][120] = {
{" _ .-') _ _ .-') ('-. ('-. _ .-') ('-. _ .-') .-') "},
{"( ( OO) ) ( \\( -O ) _( OO) ( OO ).-. ( '.( OO )_ _( OO) ( \\( -O ) ( OO ). "},
{" \\ .'_ ,------. (,------. / . --. / ,--. ,--.)(,------. ,------. (_)---\\_) "},
{" ,`'--..._) | /`. ' | .---' | \\-. \\ | `.' | | .---' | /`. ' / _ | "},
{" | | \\ ' | / | | | | .-'-' | | | | | | | / | | \\ :` `. "},
{" | | ' | | |_.' | (| '--. \\| |_.' | | |'.'| | (| '--. | |_.' | '..`''.) "},
{" | | / : | . '.' | .--' | .-. | | | | | | .--' | . '.' .-._) \\ "},
{" | '--' / | |\\ \\ | `---. | | | | | | | | | `---. | |\\ \\ \\ / "},
{" `-------' `--' '--' `------' `--' `--' `--' `--' `------' `--' '--' `-----' "},
{" _ .-') ('-. _ .-') .-. .-') ('-. .-') _ "},
{"( '.( OO )_ ( OO ).-. ( \\( -O ) \\ ( OO ) _( OO) ( OO) ) "},
{" ,--. ,--.) / . --. / ,------. ,--. ,--. (,------. / '._ "},
{" | `.' | | \\-. \\ | /`. ' | .' / | .---' |'--...__) "},
{" | | .-'-' | | | / | | | /, | | '--. .--' "},
{" | |'.'| | \\| |_.' | | |_.' | | ' _) (| '--. | | "},
{" | | | | | .-. | | . '.' | . \\ | .--' | | "},
{" | | | | | | | | | |\\ \\ | |\\ \\ | `---. | | "},
{" `--' `--' `--' `--' `--' '--' `--' '--' `------' `--' \n\n\n"}
};
char exits[9][130] = {
{".-. .-') ('-. .-. .-') ('-. "},
{"\\ ( OO ) _( OO) \\ ( OO ) _( OO) "},
{" ;-----.\\ ,--. ,--.(,------. ;-----.\\ ,--. ,--.(,------. "},
{" | .-. | \\ `.' / | .---' | .-. | \\ `.' / | .---' .-') "},
{" | '-' /_) .-') / | | | '-' /_) .-') / | | _( OO) "},
{" | .-. `. (OO \\ / (| '--. | .-. `. (OO \\ / (| '--. (,------. "},
{" | | \\ | | / /\\_ | .--' | | \\ | | / /\\_ | .--' '------' "},
{" | '--' / `-./ /.__) | `---. | '--' / `-./ /.__) | `---. "},
{" `------' `--' `------' `------' `--' `------' "}
};
char kindness[23][110] = {
{" _____ _ _____ _ _ "},
{"/__ \\| |__ ___ /__ \\ ___ | |_ __ _ | | "},
{" / /\\/| '_ \\ / _ \\ / /\\/ / _ \\ | __| / _` || | "},
{" / / | | | || __/ / / | (_) || |_ | (_| || | "},
{" \\/ |_| |_| \\___| \\/ \\___/ \\__| \\__,_||_| "},
{" "},
{" ___ _ _ ___ "},
{" / _ \\ _ __ (_) ___ ___ (_) ___ / _ \\ "},
{" / /_)/| '__|| | / __| / _ \\ | |/ __| | | | |"},
{" / ___/ | | | || (__ | __/ | |\\__ \\ | |_| |"},
{" \\/ |_| |_| \\___| \\___| |_||___/ \\___/ "},
{" "},
{" _ _ "},
{" /\\ /\\(_) _ __ __| | _ __ ___ ___ ___ "},
{" / //_/| || '_ \\ / _` || '_ \\ / _ \\/ __|/ __| "},
{"/ __ \\ | || | | || (_| || | | || __/\\__ \\\\__ \\ "},
{"\\/ \\/ |_||_| |_| \\__,_||_| |_| \\___||___/|___/ "},
{" "},
{" _____ ___ "},
{" \\_ \\ ___ / __\\ _ __ ___ ___ "},
{" / /\\// __| / _\\ | '__| / _ \\ / _ \\ "},
{" /\\/ /_ \\__ \\ / / | | | __/| __/ "},
{" \\____/ |___/ \\/ |_| \\___| \\___| "}
};
void menu();
struct storeItem{
char name[1000];
int price,Qty;
storeItem *next,*prev;
}*head, *tail, *curr;
void pushHead(char *name,int Qty,int price){
curr = (struct storeItem *)malloc(sizeof(storeItem));
strcpy(curr->name,name);
curr->Qty = Qty;
curr->price = price;
curr->prev = curr->next = NULL;
if(head == NULL){
head = tail = curr;
}
else{
head->prev = curr;
curr->next = head;
head = curr;
}
}
void pushTail(char *name,int Qty,int price){
curr = (struct storeItem *)malloc(sizeof(storeItem));
strcpy(curr->name,name);
curr->Qty = Qty;
curr->price = price;
curr->prev = curr->next = NULL;
if(head == NULL){
head = tail = curr;
}
else{
curr->prev = tail;
tail->next = curr;
tail = curr;
}
}
void popHead(){
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else if(head == tail){
curr = head;
head = tail = NULL;
free(curr);
}
else{
curr = head;
head = head->next;
head->prev = NULL;
free(curr);
}
}
void popTail(){
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else if(head == tail){
curr = tail;
head = tail = NULL;
free(curr);
}
else{
curr = tail;
tail = tail->prev;
tail->next = NULL;
free(curr);
}
}
void PushMid(char *name,int Qty,int price){
if(head == NULL){
pushHead(name,Qty,price);
}
else if(strcmp(name,head->name) < 0){
pushHead(name,Qty,price);
}
else if(strcmp(name,tail->name) > 0){
pushTail(name,Qty,price);
}
else{
curr = (struct storeItem *)malloc(sizeof(storeItem));
strcpy(curr->name,name);
curr->Qty = Qty;
curr->price = price;
curr->prev = curr->next = NULL;
struct storeItem *temp = head;
while(temp!=NULL && strcmp(temp->name,curr->name) < 0){
temp = temp->next;
}
curr->prev = temp->prev;
curr->next = temp;
temp->prev->next = curr;
temp->prev = curr;
}
}
void popMid(char *name){
int found = -1;
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else{
curr = head;
while(curr != NULL){
if(!strcmp(curr->name,name)){
found = 1;
break;
}
curr = curr->next;
}
if(found == 1){
if(curr == head){
popHead();
printf("Item Successfully Deleted!\n");
}
else if(curr == tail){
popTail();
printf("Item Successfully Deleted!\n");
}
else{
curr->prev->next = curr->next;
curr->next->prev = curr->prev;
free(curr);
printf("Item Successfully Deleted!\n");
}
}
else{
printf("Item Not Found\n");
}
}
}
void addItem(){
char addName[1000];
int addQty,addPrice;
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("Add Items\n");
printf("===============================\n");
printf("Input item's name : ");
scanf("%[^\n]",addName);getchar();
printf("Input Quantity : ");
scanf("%d",&addQty);getchar();
addPrice = rand() % (91) * 100 + 1000;
PushMid(addName,addQty,addPrice);
printf("Item Successfully Added!\n");
printf("Press Enter to continue");getchar();
menu();
}
void changeItem(){
char changeName[1000];
int changeQty, found = -1;
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("Change Items\n");
printf("===============================\n");
printf("Input item's name to be Changed : ");
scanf("%[^\n]",changeName);getchar();
if(head == NULL){
printf("No Item , Please Input Some Item First!\n");
}
else{
curr = head;
while(curr != NULL){
if(!strcmp(curr->name,changeName)){
found = 1;
break;
}
curr = curr->next;
}
if(found == 1){
printf("Input Quantity to be Changed : ");
scanf("%d",&changeQty);getchar();
curr->Qty = changeQty;
printf("Item Successfully Changed!\n");
}
else{
printf("Item Not Found\n");
}
}
printf("Press Enter to continue");getchar();
menu();
}
void deleteItem(){
char deleteName[1000];
int deleteQty;
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("Delete Items\n");
printf("===============================\n");
printf("Input item's name to be Deleted : ");
scanf("%[^\n]",deleteName);getchar();
popMid(deleteName);
printf("Press Enter to continue");getchar();
menu();
}
void byebye(){
system("cls");
for(int i = 0; i < 9; i++){
printf("%s",exits[i]);
printf("\n");
_sleep(100);
}
_sleep(3000);
}
void checkOut(){
system("cls");
for(int i = 0; i < 23; i++){
printf("%s",kindness[i]);
printf("\n");
}
_sleep(3000);
byebye();
}
void seePrice(){
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
curr = head;
if(curr != NULL){
printf("This is Sorted By Name\n\n");
printf("| %-30s | %-15s | %-15s | %-15s |\n","Name","Price","Qty","Total");
printf("========================================================================================\n");
while(curr != NULL){
printf("| %-30s | %-15d | %-15d | %-15d |\n", curr->name, curr->price, curr->Qty, curr->price * curr->Qty);
curr = curr->next;
}
}else{
printf("No Data\n");
}
printf("Press Enter to continue");getchar();
menu();
}
void menu(){
int choose = -1;
do{
system("cls");
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
}
printf("1. Input Item\n");
printf("2. Change Item\n");
printf("3. Delete Item\n");
printf("4. See Price\n");
printf("5. Checkout\n");
printf(">> ");
scanf("%d",&choose);getchar();
switch(choose){
case 1:{
addItem();
break;
}
case 2:{
changeItem();
break;
}
case 3:{
deleteItem();
break;
}
case 4:{
seePrice();
break;
}
case 5:{
checkOut();
break;
}
}
}while(choose < 1 || choose > 5);
}
int main(int argc, char **argv){
SetConsoleTitle("Dreammers Market");
srand(time(NULL));
for(int i = 0; i < 18; i++){
printf("%s",title[i]);
printf("\n");
_sleep(100);
}
menu();
}
Komentar
Posting Komentar