一、實驗目的
通過課程設計,鞏固和加深對線性表、棧、佇列、字串、樹、圖、查詢、排序等理論知識的理解;掌握現實複雜問題的分析建模和解決方法(包括問題描述、系統分析、設計建模、**實現、結果分析等);提高利用計算機分析解決綜合性實際問題的基本能力。
二、需求分析
1、檔案加密核心演算法(赫夫曼編碼)設計
檔案加密的核心演算法是赫夫曼編碼,赫夫曼編碼的完成首先建立在赫夫曼樹的建立,在此之前要完成編碼字元的權值計算,依照題意:
1、輸入26個字元的權值。
2、 依次找出最小的權值,建立赫夫曼樹huffmantree。
3、赫夫曼樹建立完畢,即可進行字串的編碼和解碼工作。核心演算法即完成。
2、功能要求和說明
字元 空格 a b c d e f g h i j k l m
頻度 180 64 13 23 32 103 22 15 47 57 1 5 31 20
字元 n o p q r s t u v w x y z
頻度 55 63 15 1 48 56 80 25 7 18 2 16 1
現請編寫程式你實現如下功能:
(1)執行時,由使用者輸入來初始化字符集大小和相應用字元。
(2)輸入乙個要加密的字串,將其加密。
(3)輸出解密字串。
三、系統實現
1、輸入權值
2、輸入權值構造赫夫曼樹後a到z的編碼為:
3、選出要進行解密的字元的編碼:
4、解碼後為:
四、實習總結與體會
這次的課程設計讓我深深地感覺到無力和無奈。動手做程式的難度和學習理論知識是不能同日而語的,一些自己以為已經掌握了的知識,在做程式的過程中,無法把知識轉換為**,腦子裡的想法不能用**實現出來,實現出來的功能有和自己想的不一樣。學習程式設計的道路,任重而道遠~~
五、程式**
#include#include#includeconst int n=26;
const int m=2*n-1;
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++) //進行次合作
}void main()
資料結構 課程設計哈夫曼編碼
資料結構 課程設計哈夫曼編碼 資料結構實驗課程主要是討論計算機中資料的組織形式,資料之間的邏輯關係,資料的儲存以及各種運算的實現。通過本課程的講授與上級實踐使學生掌握各種型別的資料結構基本概念,邏輯結構與儲存結構,以及相關演算法的實現及應用,並能為各種儲存方式的應用設計相應的演算法,培養學生運用相關...
資料結構課程設計 哈夫曼樹設計
計算哈夫曼樹的wpl值 根據給定的n個權值 非負值 計算所構造哈夫曼樹的wpl值。基本要求 1 根據給定的資料,建立哈夫曼樹 2 輸出每個葉子結點的帶權路徑長度 3 輸出哈夫曼樹的wpl值。測試資料要求 輸入的n個權值之和應為100,且不允許有負值。include include include d...
資料結構 赫夫曼樹
赫夫曼樹 huffman tree 又稱為最優樹,是一類帶權路徑長度最短的樹。本文僅討論最優二叉樹。樹的路徑長度是指從樹根到樹中其餘各個結點的路徑長度之和。對具有n個結點的二叉樹而言,完全二叉樹具有最短的樹的路徑長度。若在二叉樹中,樹葉結點帶有權值,則有 結點的帶權路徑長度定義為從樹根到該結點之間的...