summaryrefslogtreecommitdiff
path: root/comp/cw/code/ads/ll/ll.c
diff options
context:
space:
mode:
authorstandenboy <standenboy@seacrossedlovers.xyz>2024-04-25 08:54:44 +0100
committerstandenboy <standenboy@seacrossedlovers.xyz>2024-04-25 08:54:44 +0100
commit2e239a4ed2265f7c7dc2aabedfdb7d7b011704cb (patch)
treeacfef7d709d4e09cbc05a368b5a30047147c69cf /comp/cw/code/ads/ll/ll.c
parentb1c4f3c2d2a567601d2cb6aee65bb0d81320dfba (diff)
dll wasn't working and prob wasn't needed so i removed it
Diffstat (limited to 'comp/cw/code/ads/ll/ll.c')
-rw-r--r--comp/cw/code/ads/ll/ll.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/comp/cw/code/ads/ll/ll.c b/comp/cw/code/ads/ll/ll.c
new file mode 100644
index 0000000..c45ab0c
--- /dev/null
+++ b/comp/cw/code/ads/ll/ll.c
@@ -0,0 +1,50 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+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;
+ }
+ }
+}
+
+void llfreeall(ll_t *head){
+ if (head->next != NULL)
+ llfreeall(head->next);
+ free(head->data);
+ free(head);
+}
+