summaryrefslogtreecommitdiffhomepage
path: root/misc/examples/linkedlists/list.c
diff options
context:
space:
mode:
authortylov <[email protected]>2023-07-20 15:09:10 +0200
committertylov <[email protected]>2023-07-20 15:12:29 +0200
commit900295256d825fc323149cd223c49787f32a3696 (patch)
tree6c79cf4209e3975bb6865e2940b9cb56ea469c73 /misc/examples/linkedlists/list.c
parent224a04f7fa7549ed94d2a1415eb25829e39a7cca (diff)
downloadSTC-modified-900295256d825fc323149cd223c49787f32a3696.tar.gz
STC-modified-900295256d825fc323149cd223c49787f32a3696.zip
Moved examples to sub-directories. Added cotask1.c cotask2.c examples.
Diffstat (limited to 'misc/examples/linkedlists/list.c')
-rw-r--r--misc/examples/linkedlists/list.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/misc/examples/linkedlists/list.c b/misc/examples/linkedlists/list.c
new file mode 100644
index 00000000..ad8bebb8
--- /dev/null
+++ b/misc/examples/linkedlists/list.c
@@ -0,0 +1,64 @@
+#include <stdio.h>
+#include <time.h>
+#include <stc/algo/filter.h>
+#include <stc/crand.h>
+
+#define i_type DList
+#define i_key double
+#define i_cmp_native
+#include <stc/clist.h>
+
+int main(void) {
+ const int n = 3000000;
+ DList list = {0};
+
+ crand_t rng = crand_init(1234567);
+ int m = 0;
+ c_forrange (n)
+ DList_push_back(&list, crand_f64(&rng)*n + 100), ++m;
+
+ double sum = 0.0;
+ printf("sumarize %d:\n", m);
+ c_foreach (i, DList, list)
+ sum += *i.ref;
+ printf("sum %f\n\n", sum);
+
+ c_forfilter (i, DList, list, c_flt_take(i, 10))
+ printf("%8d: %10f\n", c_flt_getcount(i), *i.ref);
+
+ puts("sort");
+ DList_sort(&list); // qsort O(n*log n)
+ puts("sorted");
+
+ c_forfilter (i, DList, list, c_flt_take(i, 10))
+ printf("%8d: %10f\n", c_flt_getcount(i), *i.ref);
+ puts("");
+
+ DList_drop(&list);
+ list = c_init(DList, {10, 20, 30, 40, 30, 50});
+
+ const double* v = DList_get(&list, 30);
+ printf("found: %f\n", *v);
+
+ c_foreach (i, DList, list)
+ printf(" %g", *i.ref);
+ puts("");
+
+ DList_remove(&list, 30);
+ DList_insert_at(&list, DList_begin(&list), 5); // same as push_front()
+ DList_push_back(&list, 500);
+ DList_push_front(&list, 1964);
+
+ printf("Full: ");
+ c_foreach (i, DList, list)
+ printf(" %g", *i.ref);
+
+ printf("\nSubs: ");
+ DList_iter it = DList_begin(&list);
+
+ c_foreach (i, DList, DList_advance(it, 4), DList_end(&list))
+ printf(" %g", *i.ref);
+ puts("");
+
+ DList_drop(&list);
+}