void OAHT_Rehash( HashTable** HT ) { int i = 0; ElementType* OldTable = (*HT)->Table; /* 새 해시 테이블을 만들고, */ HashTable* NewHT = OAHT_CreateHashTable( (*HT)->TableSize * 2 ); printf("\nRehashed. New table size is : %d\n\n", NewHT->TableSize ); /* 이전의 해시테이블에 있던 데이터를 새 해시테이블로 옮긴다. */ for ( i=0; i<(*HT)->TableSize; i++ ) { if ( OldTable[i].Status == OCCUPIED ) { OAHT_Set( &NewHT, OldTable[i].Key, OldTable[i].Value ); } } /* 이전의 해시테이블은 소멸시킨다. */ OAHT_DestroyHashTable( (*HT) ); /* HT 포인터에는 새로 해시테이블의 주소를 대입한다. */ (*HT) = NewHT; }
int main(void) { HashTable* HT = OAHT_CreateHashTable(11); OAHT_Set(&HT, "MSFT", "Microsoft Corporation"); OAHT_Set(&HT, "JAVA", "Sun Microsystems"); OAHT_Set(&HT, "REDH", "Red Hat Linux"); OAHT_Set(&HT, "APAC", "Apache Org"); OAHT_Set(&HT, "ZYMZZ", "Unisys Ops Check"); OAHT_Set(&HT, "IBM", "IBM Ltd."); OAHT_Set(&HT, "ORCL", "Oracle Corporation"); OAHT_Set(&HT, "CSCO", "Cisco Systems, Inc."); OAHT_Set(&HT, "GOOG", "Google Inc."); OAHT_Set(&HT, "YHOO", "Yahoo! Inc."); OAHT_Set(&HT, "NOVL", "Novell, Inc."); printf("\n"); printf("Key:%s, Value:%s\n", "MSFT", OAHT_Get(HT, "MSFT")); printf("Key:%s, Value:%s\n", "JAVA", OAHT_Get(HT, "JAVA")); printf("Key:%s, Value:%s\n", "REDH", OAHT_Get(HT, "REDH")); printf("Key:%s, Value:%s\n", "APAC", OAHT_Get(HT, "APAC")); printf("Key:%s, Value:%s\n", "ZYMZZ", OAHT_Get(HT, "ZYMZZ")); printf("Key:%s, Value:%s\n", "IBM", OAHT_Get(HT, "IBM")); printf("Key:%s, Value:%s\n", "ORCL", OAHT_Get(HT, "ORCL")); printf("Key:%s, Value:%s\n", "CSCO", OAHT_Get(HT, "CSCO")); printf("Key:%s, Value:%s\n", "GOOG", OAHT_Get(HT, "GOOG")); printf("Key:%s, Value:%s\n", "YHOO", OAHT_Get(HT, "YHOO")); printf("Key:%s, Value:%s\n", "NOVL", OAHT_Get(HT, "NOVL")); OAHT_DestroyHashTable(HT); return 0; }
void OAHT_Rehash(HashTable** HT) { int i = 0; ElementType* OldTable = (*HT)->Table; // 새 해시 테이블 생성 HashTable* NewHT = OAHT_CreateHashTable((*HT)->TableSize * 2); printf("\nRehashed. New table size is : %d\n\n", NewHT->TableSize); for (i=0;i<(*HT)->TableSize;i++) { if (OldTable[i].Status == OCCUPIED) { OAHT_Set(&NewHT, OldTable[i].Key, OldTable[i].Value); } } OAHT_DestroyHashTable((*HT)); (*HT) = NewHT; }