Skip to content

Commit

Permalink
Small changes
Browse files Browse the repository at this point in the history
  • Loading branch information
kpluas21 committed May 29, 2023
1 parent 62781d2 commit c47f92f
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 69 deletions.
141 changes: 79 additions & 62 deletions Data_Structures/LinkC/src/LinkC.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,34 @@ size_t LinkC_size(LinkC *list) {
return list->alloc_Data / list->data_size;
}

int LinkC_insert_at_start(LinkC *list, void *data)
{
LinkCNode *newNode = malloc(sizeof(LinkCNode));
if(newNode == NULL) {
errno = ENOMEM;
return -1;
}

newNode->data = malloc(list->data_size);
if(newNode->data == NULL) {
free(newNode);
errno = ENOMEM;
return -1;
}

memcpy(newNode->data, data, list->data_size);

newNode->next = list->head;
newNode->prev = NULL;

list->head->prev = newNode;
list->head = newNode;

list->alloc_Data += list->data_size;
return 0;
}


int LinkC_insert_at_end(LinkC *list, void* data) {
LinkCNode *current = list->tail;

Expand Down Expand Up @@ -126,47 +154,6 @@ void LinkC_delete(LinkC **list) {

}

// void LinkC_remove_at_middle(LinkC *list, size_t index) {
// size_t curr_list_size = LinkC_size(list);
// if(index >= curr_list_size) {
// errno = EINVAL;
// return;
// }

// //if beginning or ending index is provided, simply use those dedicated
// //functions.

// //REMOVE HEAD
// else if(index == 0) {
// LinkC_remove_first(list);
// return;
// }
// //REMOVE TAIL
// else if(index == curr_list_size - 1) {
// LinkC_remove_last(list);
// return;
// }

// //Now we remove a node at the middle. There should be a valid node
// //on both sides of the one to be removed.
// LinkCNode *traversal_ptr = list->head;

// //Traverse until we reach right before the node to be removed.
// for (size_t i = 0; i < index; i++) {
// traversal_ptr = traversal_ptr->next;
// }
// //This node will be the one to be free'd
// LinkCNode *temp = traversal_ptr->next;

// temp->prev->next = temp->next;
// temp->next->prev = temp->prev;
// free(temp->data);
// free(temp);

// list->alloc_Data -= list->data_size;

// return;
// }

void LinkC_remove_first(LinkC *list) {
if(list->head == list->tail) {
Expand Down Expand Up @@ -213,29 +200,59 @@ void LinkC_remove_last(LinkC *list) {
return;
}

int LinkC_insert_at_start(LinkC *list, void *data)
{
LinkCNode *newNode = malloc(sizeof(LinkCNode));
if(newNode == NULL) {
errno = ENOMEM;
return -1;
}
void LinkC_print(LinkC *list, void (*LinkC_print_data)(void *data)) {
LinkCNode *traversal_node = list->head;

newNode->data = malloc(list->data_size);
if(newNode->data == NULL) {
free(newNode);
errno = ENOMEM;
return -1;
while(traversal_node != NULL) {
(*LinkC_print_data) (traversal_node->data);
traversal_node = traversal_node->next;
}

memcpy(newNode->data, data, list->data_size);
return;
}

newNode->next = list->head;
newNode->prev = NULL;

list->head->prev = newNode;
list->head = newNode;

list->alloc_Data += list->data_size;
return 0;
}
//Archived. After implementing this, I was told it probably not a good idea since the whole thing with linked lists is iterating through a list, not necessarily
//indexing. So I ended up only implementing insertion/removal from the ends of the list.

// void LinkC_remove_at_middle(LinkC *list, size_t index) {
// size_t curr_list_size = LinkC_size(list);
// if(index >= curr_list_size) {
// errno = EINVAL;
// return;
// }

// //if beginning or ending index is provided, simply use those dedicated
// //functions.

// //REMOVE HEAD
// else if(index == 0) {
// LinkC_remove_first(list);
// return;
// }
// //REMOVE TAIL
// else if(index == curr_list_size - 1) {
// LinkC_remove_last(list);
// return;
// }

// //Now we remove a node at the middle. There should be a valid node
// //on both sides of the one to be removed.
// LinkCNode *traversal_ptr = list->head;

// //Traverse until we reach right before the node to be removed.
// for (size_t i = 0; i < index; i++) {
// traversal_ptr = traversal_ptr->next;
// }
// //This node will be the one to be free'd
// LinkCNode *temp = traversal_ptr->next;

// temp->prev->next = temp->next;
// temp->next->prev = temp->prev;
// free(temp->data);
// free(temp);

// list->alloc_Data -= list->data_size;

// return;
// }
1 change: 1 addition & 0 deletions Data_Structures/LinkC/src/LinkC.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ void LinkC_remove_last(LinkC *list);
* @brief Traverses through the list and calls a user provided function pointer to print the data.
*
* @param list A pointer to a valid LinkC object
* @param LinkC_print_data A function pointer to a print function
*/
void LinkC_print(LinkC *list,
void (*LinkC_print_data) (void *data));
Expand Down
23 changes: 16 additions & 7 deletions Data_Structures/LinkC/test/LinkCTest.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@
#include"../../lib/unity.h"


void LinkC_print_data(void *data);

void test_LinkC_init(void);

void test_LinkC_get(void);

void test_LinkC_insert_at_end(void);
void test_LinkC_insert_at_index(void);
void test_LinkC_print(void);

void test_LinkC_find(void);

Expand All @@ -44,6 +46,7 @@ int main(void) {
RUN_TEST(test_LinkC_init);
RUN_TEST(test_LinkC_get);
RUN_TEST(test_LinkC_insert_at_end);
RUN_TEST(test_LinkC_print);
RUN_TEST(test_LinkC_find);
RUN_TEST(test_LinkC_remove);
return UNITY_END();
Expand All @@ -69,11 +72,19 @@ void test_LinkC_insert_at_end(void) {
TEST_ASSERT_EQUAL_size_t(100, LinkC_size(intList));
}

void test_LinkC_find(void) {
void test_LinkC_print(void) {
for (int i = 2; i < 101; i++) {
LinkC_insert_at_end(intList, &i);
}

LinkC_print(intList, LinkC_print_data);
}

void test_LinkC_find(void) {
for (int i = 1; i < 101; i++) {
LinkC_insert_at_end(intList, &i);
}

//Correct input
int i = 35;
TEST_ASSERT_EQUAL_INT(34, LinkC_find(intList, &i));
Expand Down Expand Up @@ -101,10 +112,6 @@ void test_LinkC_remove(void) {

}

void test_LinkC_insert_at_index(void) {

}

void setUp(void) {
int i = 0;

Expand All @@ -116,4 +123,6 @@ void tearDown(void) {
LinkC_delete(&intList);
}


void LinkC_print_data(void *data) {
printf("%d, ", *(int*)(data));
}

0 comments on commit c47f92f

Please sign in to comment.