c 赫夫曼編碼設計報告

2022-12-03 07:42:01 字數 1991 閱讀 8658

實驗三赫夫曼樹編碼

題目:建立赫夫曼樹並進行編碼和解碼

班級: 計科0906 姓名: 馬飛揚學號: 200948140622 完成日期

一:需求分析

由輸入字元的使用頻率建立赫夫曼樹,並求出、儲存赫夫曼編碼,輸入字串轉化為編碼輸出,輸入編碼轉化為字串輸出。

二:概要設計

1:根據輸入的字元的使用頻率建立相應的赫夫曼樹,並把字元及其頻率對應儲存在檔案中。

2:對已建立的樹從葉子結點開始逆向求出各個字元對應的赫夫曼編碼並儲存在相應檔案中。

3:輸入一串字元,呼叫編碼儲存結構轉換為赫夫曼編碼並輸出。

4:輸入一串赫夫曼編碼從樹的根結點開始通過迴圈遞迴尋找相應葉子結點,將對應的字元輸出,依次譯出編碼對應的字元。

三:詳細設計

#include

#include

#include

#define n 6//巨集定義全域性變數n

using namespace std;

void set();//函式宣告

void bianma();//

void print1();//

void yima();//

struct haffmantree//赫夫曼樹的結點儲存結構

;struct cd//字元編碼的結點儲存結構

;haffmantree haffmancode[2*n];//定義赫夫曼樹的儲存結構

cd hc[n+1];//定義所有字元編碼的儲存結構

cd zhifu[50];//儲存解碼得到的字串

struct shu//定義在解碼時會用到的各個變數

;shu m;//解碼用到的物件

void main()

for(int i=1;i<7;i++)//迴圈輸入各字元使用頻率並進行儲存

for(int j=1;j<2*n;j++)//對赫夫曼樹進行初始化

haffmancode[j].parent=0;

haffmancode[j].lchild=0;

haffmancode[j].rchild=0;

}set();//建立樹

bianma();//逆向求字元編碼

ofstream fou("");

if(!fou)

for(int d=1;d<=n;d++)//儲存得到的編碼

print1();//輸入字串轉化為編碼輸出

對需要用到的量進行初始化

cout<<"輸入haffman編碼:";

cin>>

while('\0')//迴圈遞迴從根出發譯出各個字元

'\0';

cout<<"解碼為:"<<<}

void set()//建樹函式

}void bianma()//求編碼

}void print1()//翻譯字串

cout<<"haffman 編碼為:";

for(int j=0;j

cout< }

void yima()//轉化編碼為字元

四:除錯分析

在建立樹及求編碼的過程中並沒有遇到太大的困難,主要是定義相應的儲存結構把課本上的**用c++翻譯了一下。在把字串翻譯為編碼時,利用字元與其編碼在儲存結構中的對應關係,定位後再輸出字元,花費了不少功夫。最困難的是從根出發求編碼對應的字元,我利用了迴圈與遞迴的思想,在使用遞迴的過程中發現在返回的過程中某些關鍵量並沒有隨著返回而變為相應的值,這一點很讓我困惑,後通過把每乙個語句塊都改為if和else的對立關係,才避免了在返回過程中發生錯誤。

五:執行結果

六:實驗環境

1:window xp 系統下

2:visual c++ 6.0 程式設計環境

七:實驗體會

通過本次實驗,我不僅基本掌握了赫夫曼樹的建立及求赫夫曼編碼的方法,還對遞迴的應用有了更深的了解,雖然關於遞迴還是有很多不明白的地方,但至少用起來現在已經不太生疏了。另外,由於本次實驗的**量較大,所以除錯的時間也花了不少,進一步提高了我的除錯能力。總之,本次實驗收穫很大。

C 編碼規範試題三

c 編碼規範試題 滿分100分 一 單選題 5 2 1 關於函式引數,不正確的說法是 a 對引數輸入和非引數輸入都要檢查有效性。b 防止將函式的引數作為工作變數。c 在呼叫函式填寫引數時,應儘量減少沒有必要的預設資料型別轉換或強制資料型別轉換 d 非排程函式應減少或防止控制引數,盡量不要使用資料引數...

C語言程式編碼規範

基本要求 1.1 程式結構清析,簡單易懂,單個函式的程式行數不得超過100行。1.2 打算幹什麼,要簡單,直接了當,精簡,避免垃圾程式。1.3 盡量使用標準庫函式和公共函式。1.4 不要隨意定義全域性變數,盡量使用區域性變數。1.5 使用括號以避免二義性。2.可讀性要求 2.1 可讀性第一,效率第二...

C語言設計報告

設計報告 課程名稱 c語言程式設計 題目名稱根據條件進行學生成績排名 學生學院 專業班級 學號學生姓名 指導教師 2010年4月18日 實訓 根據條件進行學生成績排名 一 實訓的目的和要求 通過實踐,了解學生成績排名在c語言中的設計,並能成功設計出學生成績的排序和統計不同成績段中學生人數的 二 實訓...