2011-03-27 86 views
0

我刚刚在课堂上被分配了一个在C中完成的项目,但是我的教授没有教任何关于C的东西,所以我只是试着去学习。C构造节点

如何将值分配给节点的不同部分?

运行我的主要代码是:(这是在分配给)

Node n2, n3, n4, times, plus; 

setNode(&n2, 2, NULL, NULL, true); 
setNode(&n3, 3, NULL, NULL, true); 
setNode(&n4, 4, NULL, NULL, true); 

printf("\n"); 

setNode(&times, '*', &n3, &n4, true); 
setNode(&plus, '+', &n2, &times, true); 

printf(" Tree evaluation: %d\n\n", eval(&plus)); 

,并在头文件:

typedef struct Node_t { 
    int    value; 
    struct Node_t *left; 
    struct Node_t *right; 
} Node, *Node_p; 

我至今对setNode是:

void setNode(Node_p np, 
     int value, 
     Node_p left, 
     Node_p right, 
     bool display) { 

np->value; 
} 

如何填写左侧和右侧的值?我如何以另一种方式访问​​它们eval

我一直在谷歌搜索几天,无法弄清楚我在找什么。我很了解Obj-C,但这只是我的头脑。任何答案或资源的链接都会很棒。

回答

2

给定一个Node_p这是一个指向struct Node_t,您可以访问使用箭头操作符(->)对象的成员。因此,在setNode()函数中,您可以像访问value一样访问leftright并设置它们的值。

void setNode(Node_p np, 
    int value, 
    Node_p left, 
    Node_p right, 
    bool display) { 

    np->value = value; /* sets the value field */ 
    np->left = left; /* sets the left field */ 
    np->right = right; /* sets the right field */ 
    /* and so on... */ 
} 

请注意,如果您有指向任何结构体或联合体对象的指针,则可以使用箭头运算符来访问成员。

看看如何使用eval(),它看起来也需要Node_p以及。所以要访问成员,使用箭头运算符的方式完全相同,除非您可能正在读取值,而不是设置它们。

例如,

void eval(Node_p np) { 
    int value = np->value; /* read the value field */ 
    Node_p left = np->left; /* read the left field */ 
    Node_p right = np->right; /* read the right field */ 
} 
2

分配指针值相同的方式,你会(很不幸,你不这样做目前:))正常值

value应通过分配:

np->value = value; 

setNode()功能。

至于如何访问它们,它是一样的。在你eval,你可以这样做:

printf("This is my value: %d\n", np->value); 

要获取另一个节点,你会说:

Node_p anotherNodePointer = np->left; 
2

直接分配struct(如Node),用途:

var.name = value; 

若要通过指针指定struct(例如,对于Node _p),请使用:

var->name = value; 
+0

呀,我不能说我关心这样的类型定义。很容易错过。 – 2011-03-27 18:47:16

2

正是这种简单:

void setNode(Node_p np, 
     int value, 
     Node_p left, 
     Node_p right, 
     bool display) 
{ 
    np->value = value; 
    np->left = left; 
    np->right = right;   
}