一、 赫夫曼樹應用
1、 流程圖
2、 源程式
#include <>
#include <>//預處理器指令,引用標頭檔案
int s1=0,s2=0;//定義全域性變數
typedef struct//建立結構體,包含字元域c,權值域w,雙親域p,左孩子域l和右孩子域r;宣告ht來代替結構體struct
ht;typedef char * *huffmancode;
ht *htree;
huffmancode hcode;
void select(ht *htree,int b)// 選擇雙親域值為0且權值最小的兩個結點s1,s2 }
void strcpy(char *p1,char *p2,int i,int j)//字串連線
void print(ht *htree,huffmancode hcode,int n)//列印赫夫曼編碼
}void main()
//中間結點初始化
for(i=n+1;i<=m;i++,h++)
//輸出初始狀態圖
printf("\n輸出初始狀態圖\n字元\t權值\t雙親\t左孩子\t右孩子");
h=htree+1; //越過0號單元
for(i=1;i<=m;i++,h++)
//建赫夫曼樹
for(i=n+1;i<=m;i++)
//輸出終結狀態圖
printf("\n輸出終結狀態圖\n字元\t權值\t雙親\t左孩子\t右孩子");
h=htree+1; //越過0號單元
for(i=1;i<=m;i++,h++)
//從葉子到根逆向求赫夫曼樹編碼
char *code;
hcode=(huffmancode)malloc((n+1)*sizeof(char));//0號單元未用,用malloc函式動態分配連續n個字元編碼的頭指標向量
code=(char *)malloc(n*sizeof(char));// 用malloc函式分配求編碼的公用工作空間
code[n-1]='\0';//編碼結束符
//逐個字元求赫夫曼編碼
for(i=1;i<=n;i++)
hcode[i]=(char *)malloc((n-start)*sizeof(char));// 用malloc函式為第i個字元編碼分配空間
strcpy(hcode[i],code,start,n-1); //字串連線
}printf("\n赫夫曼編碼為:\n");
print(htree,hcode,n); //列印赫夫曼編碼
//赫夫曼樹的帶權路徑長度
for(i=1;i<=n;i++)
for(i=1,wpl=0;i<=n;i++)//樹的帶權路徑長度為所有葉子結點的帶權路徑長度之和
wpl+=wpl[i];
printf("\n帶權路徑長度:%d\n",wpl);
}3、 執行結果
二、 收穫及體會
四、 軟體環境及參考文獻
1、軟體環境
2、參考文獻
《資料結構(c語言版)》
清華大學出版社
資料結構課程設計哈夫曼編碼
淮海工學院電腦科學系 實驗報告書 課程名 資料結構 題目 樹形資料結構實驗 班級 軟體112 學號 姓名樹型資料結構實驗報告要求 1目的與要求 1 熟練掌握huffman樹的建立演算法與程式設計實現 2 熟練掌握huffman編碼演算法的實現與程式設計應用 3 建立較為實用的通訊報文huffman編...
資料結構課程設計哈夫曼編碼
資料結構與演算法 課程設計 2009 2010學年第二學期第20周 指導教師 王老師 班級 電腦科學與技術 3 班 學號 姓名 資料結構與演算法 課程設計 一 前言 1 摘要 2 資料結構與演算法 課程設計任務書 二 實驗目的 三 題目 赫夫曼編碼 解碼器 1 問題描述 2 基本要求 3 測試要求 ...
資料結構課程設計報告 哈夫曼編碼
廣東工業大學華立學院 課程設計 課程名稱 資料結構 題目名稱 哈夫曼編碼 學生學部 系 資訊與計算機學部 專業班級 09計算機2班 學號學生姓名 指導教師 2010 年 12 月23 日 廣東工業大學華立學院 課程設計 任務書 一 課程設計 程序安排 二 應收集的資料及主要參考文獻 1 嚴蔚敏,吳偉...