im a student of 2nd year BS, doing my BS in Computer Science. Here I want to include a program by me, may be someone will be helped by me :)
#include<stdio.h> #include<conio.h> #include<stdlib.h> int* createHashTable(void); void getData(void); void formatting(void); int insertData(int); float chkLoadFactor(int, int); int collision_LinearProbing(int, int,int); int generateKey(int); void rehashing(void); #define dataSize 15 #define empty -1 #define fail 0 #define success 1 int dataArray[dataSize]; int hashSize = 5; int* head; int* cur; void main(void) { int count, status; int filledSpaces = 0; float loadFactor = 0; clrscr(); formatting(); getData(); head = createHashTable(); for( count = 0; count < dataSize ; count++) { if(loadFactor > 0.5) rehashing(); status = insertData(dataArray[count]); if(status == success) filledSpaces++; loadFactor = chkLoadFactor(status, filledSpaces); if(loadFactor <= 0.5) printf("LF aftr %d is = %f\t", dataArray[count], loadFactor); if(status == fail) printf("\nNo room left for %d\n", dataArray[count]); } cur = head; printf("\n\nHash Table content = ["); for(count = 0; count < hashSize ; count++) { printf("%d, ", *cur); cur++; } printf("\b\b]"); getch(); } int* createHashTable(void) { int i; /********************** Allocating Memory for Hash Table *********************/ head = (int*)malloc(sizeof(hashSize*2)); cur = head; /********************** Initialize HashTable *********************************/ for( i = 0; i <=hashSize; i++) { *cur = empty; cur++; } cur = head; return(head); } void getData(void) { int i; randomize(); printf("\n"); printf("Data[]={"); for(i =0; i < dataSize; i++) { dataArray[i] = random(50); printf("%d,", dataArray[i]); } printf("\b}\n\n"); } void formatting(void) { int i; printf("\n"); for(i =0; i<=79 ; i++) printf("*"); printf("\n......... Prgogram title\t\t# Hash Table"); printf("\n......... Created by\t\t # Romasa Qasim"); printf("\n......... Description\t\t # Creation of Hash Table, generation of,"); printf("\t\t\t\t\t Key, Insertion, Searching and Deletion"); printf("\t\t\t\t\t of data in the Hash Table\n"); for( i =0; i<=79 ; i++) printf("*"); } int insertData(int data) { int hashIndex,count = 0; hashIndex = generateKey(data); if( *(head+hashIndex) == empty) { *(head+hashIndex) = data; return(success); } else return(collision_LinearProbing((++hashIndex%hashSize), count, data)); } float chkLoadFactor(int status, int filledSpaces) { float loadFactor; if (status == success) { loadFactor = filledSpaces / (float)hashSize; return(loadFactor); } else return(1); } int collision_LinearProbing(int hashIndex, int count, int data) { if(count == hashSize) return(fail); if (*(head+hashIndex) == empty) { *(head+hashIndex) = data; return(success); } else { collision_LinearProbing((++hashIndex % hashSize), ++count, data); } } int generateKey(int data) { int key; key = data % hashSize; return(key); } void rehashing(void) { int count; int status; hashSize = hashSize * 2; head = (int*)realloc(head, sizeof(hashSize*2)); for( count = 0; count <hashSize; count++) { *(head+count) = -1; } for(count = 0; count < dataSize; count++) { status = insertData(dataArray[count]); } }
Hey, we appreciate your goodwill but this is not the way to do so. Go to 'contribute code' in the 'code snippets' section. Forums are meant only for problem solving.
I think I got to 10 bugs, then stopped counting.
nice job... but code is difficult for understanding