




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——哈夫曼文本壓縮C語言實現/*文件中有些參數定義的比較大,主要是為了適應較大文件的壓縮*/#include#include#include
#include//用以刪除多余的中間文件#defineM100000000000//最大字符數
intop,co[100];//編碼表的掃描指針,簡易棧co[]typedefstructHfnode//哈弗曼樹結點類型{
intdata;//權值域charzimu;//存儲字母
structHfnode*Lson,*Rson,*next;//兒子鏈域和森林鏈域
}Hfnode,*Hfptr;
typedefstructsnode//靜態數組結點類型{
charc;//字符intf1;//頻度}snode;
typedefstructLnode//編碼表結點類型{charc;structLnode*next;}Lnode,*Lptr;
voidgotoxy(intx,inty){COORDcoord;coord.X=x;coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);}
voidpaint1(){
inti,j;for(j=0;jc=fgetc(fp)p->next=newLnode;p=p->next;
/*putchar(ch[i]);*/i++;
}
putchar(10);fclose(fp);return(i-1);}
intstat(Lptrp,snodech2[],intnum)//統計函數{
inti,j,last=0;for(i=0;ic)j++;if(j==last){}
ch2[j].c=p->c;ch2[j].f1=1;last++;
elsech2[j].f1++;p=p->next;}
return(last);}
voidorder(snodech2[],intn)//冒泡排序{inti,j,k,t;
chara;
for(i=0;idata=M;//構造監視原結點for(i=0;inext=newHfnode;//申請結點
p=p->next;p->Lson=p->Rson=NULL;//做葉節點}
p->zimu=ch2[i].c;
p->data=ch2[i].f1;//讀入葉之權wi
p->next=h;//構成循環鏈returnh;
}
HfptrcreatHftree(Hfptrhead,intn)//構造樹{
inti;
Hfptrp,q,r,t1,t2;
for(i=1;inext;//t1,t2指向兩棵權最小的樹根t2=t1->next;
r->data=t1->data+t2->data;//權值相加r->Lson=t1;//t1,t2做新根r的左右兒子
r->Rson=t2;head->next=t2->next;//從森林中刪去t1,t2
q=head;//準備進行有序插入
p=head->next;//p是探尋指針,q是p的前驅while(1)//循環的為r尋覓有序位置
if(p->datadata)
{q=p;p=p->next;}//尚未找到時,繼續循環
else{r->next=p;q->next=r;break;}//找到后,插入p}//終止for循環
p=head->next;
deletehead;//刪去監視元
return(p);//返回huffman樹之根}
//構造完畢
Lptrpop(intlast){}
voidcodelist(Hfptrp,Lnodelist[],intlast,inta)//造編碼表的函數{if(p->Lson==NULL}
chartrans(inta[])//8位01整數轉換為10進制數{
intj=0,y=0;do
{
y=y+a[j]*(int)pow(2,7-j%8);j++;
list[op].next=pop(last);op++;
return;}
codelist(p->Lson,list,last+1,co[last]=0);codelist(p->Rson,list,last+1,co[last]=1);inti;Lptrhead,p;head=p=newLnode;for(i=0;ic=co[i];
p->next=newLnode;p=p->next;
}
p->c=-1;
return(head);
}while(j%8);return(y);
}
intrestoretree(snodech2[],intnum2,intnum1,charoutfile[])
{}
FILE*out1;inti=0,j=0;
if((out1=fopen(outfile,\{
printf(\文件開啟錯誤!\\n\exit(0);
}
fwrite(fwrite(j=j+4;
for(i=0;ic!=list[j].c)j++;p=list[j].next;i++;
q=q->next;j=0;
while(p->c!=-1p=p->next;
top++;if(top==8)
{fputc(trans(a),out);
top=0;
n++;}}}
if(topLson;elsep=p->Rson;
}
if(!feof(out1)fclose(out2);
DeleteFile(\if(i==-1)return0;elsereturn1;
voidmain(){
intnum1,num2,num3,choice,choice2;charoutfile[30];Lptrstrhead;
snodech2[300];
Lnodelist[3000];//編碼表HfptrHfroot,head;do
{gotoxy(25,0);
printf(\小型文本壓縮器\\n\
printf(\請輸入需要進行的操作:\\n1——壓縮;2——解壓\\n\strhead=newLnode;op=0;
scanf(\gotoxy(0,3);
if(choice==1)//壓縮部分{paint1();//優化界面函數
num1=putdata(strhead);//輸入函數,num1記錄字符總數num2=stat(strhead,ch2,num1);//統計函數,num2記錄葉子數order(ch2,num2);//排序函數
head=inition(num2,ch2);//調用初始化函數
Hfroot=creatHftree(head,num2);//調用造樹函數codelist(Hfroot,list,0,0);//造編碼表gotoxy(0,8);
scanf(\
gotoxy(0,11);
printf(\請稍后...\
num3=restoretree(ch2,num2,num1,outfile);//存儲哈夫曼樹
num3=num3+compress(strhead,list,num1,outfile);//壓縮函數,num3記錄壓縮后的字gotoxy(0,11);
printf(\計算壓縮率gotoxy(0,13);
符數
}{
elseif(choice==2)//還原部分
paint2();//優化界面函數if(recover(ch2))
printf(\操作成功!\
gotoxy(0,1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 滑板禮儀知識培訓
- 頂棚清洗施工方案模板
- 燒傷患者的液體管理
- 鹽堿地綠化施工方案
- 益陽醫學高等專科學校《環境工程土建基礎》2023-2024學年第二學期期末試卷
- 上海紐約大學《臨床輸血學檢驗技術》2023-2024學年第一學期期末試卷
- 天然水源治理方案范本
- 《優化客戶交流的藝術》課件
- 西安電子科技大學長安學院《信息系統分析與設計實驗課》2023-2024學年第二學期期末試卷
- c級危房加固施工方案
- 某電站雙曲拱壩工程施工組織設計
- 藥品零售業中可持續采購的最佳實踐
- 人教版(2015)五年級下學期信息技術第6課視頻知識一起學 教案
- Python語言程序設計(工作手冊式)【實訓題目-含答案】5 字符串與文件答案版
- 抵押變更協議書模板
- 新聞事業管理自考資料
- 中醫治療支氣管哮喘的研究進展
- (高清版)JTT 529-2016 預應力混凝土橋梁用塑料波紋管
- 實驗室安全與管理智慧樹知到期末考試答案2024年
- 第10課+馬克思主義的誕生和國際工人運動的開展【中職專用】《世界歷史》(高教版2023·基礎模塊)
- 化工和危險化學品生產經營單位二十條重大隱患判定標準釋義(中化協)
評論
0/150
提交評論