Partially Initialize PA07
++ PA07 Files ++ Makefile for PA07
This commit is contained in:
parent
b7cb3dc9e0
commit
cc4036d8ad
12 changed files with 3290 additions and 0 deletions
171
PA07-1025/PA07_Main.c
Normal file
171
PA07-1025/PA07_Main.c
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
// header files
|
||||
#include "File_Input_Utility.h"
|
||||
#include "BST_Utility.h"
|
||||
|
||||
// constant definitions
|
||||
// none
|
||||
|
||||
// prototypes
|
||||
int getDataFromFile( const char *fileName, StateDataType **rootPtr );
|
||||
|
||||
// main function
|
||||
int main( int argc, char *argv[] )
|
||||
{
|
||||
StateDataType *rootPtr, *cpdRootPtr;
|
||||
StateDataType toRemove, removedVal;
|
||||
int startNumber = 0;
|
||||
char fileName[ STD_STR_LEN ] = "StateTempData.csv";
|
||||
char stateString[ STD_STR_LEN ];
|
||||
|
||||
// set title
|
||||
printf( "\nBinary Search Tree Test Program\n" );
|
||||
printf( "===============================\n" );
|
||||
|
||||
// initialize iterator
|
||||
initializeBST( &rootPtr );
|
||||
|
||||
// upload data, check for success
|
||||
// function: getDataFromFile
|
||||
if( getDataFromFile( fileName, &rootPtr ) > 0 )
|
||||
{
|
||||
// show in order traversal
|
||||
// function: displayInOrder
|
||||
printf( "\nIn order traversal: \n" );
|
||||
startNumber = 0;
|
||||
displayInOrder( rootPtr, &startNumber );
|
||||
|
||||
printf( "\nCreating duplicate tree\n" );
|
||||
cpdRootPtr = copyTree( rootPtr );
|
||||
|
||||
printf( "\nInorder Display of copied tree:\n" );
|
||||
startNumber = 0;
|
||||
displayInOrder( cpdRootPtr, &startNumber );
|
||||
|
||||
printf( "\nRemoving North Carolina\n" );
|
||||
privateCopyString(toRemove.state, "North Carolina" );
|
||||
removeItem( &rootPtr, &removedVal, toRemove );
|
||||
stateDataToString( removedVal, stateString );
|
||||
printf( "Removed from Tree: %s\n", stateString );
|
||||
|
||||
printf( "\nPreorder Display:\n" );
|
||||
startNumber = 0;
|
||||
displayPreOrder( rootPtr, &startNumber );
|
||||
|
||||
printf( "\nRemoving Alabama\n" );
|
||||
privateCopyString(toRemove.state, "Alabama" );
|
||||
removeItem( &rootPtr, &removedVal, toRemove );
|
||||
stateDataToString( removedVal, stateString );
|
||||
printf( "Removed from Tree: %s\n", stateString );
|
||||
|
||||
printf( "\nPostorder Display:\n" );
|
||||
startNumber = 0;
|
||||
displayPostOrder( rootPtr, &startNumber );
|
||||
|
||||
printf( "\nRemoving Wyoming\n" );
|
||||
privateCopyString(toRemove.state, "Wyoming" );
|
||||
removeItem( &rootPtr, &removedVal, toRemove );
|
||||
stateDataToString( removedVal, stateString );
|
||||
printf( "Removed from Tree: %s\n", stateString );
|
||||
|
||||
printf( "\nInorder Display:\n" );
|
||||
startNumber = 0;
|
||||
displayInOrder( rootPtr, &startNumber );
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
printf( "\nERROR: Data not found - program aborted\n" );
|
||||
}
|
||||
// end program
|
||||
|
||||
// clear BST
|
||||
// function: clearTree
|
||||
rootPtr = clearTree( rootPtr );
|
||||
cpdRootPtr = clearTree( cpdRootPtr );
|
||||
|
||||
// show program end
|
||||
// function: printf
|
||||
printf( "\nEnd Program\n" );
|
||||
|
||||
// return success
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Name: getDataFromFile
|
||||
Process: uploads data from file with unknown number of data sets,
|
||||
has internal Boolean to test for data input success
|
||||
Function input/parameters: file name (char *)
|
||||
Function output/parameters: pointer to BST head pointer (StateDataType **)
|
||||
Function output/returned: number of values found (int)
|
||||
Device input/file: data from HD
|
||||
Device output/monitor: none
|
||||
Dependencies: openInputFile, readStringToLineEndFromFile,
|
||||
readStringToDelimiterFromFile,
|
||||
checkForEndOfInputFile, readCharacterFromFile, readDoubleFromFile,
|
||||
insert, printf, closeInputFile
|
||||
*/
|
||||
int getDataFromFile( const char *fileName, StateDataType **rootPtr )
|
||||
{
|
||||
StateDataType stateDataNode;
|
||||
char dummyInput[ STD_STR_LEN ];
|
||||
int index = 0;
|
||||
bool verbose = true; // Set to true to verify data upload, false otherwise
|
||||
|
||||
if( openInputFile( fileName ) )
|
||||
{
|
||||
if( verbose )
|
||||
{
|
||||
printf( "\nBegin Loading Data From File\n" );
|
||||
}
|
||||
|
||||
readStringToLineEndFromFile( dummyInput );
|
||||
|
||||
readStringToDelimiterFromFile( COMMA, stateDataNode.state );
|
||||
|
||||
while( !checkForEndOfInputFile() )
|
||||
{
|
||||
stateDataNode.avgTemp = readDoubleFromFile();
|
||||
|
||||
// remove comma
|
||||
readCharacterFromFile();
|
||||
|
||||
stateDataNode.lowestTemp = readDoubleFromFile();
|
||||
|
||||
// remove comma
|
||||
readCharacterFromFile();
|
||||
|
||||
stateDataNode.highestTemp = readDoubleFromFile();
|
||||
|
||||
*rootPtr = insert( *rootPtr, stateDataNode );
|
||||
|
||||
if( verbose )
|
||||
{
|
||||
printf( "%2d) State name: %s, ",
|
||||
index + 1, stateDataNode.state );
|
||||
|
||||
printf( "Avg Temp: %5.2f, ", stateDataNode.avgTemp );
|
||||
|
||||
printf( "Low Temp: %5.2f, ", stateDataNode.lowestTemp );
|
||||
|
||||
printf( "High Temp: %5.2f\n", stateDataNode.highestTemp );
|
||||
|
||||
}
|
||||
|
||||
// reprime - read next state name
|
||||
readStringToDelimiterFromFile( COMMA, stateDataNode.state );
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
if( verbose )
|
||||
{
|
||||
printf( "End Loading Data From File\n\n" );
|
||||
}
|
||||
|
||||
closeInputFile();
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue