diff --git a/Static_Dynamic_Lib/dll.c b/Static_Dynamic_Lib/dll.c new file mode 100644 index 0000000..59f960d --- /dev/null +++ b/Static_Dynamic_Lib/dll.c @@ -0,0 +1,60 @@ +/* + * ===================================================================================== + * + * Filename: dll.c + * + * Description: + * + * Version: 1.0 + * Created: 28/01/24 07:59:34 PM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ + + + +#include "dll.h" +#include +#include + +/* Public Function Implementation to create and return + * new empty doubly linked list*/ + +dll_t * +get_new_dll(){ + + dll_t *dll = calloc(1, sizeof(dll_t)); + dll->head = NULL; + return dll; +} + +/* Public Function Implementation to add a new application + * * data to DLL */ +int +add_data_to_dll (dll_t *dll, void *app_data){ + + if(!dll || !app_data) return -1; + + dll_node_t *dll_new_node = calloc(1, sizeof(dll_node_t)); + dll_new_node->left = NULL; + dll_new_node->right = NULL; + dll_new_node->data = app_data; + + /*Now add this to the front of DLL*/ + if(!dll->head){ + dll->head = dll_new_node; + return 0; + } + + dll_node_t *first_node = dll->head; + dll_new_node->right = first_node; + first_node->left = dll_new_node; + dll->head = dll_new_node; + return 0; +} + diff --git a/Static_Dynamic_Lib/dll.h b/Static_Dynamic_Lib/dll.h new file mode 100644 index 0000000..703509e --- /dev/null +++ b/Static_Dynamic_Lib/dll.h @@ -0,0 +1,56 @@ +/* + * ===================================================================================== + * + * Filename: dll.h + * + * Description: + * + * Version: 1.0 + * Created: 28/01/24 07:58:51 PM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ + + +/*Header file for Doubly Linked List*/ + +typedef struct dll_node_{ + + void *data; + struct dll_node_ *left; + struct dll_node_ *right; +} dll_node_t; + +typedef struct dll_{ + dll_node_t *head; +} dll_t; + + +/* Public Function declaration to create and return + * a new empty doubly linked list*/ +dll_t * +get_new_dll(); + +/* Public Function declaration to add the application + * data to DLL*/ +int +add_data_to_dll(dll_t *dll, void *app_data); + + +/*More functions*/ +int /*return 0 on success and -1 on failure*/ +remove_data_from_dll_by_data_ptr (dll_t *dll, void *data); + +/*return 0 if empty, -1 if not empty*/ +int +is_dll_empty (dll_t *dll); + +/* delete all nodes from a dll, but do not free appln data*/ +void +drain_dll (dll_t *dll); + diff --git a/Static_Dynamic_Lib/dll.o b/Static_Dynamic_Lib/dll.o new file mode 100644 index 0000000..370597d Binary files /dev/null and b/Static_Dynamic_Lib/dll.o differ diff --git a/Static_Dynamic_Lib/dll_util.c b/Static_Dynamic_Lib/dll_util.c new file mode 100644 index 0000000..a6c971c --- /dev/null +++ b/Static_Dynamic_Lib/dll_util.c @@ -0,0 +1,68 @@ +/* + * ===================================================================================== + * + * Filename: dll_util.c + * + * Description: + * + * Version: 1.0 + * Created: 03/02/24 11:35:26 AM IST + * Revision: none + * Compiler: gcc + * + * Author: YOUR NAME (), + * Organization: + * + * ===================================================================================== + */ +#include "dll.h" +#include +#include + +int +remove_data_from_dll_by_data_ptr (dll_t *dll, void *data ){ + + if( !dll || !dll->head || !data ) return -1; + + /* Searching for data linearly and deleting the data*/ + dll_node_t *tp; + dll_node_t *temp = dll->head; + while( !temp ){ + if( *((int *)temp->data) == *((int *)data) ){ + tp = temp->left; + tp->right = temp->right; + free(temp); + return 0; + } + temp = temp->right; + } + + return -1; +} + +int +is_dll_empty(dll_t *dll){ + + if( !dll || !dll->head ) return 0; + + return -1; +} + + +void +drain_dll (dll_t *dll){ + if( !dll || !dll->head ) return; + + dll_node_t *tp = dll->head; + dll_node_t * temp = dll->head; + while( tp != NULL ){ + tp->right->left = NULL; + temp = tp->right; + tp->right = NULL; + free(tp->data); + free(tp); + tp = temp; + } + +} + diff --git a/Static_Dynamic_Lib/dll_util.o b/Static_Dynamic_Lib/dll_util.o new file mode 100644 index 0000000..b87b05c Binary files /dev/null and b/Static_Dynamic_Lib/dll_util.o differ diff --git a/Static_Dynamic_Lib/libdll.a b/Static_Dynamic_Lib/libdll.a new file mode 100644 index 0000000..49be4d4 Binary files /dev/null and b/Static_Dynamic_Lib/libdll.a differ diff --git a/Static_Dynamic_Lib/libdll.so b/Static_Dynamic_Lib/libdll.so new file mode 100755 index 0000000..2780a97 Binary files /dev/null and b/Static_Dynamic_Lib/libdll.so differ