資料結構課程設計 赫夫曼樹

2022-08-19 15:00:06 字數 1571 閱讀 9750

一、 赫夫曼樹應用

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 嚴蔚敏,吳偉...