




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
#include<stdio.h>#include<stdlib.h>#inelude<math.h>#inelude<string.h>#defineN1000charkind[N]={'\0'};intnum[N]={0};intcount=0;ints1,s2;typedefstruct{intweight;/*字符權(quán)重*/intparent,lchild,rchild;}HTNode,*HuffmanTree;/*定義哈夫曼樹結(jié)點(diǎn)*/typedefchar**HuffmanCode;structcharcode{chardata;charcode[20];}Code[N],d[N],e[N];voidCreat_message()/*輸入字符并存入文件*/{FILE*fp;charc;if((fp=fopen(”文本文件.txt","wb"))==NULL){printf("cannotopenthisfile!\n");return;}printf("請(qǐng)輸入原代碼,以#表示結(jié)束\n”);do{scanf("%c",&c);fputc(c,fp);}while(c!='#');fclose(fp);}voidCalculate() /*計(jì)算文件中字符的權(quán)值 */{charc;inti=1,k;FILE*fp;if((fp=fopen(”文本文件.txt","rb"))==NULL){printf("cannotopenthisfile\n");return;}c=fgetc(fp);while(c!='#'){for(k=O;k<i;k++)if(c==kind[k]){num[k]++;break;}if(k>=i&&kind[k-1]!=c){kind[i]=c;num[i]++;i++;}c=fgetc(fp);}count=i-1;}voidselect(HuffmanTreeHu,intj) /*尋找輸入的字符數(shù)據(jù)中權(quán)值最小的兩個(gè)結(jié)點(diǎn) */{intk=1,t;while(Hu[k].parent!=O)k++;for(t=k;t<=j;t++)if(Hu[t].parent==O&&Hu[t].weight<Hu[k].weight)k=t;s仁k;k=1;while(Hu[k].parent!=O||k==s1)k++;for(t=k;t<=j;t++)if(Hu[t].weight<Hu[k].weight&&Hu[t].parent==O&&t!=s1)k=t;s2=k;}voidHuffmanCoding() /*構(gòu)建哈夫曼樹并編碼*/{voidselect(HuffmanTreeHu,intj);HuffmanTreeHT;HuffmanCodeHC;intm,i,start,f,c;char*cd;FILE*fp;if(count<=1)return;m=2*count-1;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));for(i=1;i<=count;i++)HT[i].weight=num[i];for(i=1;i<=m;i++){HT[i].parent=O;HT[i].lchild=0;HT[i].rchild=O;}for(i=count+1;i<=m;i++){select(HT,i-1);HT[s1].parent=i;HT[s2].parent=i;HT[i].lchild=s1;HT[i].rchild=s2;HT[i].weight=HT[s1].weight+HT[s2].weight;}HC=(HuffmanCode)malloc((count+1)*sizeof(char*));cd=(char*)malloc(count*sizeof(char));cd[count-1]='\0:for(i=1;i<=count;i++){start=count-1;for(c=i,f=HT[i].parent;f!=O;c=f,f=HT[f].parent)if(HT[f].lchild==c)cd[--start]='0';elsecd[--start]='1';HC[i]=(char*)malloc((count-start)*sizeof(char));strcpy(HC[i],&cd[start]);}if((fp=fopen(”字符代碼.txt","wb"))==NULL){printf("cannotopenthisfile\n");return;}for(i=1;i<=count;i++){Code[i].data=kind[i];strcpy(Code[i].code,HC[i]);fwrite(&Code[i],sizeof(structcharcode),1,fp);}fclose(fp);}voidTransform() /*將字符文件翻譯成代碼文件 */{FILE*fp1,*fp2,*fp3;inti;charc;if((fp仁fopen(”字符代碼.txt","rb"))==NULL){printf("cannotopenthisfile\n");return;}if((fp2=fopen(”文本文件.txt","rb"))==NULL){printf("cannotopenthisfile\n");return;}if((fp3=fopen(”碼本文件.txt","wb"))==NULL){printf("cannotopenthisfile\n");return;}for(i=0;i<count;i++)fread(&d[i],sizeof(structcharcode),1,fp1);while(!feof(fp2)){c=fgetc(fp2);for(i=0;i<count;i++)if(d[i].data==c){fputs(d[i].code,fp3);break;}}fputc(#,fp3);fclose(fp3);}voidTranslate() /*將代碼文件翻譯成字符文件 */{FILE*fp1,*fp2,*fp3;inti,j,k;charc[20]={'\0'};if((fp仁fopen(”碼本文件.txt","rb"))==NULL){printf("cannotopenthisfile\n");return;}if((fp2=fopen(”字符代碼.txt","rb"))==NULL){printf("cannotopenthisfile\n");return;}if((fp3=fopen(”破譯文件.txt","wb"))==NULL){printf("cannotopenthisfile\n");return;}for(i=1;i<=count;i++)fread(&d[i],sizeof(structcharcode),1,fp2);i=0;c[i]=fgetc(fp1);while(c[i]!='#'){for(k=1;k<=count;k++)if(!strcmp(c,d[k].code)){fputc(d[k].data,fp3);for(j=0;j<=i;j++)c[j]='\0';i=-1;break;}c[i]=fgetc(fp1);}fputc('#',fp3);fclose(fpl);fclose(fp2);fclose(fp3);}voidprint1(char*name) /*打印文件函數(shù)*/{FILE*fp;charc;if((fp=fopen(name,"rb"))==NULL){printf("cannotopenthisfile\n");return;}c=fgetc(fp);while(c!='#'){printf("%c",c);c=fgetc(fp);}}voidprint2(char*name) /*打印文件函數(shù)*/{FILE*fp;inti=1;if((fp=fopen(name,"rb"))==NULL){printf("cannotopenthisfile\n");return;}while(!feof(fp)){fread(&e[i],sizeof(structcharcode),1,fp);printf("%c--%s\n",e[i].data,e[i].code);i++;}}voidmain(){Creat_message();printf("您輸入的文本文件是:\n");print1("文本文件.txt");printf("\n");Calculate();HuffmanCoding();
printf(”每個(gè)字符相應(yīng)的哈夫曼編碼是:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材定金合同范本
- 會(huì)計(jì)臨時(shí)勞務(wù)合同范本
- 勞務(wù)派遣合同范本購買
- 協(xié)議證明合同范本
- 業(yè)委會(huì)與物業(yè)委托合同范本
- 別墅規(guī)劃合同范本
- 區(qū)域保護(hù)合同范本
- 農(nóng)村房子修繕承包合同范本
- 公園門衛(wèi)服務(wù)合同范本
- 包裝費(fèi)合同范本
- 2024年社區(qū)工作者考試時(shí)事政治模擬題及答案
- 物業(yè)服務(wù)行業(yè)禮儀培訓(xùn)
- 退市新規(guī)解讀-上海證券交易所、大同證券
- 教育部中國(guó)特色學(xué)徒制課題:現(xiàn)代職業(yè)教育體系建設(shè)背景下中國(guó)特色學(xué)徒制治理體系與資源配置研究
- 22陳涉世家 司馬遷 公開課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì) 度部編版初中語文九年級(jí)下冊(cè)
- 《抗戰(zhàn)中的英雄人物》課件
- 外墻真石漆施工方案
- 森林防火安全生產(chǎn)工作
- 護(hù)理工作十四五規(guī)劃
- 《服裝市場(chǎng)營(yíng)銷》課件
- 網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估報(bào)告模板
評(píng)論
0/150
提交評(píng)論