首先,我們來看看main函數(shù):
void main()
{
char choice=' ';
while(choice!='q')
{ cout<<"\n******************************"< cout<<" 歡迎使用赫夫曼編碼譯碼系統(tǒng)"< cout<<"******************************"< cout<<"(1)要初始化赫夫曼鏈表請輸入'i'"< cout<<"(2)輸入要編碼的字符'w'"< cout<<"(3)要編碼請輸入'e'"< cout<<"(4)要譯碼請輸入'd'"< cout<<"(5)要打印編碼請輸入'p'"< cout<<"(6)要打印赫夫曼樹請輸入't'"< cout<<"(7)要離開請輸入'q'"< if(flag==0)cout<<"\n請先初始化赫夫曼鏈表,輸入'i'"< cin>>choice;
switch(choice)
{
case 'i':
Initialization();
break;
case 'w':
InputCode();
break;
case 'e':
Encoding();
break;
case 'd':
Decoding();
break;
case 'p':
Code_printing();
break;
case 't':
Tree_printing(HT,2*n-1);
break;
case 'q':
break;
default:
cout<<"input error"< }
}
free(z);
free(w);
free(HT);
}
這個(gè)函數(shù)主要就是和用戶交互使用。這個(gè)過程我用switch case 來實(shí)現(xiàn),你們也可以選擇其他的方式實(shí)現(xiàn)如if else ,這個(gè)就個(gè)人愛好選擇。下面我們來看看初始化赫夫曼樹的函數(shù)Initialization()。
void Initialization()
{
flag=1;
int num;
int num2;
cout<<"下面初始化赫夫曼鏈表"< cin>>num;
n=num;
w=(int*)malloc(n*sizeof(int));
z=(char*)malloc(n*sizeof(char));
cout<<"\n請依次輸入"< char base[2];
for(i=0;i {
cout<<"第"< gets(base);//這個(gè)地方有點(diǎn)小小的問題
*(z+i)=*base;
}
for(i=0;i<=n-1;i++)
{
cout< }
cout<<"\n請依次輸入"< for(i=0;i<=n-1;i++)
{
cout< cin>>num2;
*(w+i)=num2;
}
HuffmanCoding(HT,HC,w,n);
//------------------------打印編碼-------------------------------------------
cout<<"字符對應(yīng)的編碼為:"< for(i=1;i<=n;i++)
{
//cout<<"字符"<<*(z+i-1)<<"的編碼";
puts(HC[i]);
}
//--------------------------將赫夫曼編碼寫入文件------------------------
cout<<"下面將赫夫曼編碼寫入文件"< FILE *hfmTree;
char r[]={' ','\0'};
if((hfmTree=fopen("hfmTree.txt","w"))==NULL)
{
cout<<"can not open file"< return;
}
fputs(z,hfmTree);
for(i=0;i {
fprintf(hfmTree,"%6d",*(w+i));
fputs(r,hfmTree);
}
for(i=1;i<=n;i++)
{
fputs(HC[i],hfmTree);
fputs(r,hfmTree);
}
fclose(hfmTree);
cout<<"已將字符與對應(yīng)編碼寫入根目錄下文件hfmTree.txt中"< }

