diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89c27ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.bin +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf diff --git a/Linked List in C/main.c b/Linked List in C/main.c new file mode 100644 index 0000000..4b93b4b --- /dev/null +++ b/Linked List in C/main.c @@ -0,0 +1,115 @@ +#include +#include + +typedef struct Node Node; + +struct Node { + int value; + Node* next; +}; + +Node* create_node(Node* previous_node) { + Node* new_node = (Node*)malloc(sizeof(Node)); + new_node->next = NULL; + if (previous_node != NULL) { + previous_node -> next = new_node; + } + return new_node; +} + +void delete_node(Node* previous_node) { + Node* exact_node = previous_node->next; + previous_node->next = exact_node->next; + free(exact_node); +} + +Node* search_node(Node* head_node, int index) { + int i = 0; + Node* node = head_node; + while (node != NULL) { + if (i == index) { + return node; + } + node = node->next; + i++; + } + return NULL; +} + +void change_node_value(Node* head_node, int index, int value) { + Node* searched_void = search_node(head_node, index); + if (searched_void == NULL) { + printf("Out of range\n"); + } else { + Node* searched = searched_void; + searched->value = value; + } +} + +void travel_all_nodes(Node* head_node) { + Node* node = head_node; + int i = 0; + while (node != NULL) { + printf("%d. Node & Value is = %d\n", i, node->value); + node = node->next; + i++; + } +} + +int main(void) { + printf("Hello World\n"); + + Node* head_node= create_node(NULL); + head_node->value = 0; + + printf("How many node do you want ?\n"); + int node_count = 0; + scanf("%d", &node_count); + + + Node* previous_node = head_node; + for (int i = 0; inext; + previous_node->value = i+1; + } + + travel_all_nodes(head_node); + + printf("Which node do you want to be deleted ?\n"); + int delete_index = 0; + scanf("%d", &delete_index); + if (delete_index == 0) { + Node* head_node_will_be_deleted = head_node; + head_node = head_node->next; + free(head_node_will_be_deleted); + } else { + void* searched_previous_void = search_node(head_node, delete_index-1); + if (searched_previous_void == NULL) { + printf("Out of range\n"); + return -1; + } else { + Node* searched_previous = searched_previous_void; + if (searched_previous->next != NULL) { + delete_node(searched_previous); + printf("Deleted\n"); + } else { + printf("Out of range\n"); + return -1; + } + } + } + + travel_all_nodes(head_node); + + printf("Which node do you want to change it's value ?\n"); + int change_node_value_index = 0; + scanf("%d", &change_node_value_index); + + printf("What value do you want to assign ?\n"); + int new_node_value = 0; + scanf("%d", &new_node_value); + change_node_value(head_node, change_node_value_index, new_node_value); + + travel_all_nodes(head_node); +} \ No newline at end of file