【发布时间】:2022-11-09 19:40:51
【问题描述】:
我有这样的代码
#ifndef hashtable
#define hashtable
// define the maxmium size
#define INITIAL_SIZE 5
#define LOAD_FACTOR 0.7
typedef struct hashtable
{
int keyArray[INITIAL_SIZE];
// 1d array of strings with maximum length 100 (plus '\0 character')
char valueArray[INITIAL_SIZE][100 + 1];
bool isActiveArray[INITIAL_SIZE]; // for deleting elements
int count;
int capacity;
double loadFactor;
// true: linear probing, false: quadratic probing
bool collisionHandler;
} table;
#endif
在hashtable.h 文件中
我在其中定义了一个带有键数组和值数组等的哈希表。
我对如何调整哈希表的大小感到困惑,因为每当创建一个新结构以调整大小时,我都会遇到无法更改我的INITIAL_SIZE 的问题,尤其是在#define 语句中,尽管我想做一个新表的容量为2*INITIAL_SIZE 等等......
这是我的 initTable() 代码,我在其中制作表格以防万一
void initTable(table* p, int size, double loadFactor, bool collisionHandler) {
// constructor
p->count = 0;
p->capacity = size;
p->loadFactor = loadFactor;
p->collisionHandler = collisionHandler;
memset( p->keyArray, 0, sizeof p->keyArray );
memset( p->valueArray, 0, sizeof p->valueArray );
memset( p->isActiveArray, 0, sizeof p->isActiveArray );
}
即使完全删除 INITIAL_SIZE,如何调整数组大小,接受任何建议
谢谢您的帮助, 座位
【问题讨论】:
-
使用
INITIAL_SIZE作为数组大小意味着它的常量,您想调整数组的大小,所以不要使用常量