付費下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、XXX學院本科數(shù)據(jù)結(jié)構(gòu)課程設(shè)計總結(jié)報告設(shè)計題目 :實驗學生姓名 :XXX系別:XXX專業(yè):XXX班級:XXX學號:XXX指導教師 : XXX XXX、哈夫曼編 / 譯碼器2012年6月21日XXX學院課程設(shè)計任務(wù)書題目專業(yè)、班級 XXX學號 XXX 姓名 XXX主要內(nèi)容、基本要求、主要參考資料等:1. 主要內(nèi)容利用哈夫曼編碼進行信息通信可大大提高信道利用率, 縮短信息傳輸時間,降低 傳輸成本。要求在發(fā)送端通過一個編碼系統(tǒng)對待傳數(shù)據(jù)預先編碼; 在接收端將傳 來的數(shù)據(jù)進行譯碼(復原)。對于雙工信道(既可以雙向傳輸信息的信道),每端 都需要一個完整的編/譯碼系統(tǒng)。試為這樣的信息收發(fā)站寫一個哈夫曼的編
2、/譯碼 系統(tǒng)。2. 基本要求系統(tǒng)應(yīng)具有以下功能:(1) C:編碼(Coding)。對文件tobetrans中的正文進行編碼,然后將結(jié)果存 入文件codefile 中,將以此建好的哈夫曼樹存入文件 HuffmanTree中(2) D:解碼(Decoding )。利用已建好的哈夫曼樹將文件 codefile 中的代碼進 行譯碼,結(jié)果存入textfile 中。(3) P:打印代碼文件(Print )。將文件codefile 以緊湊格式顯示在終端上, 每行50個代碼。同時將此字符形式的編碼文件寫入文件codeprint中。(4)T:打印哈夫曼樹(Tree Printing )。將已在內(nèi)存中的哈夫曼樹以
3、直觀的方式(樹或凹入表形式)顯示在終端上,同時將此字符形式的哈夫曼樹寫入文件 treepri nt中。3. 參考資料:數(shù)據(jù)結(jié)構(gòu)(C語言版)嚴蔚敏、吳偉民編著;數(shù)據(jù)結(jié)構(gòu)標準教程胡超、閆寶玉編著完成期限:2012年6月21日指導教師簽名:課程負責人簽名:2012 年 6 月 21 日一、設(shè)計題目(任選其一)實驗一、哈夫曼編/譯碼器二、實驗目的1鞏固和加深對數(shù)據(jù)結(jié)構(gòu)的理解,提高綜合運用本課程所學知識的能力;2深化對算法課程中基本概念、理論和方法的理解;3鞏固構(gòu)造赫夫曼樹的算法;4設(shè)計試驗用程序?qū)嶒灪辗蚵鼧涞臉?gòu)造。三、運行環(huán)境(軟、硬件環(huán)境)Windows xp sp3,Visual C+ 6.0 英
4、文版四、算法設(shè)計的思想(1) 初始化赫夫曼樹,輸入文件tobetra ns.txt中各字符及其權(quán)值,并保存于 hfmtree.txt 文件中(2) 編碼(Coding )。對文件tobetrans中的正文進行編碼,然后將結(jié)果存入文 件 codefile 中(3) D:解碼(Decoding )。利用已建好的哈夫曼樹將文件 codefile 中的代碼進 行譯碼,結(jié)果存入textfile 中。(4) P:打印代碼文件(Print )。將文件codefile以緊湊格式顯示在終端上,每行50個代碼。同時將此字符形式的編碼文件寫入文件codeprint中。(5)T:打印哈夫曼樹(Tree Printin
5、g )。將已在內(nèi)存中的哈夫曼樹以直觀的方式顯示在終端上,同時將此字符形式的哈夫曼樹寫入文件treepri nt中。五、流程圖赫夫曼編/譯碼器六、算法設(shè)計分析1. 赫夫曼樹節(jié)點的數(shù)據(jù)類型定義為:typedef struct /赫夫曼樹的結(jié)構(gòu)體char ch;int weight;/權(quán)值int pare nt,lchild,rchild; HTNode,*HuffmanTree;2. void HuffmanCoding(HuffmanTree &,char *,int *,int);建立赫夫曼樹的算法,此函數(shù)塊調(diào)用了 Select ()函數(shù)。void select(HuffmanTree HT,
6、int j,int *x,i nt *y); 從已建好的赫夫曼樹中選擇 pare nt為0, weight最小的兩個結(jié)點。3 利用已建好的哈夫曼樹從文件hfmtree.txt中讀入,對文件中的正文進行編碼,然后將結(jié)果存入文件codefile.txt 中。4. cod ing編碼功能:對輸入字符進行編碼5. Decod ing譯碼功能:利用已建好的哈夫曼樹將文件 codefile.txt中的代碼進行譯碼,結(jié)果存入文件textfile.txt 中。6. Print()打印功能函數(shù):輸出哈夫曼樹以及對應(yīng)的編碼七、源代碼/#include #include #include / 定義赫夫曼樹結(jié)點的結(jié)構(gòu)
7、體 typedef structchar ch; / 增加一個域,存放該節(jié)點的字符 int weight;int parent,lchild,rchild; HTNode,*HuffmanTree; typedef char *HuffmanCode; /指向赫夫曼編碼的指針void tips(); / 打印操作選擇界面建立赫夫從已建好的void HuffmanCoding(HuffmanTree &,char *,int *,int); / 曼樹的算法void select(HuffmanTree HT,int j,int *x,int *y); / 赫夫曼樹中選擇 parent 為 0,w
8、eight 最小的兩個結(jié)點void Init();void Coding(); / void Decoding(); / void Print_code(); / void Print_tree(); /編碼譯碼打印譯碼好的代碼 打印哈夫曼樹int Read_tree(HuffmanTree &); / 從文件中讀入赫夫曼樹 void find(HuffmanTree &HT,char *code,char *text,int i,int m); / 譯碼時根據(jù) 01 字符串尋找相應(yīng)葉子節(jié)點的遞歸算法 void Convert_tree(unsigned char T100100,int s,
9、int *i,int j); / 將內(nèi)存中的赫夫曼樹轉(zhuǎn)換成凹凸表形式的赫夫曼樹HuffmanTree HT; / 全局變量int n=0; / 全局變量,存放赫夫曼樹葉子結(jié)點的數(shù)目int main()char select;while(1)tips();scanf(%c,&select);switch(select) / 選擇操作,根據(jù)不同的序號選擇不同的操作 case 1:Init();break;case 2:Coding();break;case 3:Decoding();break;case 4:Print_code();break;case 5:Print_tree();break;
10、case 0:exit(1);default :printf(Input error!n);getchar();return 0;void tips() / 操作選擇界面printf( n);printf( -請選擇操作-n);printf( n);printf(n);printf( 1初始化赫夫曼樹 -n)printf( 2編碼 n);printf( 3譯碼 n);printf( 4打印代碼文件 -n);printf( 5打印赫夫曼樹 -n);printf( 0退出 n);printf( n);/ 初始化函數(shù),輸入 n 個字符及其對應(yīng)的權(quán)值,根據(jù)權(quán)值建立哈夫曼樹,并 將其存于文件 hfmtr
11、ee 中void Init()FILE *fp;int i,n,w52; / 數(shù)組存放字符的權(quán)值 char character52; /存放 n 個字符printf(n 輸入字符個數(shù) n:);scanf(%d,&n);/輸入字符集大小printf(”輸入(個字符及其對應(yīng)的權(quán)值:n,n);for (i=0;in;i+)char b=getchar();scanf(%c,&characteri);scanf(%d,&wi);/輸入 n 個字符和對應(yīng)的權(quán)值HuffmanCoding(HT,character,w,n); /建立赫夫曼樹if(fp=fopen(hfmtree.txt,w)=NULL)p
12、rintf(Open file hfmtree.txt error!n);for (i=1;i=2*n-1;i+)if(fwrite(&HTi,sizeof(HTNode),1,fp)!=1) /將建立的赫夫曼樹存入文件 hfmtree.txt 中printf(File write error!n);prin tf(n赫夫曼樹建立成功,并已存于文件 hfmtree.txt 中n);fclose(fp);/ 建立赫夫曼樹的算法void HuffmanCoding(HuffmanTree &HT,char *character,int *w,int n)int m,i,x,y;HuffmanTre
13、e p;if(n=1) return;m=2*n-1;HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT+1,i=1;ich=*character;p-weight=*w;p-parent=0;p-lchild=0;p-rchild=0 ;for(;ich=0;p-weight=0;p-parent=0;p-lchild=0;p-rchild=0; for(i=n+1;i=m;+i)select(HT,i-1,&x,&y);HTx.parent=i;HTy.parent=i;HTi.lchild=x;HTi.rchild=y;HTi.wei
14、ght=HTx.weight+HTy.weight;/ 從 HT1 到 HTj 中選擇 parent 為 0,weight 最小的兩個結(jié)點,用 返回其序號void select(HuffmanTree HT,int j,int *x,int *y)int i;/ 查找 weight 最小的結(jié)點for (i=1;i=j;i+)if (HTi.parent=0)*x=i;break;for (;i=j;i+)if (HTi.parent=0)&(HTi.weightHT*x.weight)*x=i;HT*x.parent=1;/ 查找 weight 次小的結(jié)點for (i=1;i=j;i+)if
15、(HTi.parent=0)*y=i;break;for (;i=j;i+)if (HTi.parent=0)&(i!=*x)&(HTi.weightHT*y.weight) *y=i;codefile 中/ 對文件 tobetrans 中的正文進行編碼,然后將結(jié)果存入文件 void Coding()FILE *fp,*fw;int i,f,c,start;char *cd; HuffmanCode HC;if(n=0)n=Read_tree(HT);/ 從文件 hfmtree.txt 中讀入赫夫曼樹 , 返回葉子結(jié)點 數(shù)/求赫夫曼樹中各葉子節(jié)點的字符對應(yīng)的的編碼,并存于HC指向的空間中HC=
16、(HuffmanCode)malloc(n+1)*sizeof(char*); cd=(char *)malloc(n*sizeof(char);cdn-1=0; for(i=1;i=n;+i)start=n-1;for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent)if(HTf.lchild=c)cd-start=0;else cd-start=1;HCi=(char *)malloc(n-start)*sizeof(char); strcpy(HCi,&cdstart);free(cd);if(fp=fopen(tobetrans.txt,rb)=NULL)
17、printf(Open file tobetrans.txt error!n);if(fw=fopen(codefile.txt,wb+)=NULL)printf(Open file codefile.txt error!n);char temp;fscanf(fp,%c,&temp); / 從文件讀入第一個字符 while(!feof(fp)for(i=1;i=n;i+) if(HTi.ch=temp) break; / for(int r=0;HCir!=0;r+) / fputc(HCir,fw); fscanf(fp,%c,&temp); /在赫夫曼樹中查找字符所在的位置將字符對應(yīng)的編
18、碼存入文件從文件讀入下一個字符 fclose(fw); fclose(fp); printf(n 已將文件 hfmtree.txt 成功編碼 , 并已存入 codefile.txt 中! nn);/ 將文件 codefile 中的代碼進行譯碼,結(jié)果存入文件 textfile 中void Decoding()FILE *fp,*fw;int m,i;char *code,*text,*p;if(n=0)n=Read_tree(HT);/ 從文件 hfmtree.txt 中讀入赫夫曼樹 , 返回葉子結(jié)點 數(shù)if(fp=fopen(codefile.txt,rb)=NULL)printf(Open
19、file codefile.txt error!n);if(fw=fopen(textfile.txt,wb+)=NULL)printf(Open file textfile.txt error!n);code=(char *)malloc(sizeof(char);fscanf(fp,%c,code); / 從文件讀入一個字符 for(i=1;!feof(fp);i+)code=(char *)realloc(code,(i+1)*sizeof(char); / 增加空間 fscanf(fp,%c,&codei); / 從文件讀入下一個字符codei-1=0;/ codefile.txt文件
20、中的字符已全部讀入,存放在 code 數(shù)組中text=(char *)malloc(100*sizeof(char);p=text;m=2*n-1;if(*code=0)find(HT,code,text,HTm.lchild,m); /從根節(jié)點的左子樹去找elsefind(HT,code,text,HTm.rchild,m); /從根節(jié)點的右子樹去找for(i=0;pi!=0;i+) / 把 譯 碼 好 的 字 符 存 入 文 件 textfile.txt 中fputc(pi,fw);fclose(fp);fclose(fw);printf(n 已將 codefile.txt 文件成功譯碼,
21、 兵已存入 textfile.txt 文件! nn);/ 將文件 codefi1e 以緊湊格式顯示在終端上 , 每行 50 個代碼。同時將此字符 形式的編碼文件寫入文件 codeprint 中。void Print_code()FILE *fp,*fw;char temp;int i;if(fp=fopen(codefile.txt,rb)=NULL)printf(Open file codefile.txt error!n); if(fw=fopen(codeprint.txt,wb+)=NULL)printf(Open file codeprint.txt error!n);printf(
22、n 文件 codefi1e 顯示如下 :n);fscanf(fp,%c,&temp); / 從文件讀入一個字符for (i=1;!feof(fp);i+)printf(%c,temp);if(i%50=0) printf(n);fputc(temp,fw); / 將該字符存入文件 codeprint.txt 中 fscanf(fp,%c,&temp); / 從文件讀入一個字符printf(nn 已將此字符形式的編碼寫入文件 codeprint.txt 中! nn);fclose(fp);fclose(fw);/ 將已在內(nèi)存中的哈夫曼樹顯示在屏幕上,并將此字符形式的哈夫曼樹寫入 文件 treep
23、rint 中。void Print_tree()unsigned char T100100;int i,j,m=0;FILE *fp;if(n=0)n=Read_tree(HT); / 從文件 hfmtree.txt 中讀入赫夫曼樹 , 返回葉子結(jié) 點數(shù)將內(nèi)存中的赫夫曼樹轉(zhuǎn)換成凹凸表形式Convert_tree(T,0,&m,2*n-1); / 的樹,存于數(shù)組 T 中if(fp=fopen(treeprint.txt,wb+)=NULL) printf(Open file treeprint.txt error!n); printf(n 打印已建好的赫夫曼樹: n);for(i=1;i=2*n
24、-1;i+)for (j=0;Tij!=0;j+)if(Tij= ) printf( );fputc(Tij,fp);else printf(%d,Tij);fprintf(fp,%dn,Tij); printf(n);fclose(fp);printf(n已將該字符形式的哈夫曼樹寫入文件treeprint.txt中! nn);/ 從文件 hfmtree.txt 中讀入赫夫曼樹,返回葉子節(jié)點數(shù)int Read_tree(HuffmanTree &HT)FILE *fp;int i,n;HT=(HuffmanTree)malloc(sizeof(HTNode); if(fp=fopen(hfmt
25、ree.txt,r)=NULL) printf(Open file hfmtree.txt error!n);for (i=1;!feof(fp);i+)HT=(HuffmanTree)realloc(HT,(i+1)*sizeof(HTNode); /增加空間fread(&HTi,sizeof(HTNode),1,fp); /讀入一個節(jié)點信息fclose(fp); n=(i-1)/2; return n;/ 譯碼時根據(jù) 01 字符串尋找相應(yīng)葉子節(jié)點的遞歸算法 void find(HuffmanTree &HT,char *code,char *text,int i,int m) if(*co
26、de!=0)/若譯碼未結(jié)束若找到葉子節(jié)點code+;if(HTi.lchild=0&HTi.rchild=0) /*text=HTi.ch; /將葉子節(jié)點的字符存入 text 中從根節(jié)點的左子樹找從根節(jié)點的右子樹找從該節(jié)點的左子樹去找從該節(jié)點的右子樹去找text+;if(*code=0)find(HT,code,text,HTm.lchild,m); / elsefind(HT,code,text,HTm.rchild,m); /else / 如果不是葉子節(jié)點 if(*code=0) find(HT,code,text,HTi.lchild,m); / else find(HT,code,te
27、xt,HTi.rchild,m); /else*text=0; / 譯碼結(jié)束/ 將文件中的赫夫曼樹轉(zhuǎn)換成凹凸表形式的赫夫曼樹打印出來 void Convert_tree(unsigned char T100100,int s,int *i,int j)int k,l;l=+(*i);for(k=0;kDREB匚codefile -記事本 X交件 遍輯疋)韜式 直看理)耕助11 91 0011111106110000111 01 011 01111111 01 DQS10f teztfile -記事本-口伙立件1編輯 格式盤)查看迫 幫助堪)ABCDEflECBBADDREBF treeprin
28、t -記李本匚丁口J區(qū)J丈件(E)編輯 格式 査看匹)肅朗孤)161 6131311121 10141613131圖(6)九、收獲及體會課程設(shè)計是讓我們充分利用我們專業(yè)課程所學知識的機會,也是我們邁向社會,從事工作前一個必不少的過程。通過這次課程設(shè)計,我深深體會到將知識運用到實踐中的重要作用。我這兩天的課程設(shè)計,是讓我學會腳踏實地邁開這一步, 也是為明天能穩(wěn)健地在社會大潮中奔跑打下堅實的基礎(chǔ)。我的課程設(shè)計題目是赫夫曼編譯碼器。最初做這個程序的時候,讓我覺得完成這次程序設(shè)計真的是太難了,然后我查閱了課本,并去圖書館借了資料,在寫這個程序的時候也參考了網(wǎng)上的設(shè)計流程,寫完剛運行時出現(xiàn)了很多問題。尤
29、其是編碼錯誤,導致內(nèi)存無法read,通過同組人員的交流請教,逐漸明白過來,然后經(jīng)過不知道多少次修改才順利運行。本次試驗也讓我明白了理論與實際相結(jié) 合的重要性,并提高了自己組織數(shù)據(jù)及編寫大型程序的能力,培養(yǎng)了基本的、良好的程序設(shè)計技能以及合作能力。通過對各個步驟各個流程的控制,逐漸讓我產(chǎn)生了興趣,在實際編寫過程中,和同學們相互討論讓我學到的不僅僅是一些解 決問題的方法,更是解決問題的思想。課程設(shè)計本身也是一種相互學習的過程 J/Illllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll#i nclude #inclu
30、de ll 為 exit()提供原型#in eludell哈夫曼樹結(jié)點的結(jié)構(gòu)typedef struct char ch;ll該字符域用于存放節(jié)點的關(guān)鍵字int weight;int pare nt, lchild, rchild; HTNode * HuffmanTree;ll動態(tài)分配數(shù)組存儲哈夫曼樹typedef char * HuffmanCode;ll動態(tài)分配數(shù)組存儲哈夫曼編碼表void Menu();/ 顯示菜單void HuffmanCoding( HuffmanTree &HT, char Character,int * w, int n); ll 建立哈夫曼樹void sele
31、ct( Huffma nTree HT, i nt j, int *x, int *y);ll 從已建好的赫夫曼樹中選擇 pare nt為0, weight最小的兩個結(jié)點void Init();void Coding();ll 編碼void Decoding(); ll 譯碼void Print_code();ll打印譯碼好的代碼void Print_tree();ll 打印哈夫曼樹int Read_tree( HuffmanTree &); ll從文件中讀入赫夫曼樹void find( HuffmanTree &HT, char *code, char *text, int i, int m
32、); ll 譯碼時根據(jù) 01 字符 串尋找相應(yīng)葉子節(jié)點的遞歸算法void Convert_tree( unsigned char T100100, int s, int *i, int j); ll 將內(nèi)存中的赫夫曼 樹轉(zhuǎn)換成凹凸表形式的赫夫曼樹HuffmanTree HT; ll 全局變量int n = 0; ll全局變量,存放赫夫曼樹葉子結(jié)點的數(shù)目int main()char select;while (1)Me nu();scanf( %c, &select);switch (select) ll選擇操作,根據(jù)不同的序號選擇不同的操作case 1 :lnit();break;case 2
33、 :Coding(); break;case 3 :Decod in g(); break;case 4 :Print_code(); break;case 5 :Print_tree();break;case 0 :exit(1);default :printf(Input error!n );getchar();return 0;void Menu()/操作選擇界面pri ntf(n);pri ntf(-請選擇操作-n);pri ntf(n);printf(n);pri ntf(1初始化赫夫曼樹-n);pri ntf(2編碼-n);pri ntf(3譯碼-n);pri ntf(4打印代碼文
34、件-n);pri ntf(5打印赫夫曼樹-n);pri ntf(0退岀-n);pri ntf(n);hfmtree 中/初始化函數(shù),輸入n個字符及其對應(yīng)的權(quán)值,根據(jù)權(quán)值建立哈夫曼樹,并將其存于文件 void Init()|FILE *fp;int i, n, w52;/數(shù)組存放字符的權(quán)值char character52;/ 存放 n 個字符printf( n輸入字符個數(shù)n:“);seanf( %d, &n);/輸入字符集大小printf(輸入介字符及其對應(yīng)的權(quán)值:n , n);for (i = 0; in; i+)char b = getchar();seanf( %c, &character
35、i);scanf( %d, &wi);/輸入n個字符和對應(yīng)的權(quán)值HuffmanCoding(HT, character, w, n);/ 建立赫夫曼樹if (fp = fopen( hfmtree.txt , w) = NULLprintf( Ope n file hfmtree.txt error!n);for (i = 1; i 0),構(gòu)造哈夫曼樹HTint m, i, x, y;Huffma nTree p;if (n = 1) return ;m = 2 * n - 1;HT = ( HuffmanTree)malloc(m + 1) * sizeof (HTNode);for (p
36、= HT + 1, i = 1; i ch = *character; p-weight = *w; p-pare nt = 0; p-lchild = 0; p-rchild = 0;for (; i ch = 0; p-weight = 0; p-parent = 0; p-lchild = 0; p-rchild =0; for (i = n + 1; i = m; +i)select(HT, i - 1, &x, &y);HTx.pare nt = i; HTy.pare nt = i;HTi.lchild = x; HTi.rchild = y;HTi.weight = HTx.we
37、ight + HTy.weight;/從HT1到HTj中選擇pare nt為0, weight最小的兩個結(jié)點,用x和y返回其序號 void select( HuffmanTree HT int j, int if ( HTi.parent = 0)*y = i; break ;for (; i = j; i+)if ( HTi.parent = 0) & (i != *x) & ( HTi.weightHT* y.weight) fclose(fp);n = (i - 1) / 2;return n;/譯碼時根據(jù)01字符串尋找相應(yīng)葉子節(jié)點的遞歸算法void find( HuffmanTree
38、&HT, char *code, char *text, int i, int m)if (*code !=0 )/若譯碼未結(jié)束code+;if (HTi.lchild = 0 & HTi.rchild = 0)/ 若找到葉子節(jié)點 x, int * y)int i;/查找weight最小的結(jié)點for (i = 1; i = j ; i+)if ( HTi.parent = 0)*x = i; break ;for (; i = j; i+)if ( HTi.parent = 0) & ( HTi.weight HT* x.weight)*x = i;HT* x.parent = 1;/查找we
39、ight次小的結(jié)點for (i = 1; i = j ; i+)HC = ( HuffmanCode)malloc(n + 1) * sizeof (char*);cd = ( char *)malloc(n *sizeof (char);cdn - 1 =0;for (i = 1; i = n; +i)start = n -1;for (c = i, f = HTi.parent; f != 0; c = f, f = HTf.parent)if (HTf.lchild = c)cd-start =O;else cd-start =1;HCi = ( char *)malloc(n - st
40、art) *sizeof (char);strcpy(HCi, & cdstart);free(cd);if (fp = fopen(tobetrans.txt, rb ) = NULLprintf( Ope n file tobetra ns.txt error! n);if (fw = fopen( codefile.txt , wb+) = NULLchar *code, *text, *p;if (n = 0)n = Read_tree(HT); /從文件hfmtree.txt中讀入赫夫曼樹,返回葉子結(jié)點數(shù)if (fp = fopen(codefile.txt,rb)=NULI)pri
41、ntf(Ope n file codefile.txt error!nif (fw = fopen( textfile.txt, wb+)=);NULLprintf( Open file textfile.txt error! n);code = ( char *)malloc( sizeof (char);fscanf(fp,%c, code);/從文件讀入一個字符for (i = 1; !feof(fp); i+)code = ( char *)realloc(code, (i + 1) *sizeof (char); / 增加空間fscanf(fp,%c, &codei);/ 從文件讀入
42、下一個字符codei - 1 =0;/ codefile.txt文件中的字符已全部讀入,存放在 code數(shù)組中text = ( char *)malloc(100 * sizeof (char);p = text;m = 2 * n - 1;printf( Ope n file codefile.txt error! n)if (fw = fopen( codeprint.txt , wb+) = NULLprintf( Ope n file codepri nt.txt error! n);printf( n 文件 codefile 顯示如下:n);fscanf(fp,%c, &temp);
43、/ 從文件讀入一個字符for (i = 1; !feof(fp); i+)printf( %c, temp);if (i % 50 = 0) printf(n);fputc(temp, fw);/ 將該字符存入文件 codeprint.txt中fscanf(fp,%c, &temp);/ 從文件讀入一個字符printf( nn已將此字符形式的編碼寫入文件codeprint.txt 中! nn);fclose(fp);printf( %d, Tij); fprintf(fp,%dn, Tij);printf( n);fclose(fp);printf( n已將該字符形式的哈夫曼樹寫入文件tree
44、print.txt中! nn);/從文件hfmtree.txt中讀入赫夫曼樹,返回葉子節(jié)點數(shù)int Read_tree( HuffmanTree &HT) 一FILE Tlk=;Tlk = HT j .weight;if (HT j .lchild)Convert_tree( T, s + 1, i , HT j .lchild);if (HT j .rchild)Convert_tree( T, s + 1, i , HT j .rchild);Tl+k =0;fp;int i, n;HT = ( HuffmanTree)malloc( sizeof (HTNode);if (fp = fo
45、pen( hfmtree.txt , r ) = NULLprintf( Ope n file hfmtree.txt error!n);for (i = 1; !feof(fp); i+)HT = ( HuffmanTree)realloc(HT, (i + 1) *sizeof (HTNode); 增加空間fread(&HTi, sizeof (HTNode, 1, fp); 讀入一個節(jié)點信息/從根節(jié)點的右子樹找/從該節(jié)點的左子樹去找/從該節(jié)點的右子樹去找i, int j)find(HT, code, text, HTm.rchild, m); else /如果不是葉子節(jié)點if (*code =O)fin d(HT, code, text, HTi.lchild, m); elsefin d(HT, code, text, HTi.rchild, m);else*text =0 ; / 譯碼結(jié)束/將文件中的赫夫曼樹轉(zhuǎn)換成凹凸表形式的赫夫曼樹打印出來void Convert_tree(unsigned char T100100, int s, int *int k, l;l = +(* i);for (k = 0; k s; k+)*y = i;/對文件t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲服務(wù)題庫含參考答案
- 醫(yī)學影像檢查技術(shù)學試題庫及答案
- 中醫(yī)內(nèi)科出科試題及答案
- 急診與災難醫(yī)學考試題目及答案
- 中級財務(wù)會計試卷及答案
- 電工安全知識試題及答案
- 近十年浙江省考試卷及答案
- 主要負責人(廣東省)考試題庫及安全員附答案
- 建筑質(zhì)檢員考試題及答案
- 技能大賽《網(wǎng)絡(luò)安全管理實踐》考試題庫(附答案)
- 對外話語體系構(gòu)建的敘事話語建構(gòu)課題申報書
- 江蘇交控集團招聘筆試題
- 2026屆浙江省寧波市九校數(shù)學高一上期末監(jiān)測試題含解析
- 馬年猜猜樂(馬的成語)打印版
- 2025-2030中國低壓變頻器行業(yè)營銷渠道及投融資方式分析研究報告
- 2025山東恒豐銀行濟南分行社會招聘1人筆試歷年典型考題及考點剖析附帶答案詳解
- 渠道管理制度規(guī)范
- 2025年企業(yè)安全生產(chǎn)培訓講義
- 精神障礙防治責任承諾書(3篇)
- GB/T 714-2025橋梁用結(jié)構(gòu)鋼
- 心臟瓣膜置換術(shù)護理查房
評論
0/150
提交評論