tree.c
author Markus Bröker <mbroeker@largo.dyndns.tv>
Sat, 13 Dec 2008 12:58:26 +0100
changeset 0 af501b0c1716
child 9 c3fecc82ade6
permissions -rw-r--r--
demos cvs copy committer: Markus Bröker <mbroeker@largo.homelinux.org>

/**
 *     $Id: tree.c,v 1.1.1.1 2008-04-28 17:32:53 mbroeker Exp $
 * $Source: /development/c/demos/tree.c,v $
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#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;
}