我需要帮助在我的程序中编写一个名为find的函数,它接受一个键和一个整数的引用,用适当的值(如果找到)填充引用,并返回1(true)。如果未找到密钥,则返回0(false)。您可以假设p已指向有效位置。所以:
int find( char *key, int *p );
可以像这样调用:
char *name = "Bob";
int data;
if( find( name, &data ))
printf( "Found %s. (S)he's %i\n\n", name, data );
else
printf( "\nCouldn't find %s\n\n", name );
这是我的程序:
#define TABLE_SIZE 7
#define NUM_INPUTS 7
int hash( char *s )
{
return strlen( s ) % TABLE_SIZE ;
}
typedef struct entry
{
char *key;
int val;
struct entry *next;
} entry;
entry* table[ TABLE_SIZE ] = { NULL };
void insert( char *s, int v )
{
int h = hash( s );
entry *t = (entry*) malloc( sizeof( entry ));
t->key = s;
t->val = v;
t->next = table[h];
table[h] = t;
}
int main()
{
char* keyList[] = { "Jaga", "Jesse", "Cos", "Kate", "Nash", "Vera",
"Bob" };
int valList[] = { 24, 78, 86, 28, 11, 99, 38 };
int i;
for( i=0; i<NUM_INPUTS; ++i )
insert( keyList[i], valList[i] );
/* Probably call function find right here */
return( 0 );
}
int find( char *key, int *p_ans )
{
}
谢谢。
答案 0 :(得分:0)
首先,您需要编写一个keycomp函数原型
int keycomp (struct data left,struct data right);
返回0表示等于,-1表示L> R,1表示R> L。
通过将测试密钥与存储的密钥进行比较,从数据空间链中的原点开始。
因为你有很多我控制,即知道什么时候发生碰撞。 您可以尝试存储测试密钥,如果它直接进入您知道测试密钥没有存储值。如果它发生碰撞,你需要对所有碰撞键做一个keycomp。注意键{2,rhubarb}可能与{37,dog}具有相同的哈希值。
请记住删除这个新创建的虚拟测试记录。