Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Shitty program

Name: Anonymous 2010-05-24 23:11

Hi /prog/. I'm learning C, and wrote a program that takes a bunch of numbers and sorts them using a binary tree. I know it's not an efficient way to sort, I'm just learning binary trees. Could you look over it real quick and just give me some comments, like if there was something you would have done differently or something that's just stupid. Thanks a lot.

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

struct node_ {
        int value;
        struct node_ *left, *right;
};

typedef struct node_ node;

node *insert(node *parent, int newval)
{
        if (!parent) {
                node *n = malloc(sizeof(node));
                n->value = newval;
                return n;
        }
        else if (newval == parent->value)
                return parent;
        else if (newval < parent->value) {
                parent->left = insert(parent->left, newval);
                return parent;
        }
        else {
                parent->right = insert(parent->right, newval);
                return parent;
        }
}

void print(node *top)
{
        if (!top)
                return;

        print(top->left);
        printf("%d ", top->value);
        print(top->right);
}

int main(int argc, char *argv[])
{
        puts("enter values, 0 to stop");
       
        int next;
        scanf("%d", &next);
       
        node *root = 0;
       
        while (next) {
                root = insert(root, next);
                scanf("%d", &next);
        }

        print(root);
        puts("");

        return 0;
}

Name: Anonymous 2010-05-26 0:25

>>40
I already made my counter argument to that. There's also the niggling issue with void and converted pointers. Niggling because it's rarely practical, but the fact is your form does fail to cover valid possibilities, not all of which are bad form.

Besides, the information is there, only indirectly. The problem is that by using the typed variable instead of the type itself hides that information from the person reading the code. It should be obvious this is bad: the cost of being explicit here is virtually nothing. Will no one else ever read your code? And to take the extreme: it's not like allocating to the stack using a typed variable in place of the type itself is a good idea, but you can totally do it.

Name: Anonymous 2010-05-26 3:08

>>22
I just copied the functionality he had but wrote it with cleaner if/else statements and with the returns.

Name: Anonymous 2010-05-26 14:13

>>42
No, they are different when parent is null.

Name: Anonymous 2010-05-27 14:20

>>43
Well I'll be damned. I didn't even realize that

Name: Anonymous 2010-11-27 7:44

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List