240 lines
6.9 KiB
C
240 lines
6.9 KiB
C
// header files
|
|
#include "File_Input_Utility.h"
|
|
#include "HashUtility.h"
|
|
|
|
// constants
|
|
extern const int ITEM_NOT_FOUND;
|
|
extern const bool USED_NODE;
|
|
extern const bool UNUSED_NODE;
|
|
|
|
// prototypes
|
|
void getQueryObject( StateDataType *returnedState, const char *stateName );
|
|
ProbingHashType *uploadData( char *fileName, int tableSize, int probeType );
|
|
|
|
// main function
|
|
int main( int argc, char *argv[] )
|
|
{
|
|
ProbingHashType *hashTest;
|
|
StateDataType toRemove, removed, toFind, found;
|
|
char toRemoveStr[ MAX_STR_LEN ], removedStr[ MAX_STR_LEN ];
|
|
char toFindStr[ MAX_STR_LEN ], foundStr[ MAX_STR_LEN ];
|
|
int primeTableSize = 67; // recommended to be prime number (or at least odd)
|
|
// and roughly 1.3x the size of the data set
|
|
|
|
// title
|
|
printf( "\nHASH TABLE TEST PROGRAM\n" );
|
|
printf( "=======================\n" );
|
|
|
|
hashTest = uploadData( "inData.csv", primeTableSize, QUADRATIC_PROBING );
|
|
|
|
// display array dump
|
|
displayHashTable( hashTest );
|
|
|
|
// show hash table status
|
|
showHashTableStatus( *hashTest );
|
|
|
|
printf( "\n\nFinding Selected States ----------------------------------\n" );
|
|
|
|
privateCopyString( toFindStr, "Arizona" );
|
|
getQueryObject( &toFind, toFindStr );
|
|
found = findItem( hashTest, toFind );
|
|
stateDataToString( foundStr, found );
|
|
printf( "Found: %s\n", foundStr );
|
|
|
|
privateCopyString( toFindStr, "Iowa" );
|
|
getQueryObject( &toFind, toFindStr );
|
|
found = findItem( hashTest, toFind );
|
|
stateDataToString( foundStr, found );
|
|
printf( "Found: %s\n", foundStr );
|
|
|
|
privateCopyString( toFindStr, "Minnesota" );
|
|
getQueryObject( &toFind, toFindStr );
|
|
found = findItem( hashTest, toFind );
|
|
stateDataToString( foundStr, found );
|
|
printf( "Found: %s\n", foundStr );
|
|
|
|
printf( "\n\nRemoving Selected States ----------------------------------\n" );
|
|
|
|
privateCopyString( toRemoveStr, "Texas" );
|
|
getQueryObject( &toRemove, toRemoveStr );
|
|
if( removeState( &removed, toRemove, *hashTest ) )
|
|
{
|
|
stateDataToString( removedStr, removed );
|
|
printf( "---Removed: %s\n", removedStr );
|
|
}
|
|
else
|
|
{
|
|
printf( "---Failed to remove %s\n", toRemoveStr );
|
|
}
|
|
|
|
privateCopyString( toRemoveStr, "New Mexico" );
|
|
getQueryObject( &toRemove, toRemoveStr );
|
|
if( removeState( &removed, toRemove, *hashTest ) )
|
|
{
|
|
stateDataToString( removedStr, removed );
|
|
printf( "---Removed: %s\n", removedStr );
|
|
}
|
|
else
|
|
{
|
|
printf( "---Failed to remove %s\n", toRemoveStr );
|
|
}
|
|
|
|
privateCopyString( toRemoveStr, "Washington" );
|
|
getQueryObject( &toRemove, toRemoveStr );
|
|
if( removeState( &removed, toRemove, *hashTest ) )
|
|
{
|
|
stateDataToString( removedStr, removed );
|
|
printf( "---Removed: %s\n", removedStr );
|
|
}
|
|
else
|
|
{
|
|
printf( "---Failed to remove %s\n", toRemoveStr );
|
|
}
|
|
|
|
privateCopyString( toRemoveStr, "Maryland" );
|
|
getQueryObject( &toRemove, toRemoveStr );
|
|
if( removeState( &removed, toRemove, *hashTest ) )
|
|
{
|
|
stateDataToString( removedStr, removed );
|
|
printf( "---Removed: %s\n", removedStr );
|
|
}
|
|
else
|
|
{
|
|
printf( "---Failed to remove %s\n", toRemoveStr );
|
|
}
|
|
|
|
privateCopyString( toRemoveStr, "Florida" );
|
|
getQueryObject( &toRemove, toRemoveStr );
|
|
if( removeState( &removed, toRemove, *hashTest ) )
|
|
{
|
|
stateDataToString( removedStr, removed );
|
|
printf( "---Removed: %s\n", removedStr );
|
|
}
|
|
else
|
|
{
|
|
printf( "---Failed to remove %s\n", toRemoveStr );
|
|
}
|
|
|
|
privateCopyString( toRemoveStr, "Quebec" );
|
|
getQueryObject( &toRemove, toRemoveStr );
|
|
if( removeState( &removed, toRemove, *hashTest ) )
|
|
{
|
|
stateDataToString( removedStr, removed );
|
|
printf( "---Removed: %s\n", removedStr );
|
|
}
|
|
else
|
|
{
|
|
printf( "---Failed to remove %s\n", toRemoveStr );
|
|
}
|
|
|
|
// display array dump
|
|
displayHashTable( hashTest );
|
|
|
|
// show hash table status
|
|
showHashTableStatus( *hashTest );
|
|
|
|
// end program
|
|
|
|
// clear hash table
|
|
clearHashTable( hashTest );
|
|
|
|
// show program end
|
|
printf( "\nEnd Program\n" );
|
|
|
|
// return success
|
|
return 0;
|
|
}
|
|
|
|
|
|
void getQueryObject( StateDataType *returnedState, const char *stateName )
|
|
{
|
|
setDataNodeFromData( returnedState, stateName, 0.0, 0.0, 0.0, 0.0 );
|
|
}
|
|
|
|
|
|
/*
|
|
Name: getDataFromFile
|
|
Process: uploads data from file with unknown number of data sets,
|
|
has internal Verbose Boolean to display input operation
|
|
Function input/parameters: file name (char *)
|
|
Function output/parameters: none
|
|
Function output/returned: pointer to hash table (ProbingHashType *)
|
|
Device input/file: data from HD
|
|
Device output/monitor: none
|
|
Dependencies: initializeHashTable, openInputFile, readStringToDelimiterFromFile,
|
|
readDoubleFromFile, readCharacterFromFile, printf,
|
|
addItemFromData, closeInputFile, free
|
|
*/
|
|
ProbingHashType *uploadData( char *fileName, int tableSize, int probeType )
|
|
{
|
|
char stateNameStr[ MAX_STR_LEN ];
|
|
double avgTemp, lowestTemp, highestTemp;
|
|
int index = 0;
|
|
bool verbose = true; // Set to true to verify data upload, false otherwise
|
|
ProbingHashType *tempHashPtr = initializeHashTable( tableSize, probeType );
|
|
|
|
if( openInputFile( fileName ) )
|
|
{
|
|
if( verbose )
|
|
{
|
|
printf( "\n ----- Verbose: Begin Loading Data From File\n" );
|
|
}
|
|
|
|
// get first state name
|
|
readStringToDelimiterFromFile( COMMA, stateNameStr );
|
|
|
|
while( !checkForEndOfInputFile() )
|
|
{
|
|
avgTemp = readDoubleFromFile();
|
|
|
|
// ignores comma
|
|
readCharacterFromFile();
|
|
|
|
lowestTemp = readDoubleFromFile();
|
|
|
|
// ignores comma
|
|
readCharacterFromFile();
|
|
|
|
highestTemp = readDoubleFromFile();
|
|
|
|
if( verbose )
|
|
{
|
|
printf( "State Name: %s | ", stateNameStr );
|
|
|
|
printf( "Average Temp: %5.2f | ", avgTemp );
|
|
|
|
printf( "Lowest Temp: %5.2f | ", lowestTemp );
|
|
|
|
printf( "Highest Temp: %5.2f\n", highestTemp );
|
|
}
|
|
|
|
// add to hash table
|
|
addItemFromData( tempHashPtr, stateNameStr,
|
|
avgTemp, lowestTemp, highestTemp );
|
|
|
|
// reprime - read next state name
|
|
readStringToDelimiterFromFile( COMMA, stateNameStr );
|
|
|
|
index++;
|
|
}
|
|
|
|
if( verbose )
|
|
{
|
|
printf( "\n ----- Verbose: Items found in file: %d\n", index );
|
|
printf( " ----- Verbose: End Loading Data From File\n\n" );
|
|
}
|
|
|
|
closeInputFile();
|
|
}
|
|
|
|
// file not found
|
|
else
|
|
{
|
|
free( tempHashPtr );
|
|
}
|
|
|
|
return tempHashPtr;
|
|
}
|
|
|
|
|
|
|