我有一个结构可以为这样的BST创建节点
struct BSTNode{
int data;
BSTNode *left;
BSTNode *right;
};
我需要在类内部创建这些根节点的数组
class HashBST{
public:
bool lookup(int);
void insert(int);
bool remove(int);
float getLoad();
//private:
int hash(int);
BSTNode *table[1019];
float load;
int occupied = 0;
int tableSize = 1019;
};
从那里我希望能够检查并查看BST节点是否具有条目。最初,我尝试在结构定义中将data
int设置为-1,但是在类的数组中,每个节点都有一个垃圾数据值。
是否有一种方法可以将所有数据值设置为-1,或更理想的方法是将table
数组中的所有指针都设置为NULL
,直到其中存储了一些指针?
答案 0 :(得分:-1)
是否可以将所有数据值设置为-1,
并不是因为节点的设计暗示了哈希表的特定设计。由于您有节点,这意味着您使用separate chaining来解决哈希表冲突。
这意味着您的存储区数组table
需要使用空指针进行初始化,否则它将包含不确定的值:
BSTNode* table[1019] = {}; // Zero-initialize buckets.
然后lookup
成员函数将如下所示:
bool HashBST::lookup(int value) {
unsigned value_hash = hash(value); // Hash must be an unsigned value.
unsigned index = value_hash % tableSize;
for(BSTNode* node = table[index]; node; node = node->right) {
if(node->data == value)
return true;
}
return false;
}
在更高级的版本中,存储桶表应该只是指针BSTNode* table;
,其指针将以new[]
的结果进行初始化,所引用表的大小在tableSize
中。
答案 1 :(得分:-1)
这是我将以C ++友好的方式进行的操作:
首先,将dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[self presentViewController:popUpController animated:NO completion:^{
self->interactionDisabledLayer.alpha = 0.0f;
}];
});
转换为table
:
std::vector
为std::vector<BSTNode*> table
创建一个构造函数,该构造函数使用所有nullptr值初始化HashBst
。
std::vector<T*>