《哈夫曼編碼解碼課程設計》報告

2022-05-14 05:51:55 字數 2365 閱讀 3644

計算機與資訊工程系

《實踐環節名稱》報告

專業:電腦科學與技術

班級學號

姓名:楊明英

報告完成日期 :2011/6/10

指導教師

目錄1.問題描述1

2.基本要求1

3.資料結構1

4.總體設計1

5.詳細設計2

5.1主函式 void main2

5.2建立檔案 void jianliwenjian3

5.3輸入原文 void luruyuanwen4

5.4建立哈夫曼樹 void chuangjian5

5.5編碼 void bianma6

5.6對哈夫曼碼解碼 void yiwen7

5.7儲存譯文 void baocunyiwen8

5.8輸出原文 void duquyuanwen9

5.9輸出原文編碼 void duqubianma10

5.10輸出譯文 void duquyiwen11

6.測試與除錯11

7.源程式清單8

8.實驗心得28

1. 問題描述

開啟一篇英文文章,統計該文章中每個字元出現的次數,然後以它們作為權值,設計乙個哈夫曼編/解碼系統。

2. 基本要求

以每個字元出現的次數為權值,建立哈夫曼樹,求出哈夫曼編碼,對檔案yuanwen中的正文進行編碼,將結果存到檔案yiwen中,再對檔案yiwen中的**進行解碼,結果存到textfile中。

3. 資料結構

char ch[n記錄原文本元陣列

char yw[n記錄譯文本元陣列

typedef char * hcode[m+1]; //存放哈夫曼字元編碼串的頭指標的陣列

typedef struct

dangenode記錄單個字元的類別和出現的次數

typedef struct

jilunode統計原文出現的字元種類和數量

typedef struct node //靜態三叉的哈夫曼樹的定義

htnode,hn[m+1]; // hn是結構陣列型別,0號單元不用

4. 總體設計

功能函式模組劃分

void main主函式

void jianliwenjian建立儲存原文的檔案yuanwen

void luruyuanwen通過程式錄入原文到檔案yuanwen中

void min_2(hn ht,int n,int *tag1,int *tag2選擇權值較小的兩個結點

void chuangjian(jilunode * jilu,hn ht建立哈夫曼樹

void bianma(jilunode * jilu,hn ht,hcode hc,int n) //對原文進行編碼

void bianmabaocun(hcode hc,jilunode * jilu) //儲存編碼在檔案yiwen中

void yiwen(hcode hc,jilunode * jilu讀取yiwen中的編碼,並將其翻譯為原文

void baocunyiwen將翻譯的譯文儲存到檔案textfile中

void duqubianma在編碼檔案yiwen中讀取編碼

void duquyiwen從檔案textfile中讀取譯文

5. 詳細設計

5.1 主函式 void main()

5.2建立檔案 void jianliwenjian()

首先,要建立乙個檔案來儲存原文,在這裡檔案的名稱按要求預設為yuanwen,檔案建立時有可能成功,有可能失敗,建立失敗時輸出「cannot open file」,成功後會提示:「檔案已建立,名稱為yuanwen」。

5.3輸入原文 void luruyuanwen()

輸入原文時首先要開啟原檔案,成功開啟檔案後逐個讀取輸入的字元存放到檔案中,直到遇到結束標誌『^』,然後關閉檔案。

5.4建立哈夫曼樹 void chuangjian()

開啟儲存原文的檔案yuanwen,將字元逐個讀出,然後統計字元的種類,類別和數量,最後建立靜態的三叉鍊錶來建立哈夫曼樹,樹中的葉子結點對應出現的個字元。

5.5編碼 void bianma()

該函式實現對哈夫曼樹的編碼,先申請乙個能儲存字元編碼的臨時空間cd,編碼從哈夫曼樹的葉子結點開始,尋找其父母結點,然後根據父母結點判斷孩子結點的左右位置,左邊置1,右邊置0,並將1,0這樣的字元從後往前逆序存放在cd中,每求得乙個葉子結點的編碼,就將其複製到儲存哈夫曼編碼的頭指正陣列中,找完葉子結點的編碼後就釋放臨時空間cd

5.6對哈夫曼碼解碼 void yiwen()

開啟檔案yiwen,開啟成功後,逐個讀取存放在裡邊的編碼字元,並與先前的編碼相匹配,直到找到編碼對應的原字元,當找完編碼後就關閉檔案。

資料結構課程設計總結報告哈夫曼編碼解碼

4.3 流程圖 6 1.問題描述 設計乙個利用哈夫曼演算法的編碼和解碼系統,重複地顯示並處理以下專案,直到選擇退出為止。1 初始化 鍵盤輸入字符集大小n n個字元和n個權值,建立哈夫曼樹 2 編碼 利用建好的哈夫曼樹生成哈夫曼編碼 3 輸出編碼 4 顯示哈夫曼樹 5 介面設計的優化 6 設字符集及頻...

資料結構哈夫曼樹編碼解碼課程設計實驗報告

資料結構課程設計 設計題目 哈夫曼樹編碼解碼 目錄在當今資訊 時代,如何採用有效的資料壓縮技術節省資料檔案的儲存空間和計算機網路的傳送時間已越來越引起人們的重視,哈夫曼編碼正是一種應用廣泛且非常有效的資料壓縮技術。哈夫曼編碼是一種編碼方式,以哈夫曼樹 即最優二叉樹,帶權路徑長度最小的二叉樹,經常應用...

資料結構課程設計報告 哈夫曼編碼

廣東工業大學華立學院 課程設計 課程名稱 資料結構 題目名稱 哈夫曼編碼 學生學部 系 資訊與計算機學部 專業班級 09計算機2班 學號學生姓名 指導教師 2010 年 12 月23 日 廣東工業大學華立學院 課程設計 任務書 一 課程設計 程序安排 二 應收集的資料及主要參考文獻 1 嚴蔚敏,吳偉...