資料結構實驗報告

2022-05-04 16:51:03 字數 2574 閱讀 3481

實驗名稱: 哈夫曼樹以及哈夫曼編碼

專業: 電腦科學與技術專業

班級: 計科1001

姓名: 念文洪

學號: 1008030129

完成日期: 2023年11月21日

一、問題描述

通過李占利老師對《資料結構與演算法》的講解,經過自身的學習以及多次上機實驗,掌握了關與哈夫曼樹的以下知識:

(1) 哈夫曼樹的基本概念以及所用儲存結構;

(2) 哈夫曼樹的建立演算法;

(3) 哈夫曼樹的應用(哈夫曼編碼和解碼).

2、需求分析

首先,應該建立哈夫曼樹,將哈夫曼樹的結構定義為乙個結構體型別的一維陣列,每個元素含有四項:權值、雙親、左孩子、右孩子。給定的權值可以從鍵盤上輸入,要輸出所建立的哈夫曼樹,只要輸出表示出哈夫曼樹的一維陣列中的全部元素即可。

然後,要實現哈夫曼編碼,只要在所建立的哈夫曼樹上進行二進位制編碼:往左走,編碼為0,往右走,編碼為1,然後將從根結點到葉結點的所有0、1排列起來,則得到該樹葉的哈夫曼編碼。哈夫曼編碼可以用乙個結構體型別的一維陣列來儲存,每個元素包含:

編碼、編碼的開始位置、編碼所對應的字元。

最後,實現哈夫曼解碼,就是要將輸入的編碼還原成對應的字元。

3、概要設計

1、建立哈夫曼樹的結構體型別。

2、建立哈夫曼編碼的結構體型別。

3、建立哈夫曼樹

4、哈夫曼編碼。

5、哈夫曼解碼

6、編寫程式,實現哈夫曼樹的建立以及應用。

四、詳細設計

1、建立哈夫曼樹的結構體型別:

struct tree //哈夫曼樹中的乙個節點

;2、建立哈夫曼編碼的結構體型別

struct codetype//哈夫曼編碼

;3、源程式**:

/* 功能:哈夫曼樹的建立以及應用

作者;念文洪

學院:電腦科學與技術學院

班級:計科1001班

學號:1008030129

#include <>

#include <>

const int n=8maxn表示葉子數目

const int m=2*n-1;//m為森林中樹的棵樹

struct tree哈夫曼樹中的乙個節點

;struct codetype哈夫曼編碼

;tree hftree[m+1];

codetype code[n+1];

/* 建立哈夫曼樹

void creathuffmantree()

cout<<"請輸入"< for (i=1;i<=n;i++)

cin>>hftree[i].weight輸入權值

for (i=n+1;i<=m;i進行次合併

以下為合併

hftree[p1].parent=i;

hftree[p2].parent=i;

hftree[i].lch=p1;

hftree[i].rch=p2;

hftree[i].weight=hftree[p1].weight+hftree[p2].weight;

}}/* 哈夫曼編碼

void huffcode()

code[i]=cd;

}for (i=1;i<=n;i++)

}/* 哈夫曼解碼

void trancode()

cin>>b;

}}/* 主函式實現

void main()

5、測試分析

1、給定八個權值:1,3, 5, 7, 9, 11,13,15

對應著字母是:a, b, c, d, e, f, g, h

2、對上述給定的哈夫曼樹以及得到的哈夫曼編碼,輸入一串二進位制編碼,輸出它的哈夫曼解碼。

(一)手動分析

第一步:在上述結點中尋找最小兩個:1,34

第二步:在上述結點中尋找最小兩個94

第四步:在上述結點中尋找最小兩個

1694

第五步:在上述結點中尋找最小兩個

162094

第六步:在上述結點中尋找最小兩個

28162094

第七步: 在上述結點中尋找最小兩個

2836

162094

第八步:最後兩個結合:

6401

2836

0 101

1620

g h

01 01

9d e

01 f4c

0 1

a b

根據手動分析的結果如下所示

a: 11000

b: 11001

c: 1101

d: 100

e: 101

f: 111

g: 00

h: 01

(二)執行測試結果如下

6、總結

通過本次哈夫曼編碼的實驗,對哈夫曼編碼有了深刻地認識和理解、掌握,也體會到了他的優點 ,以及在電文加密中的使用,可以說是受益匪淺!

資料結構實驗報告

實驗報告 實驗課程 資料結構 實驗專案實驗 專業 電腦科學與技術 姓名於凡 學號 10703070328 指導教師汪林林 實驗時間 2008 12 7 重慶工學院計算機學院 實驗一線性表 1.實驗要求 掌握資料結構中線性表的基本概念。熟練掌握線性表的基本操作 建立 插入 刪除 查詢 輸出 求長度及合...

資料結構實驗報告

實驗一線性表的基本操作 1 實驗目的2 2 實驗環境2 3 實驗內容,主要 除錯與執行 2 4 總結14 實驗二棧的基本操作 1 實驗目的15 2 實驗環境15 3 實驗內容,主要 除錯與執行 15 4 總結18 實驗三赫夫曼樹 1 實驗目的18 2 實驗環境18 3 實驗內容,主要 除錯與執行 1...

資料結構實驗報告

實驗題目 計算機與通訊工程學院 2014 實驗一線性表的應用 實驗目的 1 掌握線性表的邏輯結構定義 2 掌握線性表的兩種儲存結構 順序和鏈式 3 掌握順序表和煉表的定義及基本操作 實驗內容 通過程式設計完成具有一定實際意義的課題,加深對線性表應用的理解和掌握。參考題目如下所示。學生可在完成以下題目...