Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <main.h>
- #include <stdlib.h>
- #include <fstream>
- using namespace std;
- int count =0;
- node *tree = NULL;
- int *freqArray = new int[256];
- int *sortArray = new int[256];
- //node *nodeArray = new *node[256];
- node* nodeArray[256];
- int nodeSize = 256;
- int main(int argc, char** argv)
- {
- char *fileName = argv[1];
- for(int i=0; i<256; i++)
- {
- freqArray[i]=0;
- sortArray[i]=0;
- }
- int character =0;
- char realCharacter= ' ';
- ifstream inputFile(fileName);
- if(inputFile.is_open())
- {
- inputFile>>realCharacter;
- while(!inputFile.eof())
- {
- character = realCharacter;
- freqArray[character]++;
- sortArray[character]++;
- inputFile >> realCharacter;
- }
- }
- cout << "Size of node = " << sizeof(node) << endl;
- for(int i=0; i<256;i++)
- {
- node *newNode = new node;
- int useThis = findMax();
- newNode->letter=useThis;
- newNode->weight=freqArray[useThis];
- nodeArray[i] = newNode;
- }
- while (nodeSize>1)
- {
- int firstMin =0;
- int secondMin=0;
- node *tempNode = new node;
- firstMin=findMin(-1);
- secondMin = findMin(firstMin);
- if(nodeArray[firstMin]->letter > -1)
- {
- tempNode->left=nodeArray[firstMin];
- tempNode->right=nodeArray[secondMin];
- }
- else
- {
- tempNode->right=nodeArray[firstMin];
- tempNode->left= nodeArray[secondMin];
- }
- tempNode->letter=-1;
- // cout<<someCount<<endl;
- //cout<<tempNode->left->letter<<endl;
- // cout<<tempNode->right->letter<<endl;
- /*
- if(tempNode->left->letter== tempNode->right->letter)
- {
- cout<<"Left node: "<<tempNode->left->letter<<" Right node: "<<tempNode->right->letter<<endl;
- cout<<"First min: "<<firstMin<<" Second min: "<<secondMin<<endl;
- cout<<"Size: " <<nodeSize<<endl;
- }*/
- tempNode->weight = tempNode->left->weight + tempNode->right->weight;
- if(firstMin<secondMin)
- {
- nodeArray[firstMin] = tempNode;
- nodeArray[secondMin]= nodeArray[nodeSize-1];
- }
- else
- {
- nodeArray[secondMin] = tempNode;
- nodeArray[firstMin]=nodeArray[nodeSize-1];
- }
- nodeSize--;
- }
- cout<<"Left node: "<<nodeArray[0]->left->left->left->left->left->left->letter<<endl;
- cout<<"Right node: "<<nodeArray[0]->right->letter<<endl;
- //cout<<freqArray[101]<<endl;
- }
- //Finds the maximum of sortArray
- int findMin (int skip)
- {
- int currentMin;
- int currentIndex;
- if(skip!=nodeSize-1)
- {
- currentMin =nodeArray[nodeSize-1]->weight;
- currentIndex = nodeSize-1;
- }
- else
- {
- currentMin = nodeArray[nodeSize-2]->weight;
- currentIndex = nodeSize-2;
- }
- for(int i=nodeSize-1;i>-1;i--)
- {
- if(i!=skip && nodeArray[i]->weight < currentMin)
- {
- currentMin = nodeArray[i]->weight;
- currentIndex = i;
- }
- }
- return currentIndex;
- }
- int findWeight(node *root)
- {
- if(root->letter>-1)
- return freqArray[root->letter];
- if(root->weight>-1)
- return root->weight;
- else
- return (findWeight(root->left)+findWeight(root->right));
- }
- int findMax ()
- {
- int currentMax = -1;
- int currentIndex =0;
- for(int i=0;i<256;i++)
- {
- if(sortArray[i]>currentMax)
- {
- currentMax=sortArray[i];
- currentIndex = i;
- }
- }
- sortArray[currentIndex] = -2;
- return currentIndex;
- }
- HEADER FILE FOLLOWS:
- struct node
- {
- int letter;
- int weight;
- node *left;
- node *right;
- };
- int findMin (int skip);
- int findWeight(node *root);
- int findMax ();
Add Comment
Please, Sign In to add comment