在数据结构设计中,经常会在已有的数据结构上进行修改,在初学者学习的时候常常会发现创建的数据结构不听指挥,在调试时发现明明设置了关键字的值,但是在另一个函数中调用的时候则无法调用,比如下面l两段不同的代码.
void insert(Tree tree, node * t)
{
if (tree.empty){
tree.empty = false;
tree.root = t;
return ;
}
//node * parent = tree.root;
int flag = 1;
node * temp = tree.root;
while ( temp && flag){
if (temp->key > t->key)
if (temp->left)
temp = temp->left;
else
flag = 0;
else
if (temp->right)
temp = temp->right;
else
flag = 0;
}
if (temp->key > t->key){
temp->left = t;
t->parent = temp;
}
else {
temp->right = t;
t->parent = temp;
}
//printf(" %d key/n",t->key );
return ;
}
void insert(Tree tree, node * t)
{
if (tree.empty){
tree.empty = false;
tree.root = t;
return ;
}
//node * parent = tree.root;
int flag = 1;
node * temp = tree.root;
while ( temp && flag){
if (temp->key > t->key)
if (temp->left)
temp = temp->left;
else
flag = 0;
else
if (temp->right)
temp = temp->right;
else
flag = 0;
}
if (temp->key > t->key){
temp->left = t;
t->parent = temp;
}
else {
temp->right = t;
t->parent = temp;
}
//printf(" %d key/n",t->key );
return ;
}
注意黄色的两行,如果选择传值的模式(也就是后者),调用这个函数中的原始Tree 是不会改变的, 但是如果使用引用可以实现这个功能.
以后在设计数据结构的时候要注意.
其次引用使用地址实现的.