From c460a26850eca5ded047d0eb0d183b861087aa53 Mon Sep 17 00:00:00 2001 From: standenboy Date: Tue, 30 Apr 2024 14:22:45 +0100 Subject: write up update --- comp/lucas-standen-NEA/code/ads/ll/Makefile | 5 +++ comp/lucas-standen-NEA/code/ads/ll/ll.c | 57 ++++++++++++++++++++++++++++ comp/lucas-standen-NEA/code/ads/ll/ll.h | 16 ++++++++ comp/lucas-standen-NEA/code/ads/ll/lltest | Bin 0 -> 20632 bytes comp/lucas-standen-NEA/code/ads/ll/lltest.c | 19 ++++++++++ 5 files changed, 97 insertions(+) create mode 100644 comp/lucas-standen-NEA/code/ads/ll/Makefile create mode 100644 comp/lucas-standen-NEA/code/ads/ll/ll.c create mode 100644 comp/lucas-standen-NEA/code/ads/ll/ll.h create mode 100755 comp/lucas-standen-NEA/code/ads/ll/lltest create mode 100644 comp/lucas-standen-NEA/code/ads/ll/lltest.c (limited to 'comp/lucas-standen-NEA/code/ads/ll') diff --git a/comp/lucas-standen-NEA/code/ads/ll/Makefile b/comp/lucas-standen-NEA/code/ads/ll/Makefile new file mode 100644 index 0000000..aaf0241 --- /dev/null +++ b/comp/lucas-standen-NEA/code/ads/ll/Makefile @@ -0,0 +1,5 @@ +all: ll.c + cc ll.c -c -o ll.o + +test: all + cc ll.o lltest.c -o lltest diff --git a/comp/lucas-standen-NEA/code/ads/ll/ll.c b/comp/lucas-standen-NEA/code/ads/ll/ll.c new file mode 100644 index 0000000..ba0a0df --- /dev/null +++ b/comp/lucas-standen-NEA/code/ads/ll/ll.c @@ -0,0 +1,57 @@ +#include +#include +#include + +typedef struct ll_t ll_t; + +typedef struct ll_t { + void *data; + ll_t *next; +} ll_t; + +ll_t *llalloc(){ + ll_t *output = malloc(sizeof(ll_t)); + if (output == NULL) + return NULL; + output->next = NULL; + return output; +} + +void llsetdata(ll_t *node, void *data){ + node->data = malloc(sizeof(data)); + memcpy(node->data, data, sizeof(data)); +} + +void llsetnext(ll_t *node, ll_t *next){ + if (node->next == NULL) + node->next = next; + else + llsetnext(node->next, next); +} + +void *llgetat(ll_t *head, int index){ + if (index == 0) + return head->data; + else { + if (head->next != NULL) { + return llgetat(head->next, index - 1); + }else { + return NULL; + } + } +} + +ll_t *llgetendnode(ll_t *head){ + if (head->next == NULL) + return head; + else + return llgetendnode(head->next); +} + +void llfreeall(ll_t *head){ + if (head->next != NULL) + llfreeall(head->next); + free(head->data); + free(head); +} + diff --git a/comp/lucas-standen-NEA/code/ads/ll/ll.h b/comp/lucas-standen-NEA/code/ads/ll/ll.h new file mode 100644 index 0000000..33b4d57 --- /dev/null +++ b/comp/lucas-standen-NEA/code/ads/ll/ll.h @@ -0,0 +1,16 @@ +#include +#include + +typedef struct ll_t ll_t; + +typedef struct ll_t { + void *data; + ll_t *next; +} ll_t; + +ll_t *llalloc(); +void llsetdata(ll_t *node, void *data); +void llsetnext(ll_t *node, ll_t *next); +void *llgetat(ll_t *head, int index); +ll_t *llgetendnode(ll_t *head); +void llfreeall(ll_t *head); diff --git a/comp/lucas-standen-NEA/code/ads/ll/lltest b/comp/lucas-standen-NEA/code/ads/ll/lltest new file mode 100755 index 0000000..14653f6 Binary files /dev/null and b/comp/lucas-standen-NEA/code/ads/ll/lltest differ diff --git a/comp/lucas-standen-NEA/code/ads/ll/lltest.c b/comp/lucas-standen-NEA/code/ads/ll/lltest.c new file mode 100644 index 0000000..454acdf --- /dev/null +++ b/comp/lucas-standen-NEA/code/ads/ll/lltest.c @@ -0,0 +1,19 @@ +#include + +#include "ll.h" + +int main(){ + ll_t *head = llalloc(); + llsetdata(head, "hello"); + + for (int i = 0; i < 3; i++){ + ll_t *node = llalloc(); + llsetdata(node, "hi"); + llsetnext(head, node); + } + for (int i = 0; i < 4; i++) + printf("%s\n", (char *)llgetat(head, i)); + printf("%s\n", llgetendnode(head)->data); + + llfreeall(head); +} -- cgit v1.2.3