在數據結構設計中,經常會在已有的數據結構上進行修改,在初學者學習的時候常常會發現創建的數據結構不聽指揮,在調試時發現明明設置了關鍵字的值,但是在另一個函數中調用的時候則無法調用,比如下面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 是不會改變的, 但是如果使用引用可以實現這個功能.
以後在設計數據結構的時候要注意.
其次引用使用地址實現的.