В настоящее время я изучаю структуры данных студентов, в частности хэш-карту. Я пытался напечатать мои результаты в конце моей программы с помощью команды printf в основной функции. Несмотря на то, что я использовал эти ключи в предыдущем цикле while, я не могу получить ключи для печати в своей последней части
Я попытался включить функцию insertMap (см. Ниже), используя распечатку, чтобы указать, действительно ли ключ был сохранен и был, так что это не является ошибкой.
int main (int argc, const char * argv[]) {
/*Write this function*/
const char * filename = argv[1];
struct hashMap ht;
char * entWord;
int * oldAt;
int repAt;
int i = 0;
FILE * fp = fopen(filename, "r");
initMap(&ht, 100);
while(!feof(fp)){
entWord = getWord(fp);
/* printf("%s \n", entWord); */
if(!containsKey(&ht,entWord))
insertMap(&ht, entWord, 1);
else{
oldAt = atMap(&ht, entWord);
repAt = *oldAt;
removeKey(&ht, entWord);
insertMap(&ht, entWord, repAt+1);
}
free(entWord);
}
for(i = 0; i < ht.tableSize; i++){
if(ht.table[i] != NULL){
printf("%s: %d \n",ht.table[i]->key,ht.table[i]->value);
}
}
fclose(fp);
return 0;
}
void insertMap (struct hashMap * ht, KeyType k, ValueType v)
{ /*write this*/
int idx = stringHash1(k) % ht->tableSize;
struct hashLink * hlnk;
struct hashLink * plink;
assert(ht);
if(ht->table[idx] == NULL){
hlnk = (struct hashLink *) malloc(sizeof(struct hashLink));
hlnk->value = v;
hlnk->key = k;
hlnk->next = NULL;
ht->table[idx] = hlnk;
ht->count++;
}
else{
plink = ht->table[idx];
hlnk = (struct hashLink *) malloc(sizeof(struct hashLink));
hlnk->value = v;
hlnk->key = k;
hlnk->next = plink->next;
plink->next = hlnk;
ht->count++;
}
}