/*--------------------------HUFFMANCODEFORTEXTFILECOMPRESSION----/*--------------------------HUFFMANCODEFORT EXTFILECOMPRESSION-----------------------------*/ #include
#include /*-------------------------------GLOBALVARIAB /*------------------------------GLOBALVARIABLESDECLARATION---------LESDECLARATION----------------------------------*/ #definemax20 intarray[max]; inti=0; ofstreammyfile("CODES.txt"); /*-----------------------------------NODESTRU /*----------------------------------NODESTRUCTURE-------------------CTURE--------------------------------------------*/ structnode { chardata; intfrequency; intcode[5]; node*next; node*left; node*right; }; structcodenode { intcode[10]; charalphabet; codenode*next; }; /*--------------------------------LINKEDLISTSTRUCTURE---------------/*--------------------------------LINKEDLIST STRUCTURE----------------------------------------*/ structlist { node*first; codenode*codefirst; voidinitialize() { first=NULL; codefirst=NULL; } /*-----------------------------------SORTEDIN /*----------------------------------SORTEDINSERTION-----------------SERTION--------------------------------------------*/ voidinsert(intval,charalphabet) { node*p; p=newnode; p->frequency=val; p->data=alphabet; p->next=NULL; p->left=NULL;
p->right=NULL; if(first==NULL) { first=p; } else { node*curr; node*prev; curr=first; if(curr->next==NULL) { if(curr->frequency>=val) { p->next=curr; first=p; } if(curr->frequencynext=p; } } elseif(first->next!=NULL) { curr=first; if(p->frequency<=curr->frequency) { p->next=curr; first=p; } if(p->frequency>curr->frequency) { curr=first->next; prev=first; while(curr->frequencyfrequency&&curr->next!=NULL) { curr=curr->next; prev=prev->next; } if(p->frequency<=curr->frequency) { p->next=prev->next; prev->next=p; } elseif(curr->next==NULL) { curr->next=p;} } }
} } /*-----------------------------------CODEINSERTION------------------------------------*/ voidcodeinsertion(charletter,intencode[]) { codenode*p; p=newcodenode; p->next=NULL; p->alphabet=letter; for(inti=0;i<10;i++) { if(encode[i]==0||encode[i]==1) p->code[i]=encode[i]; else break; } if(codefirst==NULL) { codefirst=p; } else { codenode*search; search=codefirst; while(search->next!=NULL) { search=search->next; } search->next=p; } } voidcodetraverse() { codenode*print; print=codefirst; while(print!=NULL) { cout<<"Alphabet="<alphabet<code[k]==0||print->code[k]==1) { cout<code[k]; } else break; } print=print->next; cout<
} /*-----------------------------------DELFIRSTCASE------------------------------------*/ boolisemptydelfirst(int&frequency,char&character) { node*del1; if(first==NULL) { cout<<"emptylist"<frequency; character=del1->data; first=first->next; deletedel1; returnfalse; } } /*--------------------------INSERTIONFROMLINKEDLISTTOQ-------------------------------*/ voidgivetoQ() { node*print; print=first; while(print->next!=NULL) { cout<data<<"=="<frequency<next; } cout<data<<"=="<frequency<
}; /*-----------------------------------------QUEUE-------------------------------------------*/ structQueue { node*front; node*rear;
voidinitial() { rear=NULL; front=NULL; } boolisempty() { if(rear==NULL&&front==NULL) returntrue; else returnfalse; } /*-----------------------------------QUEUEINSERTION------------------------------------*/ voidinsert(charx) { node*p; p=newnode; p->data=x; p->frequency=1; p->next=NULL; p->left=NULL; p->right=NULL; if(rear==NULL) { rear=p; front=p; } else { if(duality(x)==false) { rear->next=p; rear=p; } } } /*-----------------------------------QUEUETRAVERSE------------------------------------*/ voidtraverse() { node*search; search=front; if(rear==NULL&&front==NULL) { cout<<"Empty"<
cout<data; cout<<""<frequency<next; } cout<data; cout<<""<frequency<
/*-----------------------------------DUALITYCHECKFORQ------------------------------------*/ boolduality(charinput) { node*search; search=front; intcount=0; while(search!=rear) { if(search->data==input) { count++; search->frequency++; } search=search->next; } if(search->data==input) { count++; search->frequency++; } if(count==0) returnfalse; else returntrue; } /*----------------------------------------REMOVE--------------------------------------------*/ voidremove(char&x,int&f) { node*temp; temp=front; x=temp->data; f=temp->frequency; if(temp->next!=NULL) { front=temp->next; deletetemp; } if(temp->next==NULL) {
deletetemp; front=NULL; rear=NULL; } } /*-----------------------------------SECONDINSERTION------------------------------------*/ voidsimpleinsert(intf,charx) { node*p; p=newnode; p->data=x; p->frequency=f; p->next=NULL; p->left=NULL; p->right=NULL; if(rear==NULL) { rear=p; front=p; } rear->next=p; rear=p; } /*-----------------------------------MAKETREEFROMQUEUE------------------------------------*/ voidmaketree() { node*start; start=front; node*leftnode; node*rightnode; node*last; while(start->next->next!=NULL) { node*nyt; nyt=newnode; nyt->data='*'; leftnode=start; rightnode=start->next; nyt->left=leftnode; nyt->right=rightnode; nyt->frequency=leftnode->frequency+rightnode->frequency; cout<<"NYT"<frequency<<"contains:"<fr equency<frequency<next->next; cout<<"Start:"<data<next=NULL;
rightnode->next=NULL; cout<<"Start:"<data<frequency<next!=NULL) { cout<next->data<next->frequency< next!=NULL"<frequency>=start->next->frequency) { { cout<<"LoopWorked"<data<fre quency<next; cout<<"StartUpdated"<data<frequency<next==NULL) break; } } cout<<"NowStart:"<data<next=start->next; start->next=nyt; start=front; cout<<"ATTHEENDOFTHISSHOW:"<data<frequency<frequency<<"SIBLINGS:"<left->d ata<<""<right->data<data='*'; if(last->frequency>start->frequency) { nyt->right=last; nyt->left=start; } else { nyt->right=start; nyt->left=last; } nyt->frequency=last->frequency+start->frequency; front=rear=nyt; } /*-----------------------------------GENERATINGCODES------------------------------------*/
voidtreetraverse(node*root) { cout<<"Started:TheTraversal"<left); i--; codenode*p; p=newcodenode; for(intj=0;jcode[j]=array[j]; cout<<"p->code["<code[j]<data<alphabet=root->data; cout<data<right); i--; } } /*-----------------------------------CREATEENCODEDFILE------------------------------------*/ voidencodefile() { } /*-----------------------------------DECODETREECREATION------------------------------------*/ voiddecodetree() { } };
voidmain() { charintake,m; char*buff;
intf; Queuek; listl; l.initialize(); k.initial(); ifstreammyfile("input.txt"); if(!myfile) { cout<<"can'tload"<>intake) //while(!myfile.eof()) { //myfile.read(buff,1); //k.insert((char)buff); k.insert(intake); } } while(k.isempty()!=true) { k.remove(m,f); cout<<"Char="<frequency,point->data); point=point->next; } node*tree; tree=k.front; k.traverse(); k.maketree(); cout<<"TREECREATED"<