int main() { int capacity = 11, i; HashTablePtr t = newHashTable(capacity, hashInt, compare); HashNodePtr node; putIntoHashTable(t, 1, 1); putIntoHashTable(t, 2, 2); putIntoHashTable(t, 3, 3); putIntoHashTable(t, 4, 4); putIntoHashTable(t, 5, 5); printHashTable(t); for(i = 0; i <= 5; i++) { HashNodePtr node = getFromHashTable(t, i); if(node) { printf("key %d values %d\n", node->key, node->value); } else { printf("cann't find key %d\n", i); } } for(i = 11; i <= 16; i++) { HashNodePtr node = getFromHashTable(t, i); if(node) { printf("key %d values %d\n", node->key, node->value); } else { printf("cann't find key %d\n", i); } } removeFromHashTable(t, 2); removeFromHashTable(t, 3); printHashTable(t); putIntoHashTable(t, 2, 2); putIntoHashTable(t, 13, 13); putIntoHashTable(t, 24, 24); printHashTable(t); removeFromHashTable(t, 2); printHashTable(t); node = getFromHashTable(t, 13); printf("key %d values %d\n", node->key, node->value); node = getFromHashTable(t, 24); printf("key %d values %d\n", node->key, node->value); putIntoHashTable(t, 35, 35); printHashTable(t); freeHashTable(t); return 0; }
long memo_coin_sums(int* dens, int size, int amount, HashTable *memo) { Tuple* tuple = convert_to_tuple(dens, size, amount); if(inHashTable(tuple, memo)) { return getFromHashTable(memo, tuple); } else { if(amount<0) return 0; else if(amount==0) return 1; else if(size==1) { if(amount%dens[0]==0) return 1; else return 0; } else { long result = memo_coin_sums(dens, size-1, amount, memo) + memo_coin_sums(dens, size, amount-dens[size-1], memo); insertInHashTable(memo, tuple, result); return result; } } }
void removeFromHashTable(HashTablePtr t, KeyType key) { HashNodePtr node = getFromHashTable(t, key); if(node) { node->status = DELETED; } }