diff --git a/tree.c b/tree.c new file mode 100644 --- /dev/null +++ b/tree.c @@ -0,0 +1,69 @@ +/** + * $Id: tree.c,v 1.1.1.1 2008-04-28 17:32:53 mbroeker Exp $ + * $Source: /development/c/demos/tree.c,v $ + * + */ + +#include +#include +#include + +#define GETRANDOM(max) (1+(int)((float)max*rand()/RAND_MAX+1.0)) + +struct T { + int data; + struct T *next; +}; + +typedef struct T T; + +T *make_list (int elements, int rand_max) +{ + int i; + T *t; + T *actual; + T *first = NULL; + + srand (time (NULL)); + + if ((t = malloc (sizeof (T) + 1)) == NULL) { + perror ("MALLOC"); + return first; + } + + t->data = GETRANDOM (rand_max); + t->next = NULL; + + first = t; + + for (i = 1; i < elements; i++) { + if ((actual = malloc (sizeof (T) + 1)) == NULL) + break; + actual->data = GETRANDOM (rand_max); + actual->next = NULL; + t->next = actual; + t = actual; + } + return first; +} + +int main (int argc, char **argv) +{ + T *t, *actual; + + if (argc != 3) { + printf ("Usage: %s elements rand_max\n", argv[0]); + return EXIT_SUCCESS; + } + + t = make_list (atoi (argv[1]), atoi (argv[2])); + + while (t) { + printf ("%d\n", t->data); + actual = t->next; + free (t); + t = actual; + }; + + return EXIT_SUCCESS; +}