Question: Using #include #include // data structures typedef struct _Node{ void* data; struct _Node* next; struct _Node* prev; } Node; typedef struct _LList{ Node* first; Node*

Using

#include #include

// data structures

typedef struct _Node{ void* data; struct _Node* next; struct _Node* prev; } Node;

typedef struct _LList{ Node* first; Node* last; int size; int itemSize; char* type; } LinkedList;

// forward declarations LinkedList* llist_initialize(int dataTypeSize, char* name); bool llist_add_at(LinkedList* list, int index, void* element); bool llist_add_first(LinkedList* list, void* element); bool llist_add_last(LinkedList* list, void* element);

LinkedList* llist_initialize(int dataTypeSize, char* name) { // creating the list LinkedList* list = (LinkedList*) malloc(sizeof(LinkedList)); // initializing the list *list = (LinkedList) { .first = NULL, .last = NULL, .size = 0, .itemSize = dataTypeSize, .type = name }; // returning the list return list; } bool llist_add_at(LinkedList* list, int index, void* element) { if(list == NULL) { // list is NULL return false; } if(!(0 size)) { // invalid index return false; } if(index == 0) { // add at first return llist_add_first(list, element); } if(index == list->size) { // add at last return llist_add_last(list, element); } // iterating to the position before index Node* it = list->first; while(--index > 0) { it = it->next; } // creating node Node* node = (Node*) malloc(sizeof(Node)); *node = (Node) { .data = element, .next = it->next, .prev = it, }; // inserting it->next->prev = node; it->next = node; // updating size ++list->size; // successful insertion return true; } bool llist_add_first(LinkedList* list, void* element) { if(list == NULL) { // list is NULL return false; } // creating node Node* node = (Node*) malloc(sizeof(Node)); // inserting if(list->first == NULL) { // list is empty *node = (Node) { .data = element, .next = NULL, .prev = NULL, }; list->first = list->last = node; } else { *node = (Node) { .data = element, .next = list->first, .prev = NULL, }; list->first->prev = node; } // updating size ++list->size; // successful insertion return true; } bool llist_add_last(LinkedList* list, void* element) { if(list == NULL) { // list is NULL return false; } // creating node Node* node = (Node*) malloc(sizeof(Node)); // inserting if(list->last == NULL) { // list is empty *node = (Node) { .data = element, .next = NULL, .prev = NULL, }; list->first = list->last = node; } else { *node = (Node) { .data = element, .next = NULL, .prev = list->last, }; list->last->next = node; } // updating size ++list->size; // successful insertion return true; }

create functions

Using #include #include // data structures typedef struct _Node{ void* data; struct

C programming

Requirement Function Input Parameters Return Value Notes Requirement Function Input Parameters Return Value Notes Requirement Function Input Parameters Return Value Notes Requirement Function Input Parameters Return Value Notes Requirement Function Input Parameters Return Value Notes Requirement Function Input Parameters Return Value Notes Conditions void* llist_get(Linked List*, int) A pointer to a linked list and an int representing an index. A void pointer to the element stored in the given index of the linked list. If the given index is not in the list range, return NULL. This function should return the void pointer stored in the given index of the linked. This should not return a whole Node, but instead the value the node contains as data. Conditions int llist_index_of(LinkedList*, void*) A pointer to a linked list and a void pointer to an element. The index containing the element. -1 if the element is not in the list. This function should search the linked list for the element and return its index if found. Conditions void* llist_remove(LinkedList*, int) A pointer to a linked list and an int representing an index. A pointer to the element removed from the list. Otherwise NULL. This function should remove the element in the given index from the list and return it. Conditions void* llist_remove_first (Linked List*) A pointer to a linked list. A pointer to the element removed from the list. Otherwise NULL. This function should remove the element from the front of the list and return it. Conditions void* llist_remove_last (Linked List*) A pointer to a linked list. A pointer to the element removed from the list. Otherwise NULL. This function should remove the element from the list and return it. Conditions bool llist_destroy (LinkedList*) A pointer to a linked list. True if the linked list is successfully deallocated. Otherwise false. This function should deallocate all of the nodes, all of the node data, the type name, and finally the linked list

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!