summaryrefslogtreecommitdiff
path: root/comp/cw/code/ads
diff options
context:
space:
mode:
Diffstat (limited to 'comp/cw/code/ads')
-rw-r--r--comp/cw/code/ads/dict/Makefile4
-rw-r--r--comp/cw/code/ads/dict/dict.c29
-rw-r--r--comp/cw/code/ads/dict/dict.h9
-rwxr-xr-xcomp/cw/code/ads/dict/dicttestbin0 -> 20536 bytes
-rw-r--r--comp/cw/code/ads/dict/dicttest.c10
-rw-r--r--comp/cw/code/ads/ll/Makefile5
-rw-r--r--comp/cw/code/ads/ll/ll.c50
-rw-r--r--comp/cw/code/ads/ll/ll.h15
-rwxr-xr-xcomp/cw/code/ads/ll/lltestbin0 -> 20592 bytes
-rw-r--r--comp/cw/code/ads/ll/lltest.c18
10 files changed, 140 insertions, 0 deletions
diff --git a/comp/cw/code/ads/dict/Makefile b/comp/cw/code/ads/dict/Makefile
new file mode 100644
index 0000000..f224267
--- /dev/null
+++ b/comp/cw/code/ads/dict/Makefile
@@ -0,0 +1,4 @@
+all: dict.c
+ cc dict.c -c -o dict.o
+test: all
+ cc dict.o dicttest.c -o dicttest
diff --git a/comp/cw/code/ads/dict/dict.c b/comp/cw/code/ads/dict/dict.c
new file mode 100644
index 0000000..551afca
--- /dev/null
+++ b/comp/cw/code/ads/dict/dict.c
@@ -0,0 +1,29 @@
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct dict_t {
+ int id;
+ void *data;
+}dict_t;
+
+dict_t *dictalloc(){
+ dict_t *output = malloc(sizeof(dict_t));
+ return output;
+}
+
+int dictset(dict_t *dict, int id, void *data){
+ dict->id = id;
+
+ dict->data = malloc(sizeof(data));
+ if (dict->data == NULL)
+ return 1;
+ memcpy(dict->data, data, sizeof(data));
+
+ return 0;
+}
+
+void dictfree(dict_t *dict){
+ free(dict->data);
+ free(dict);
+}
+
diff --git a/comp/cw/code/ads/dict/dict.h b/comp/cw/code/ads/dict/dict.h
new file mode 100644
index 0000000..e6ab69d
--- /dev/null
+++ b/comp/cw/code/ads/dict/dict.h
@@ -0,0 +1,9 @@
+typedef struct dict_t {
+ int id;
+ void *data;
+}dict_t;
+
+dict_t *dictalloc();
+int dictset(dict_t *dict, int id, void *data);
+void dictfree(dict_t *dict);
+
diff --git a/comp/cw/code/ads/dict/dicttest b/comp/cw/code/ads/dict/dicttest
new file mode 100755
index 0000000..dddf2a0
--- /dev/null
+++ b/comp/cw/code/ads/dict/dicttest
Binary files differ
diff --git a/comp/cw/code/ads/dict/dicttest.c b/comp/cw/code/ads/dict/dicttest.c
new file mode 100644
index 0000000..4a20870
--- /dev/null
+++ b/comp/cw/code/ads/dict/dicttest.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+#include "dict.h"
+
+int main(){
+ dict_t *dict = dictalloc();
+ dictset(dict, 1, "hello");
+ printf("%d:%s\n", dict->id, (char *)dict->data);
+ dictfree(dict);
+}
diff --git a/comp/cw/code/ads/ll/Makefile b/comp/cw/code/ads/ll/Makefile
new file mode 100644
index 0000000..aaf0241
--- /dev/null
+++ b/comp/cw/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/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);
+}
+
diff --git a/comp/cw/code/ads/ll/ll.h b/comp/cw/code/ads/ll/ll.h
new file mode 100644
index 0000000..30830b1
--- /dev/null
+++ b/comp/cw/code/ads/ll/ll.h
@@ -0,0 +1,15 @@
+#include <stdlib.h>
+#include <string.h>
+
+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);
+void llfreeall(ll_t *head);
diff --git a/comp/cw/code/ads/ll/lltest b/comp/cw/code/ads/ll/lltest
new file mode 100755
index 0000000..b98c5de
--- /dev/null
+++ b/comp/cw/code/ads/ll/lltest
Binary files differ
diff --git a/comp/cw/code/ads/ll/lltest.c b/comp/cw/code/ads/ll/lltest.c
new file mode 100644
index 0000000..8aa6514
--- /dev/null
+++ b/comp/cw/code/ads/ll/lltest.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+
+#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));
+
+ llfreeall(head);
+}