資料結構 課程設計哈夫曼編碼
資料結構實驗課程主要是討論計算機中資料的組織形式,資料之間的邏輯關係,資料的儲存以及各種運算的實現。通過本課程的講授與上級實踐使學生掌握各種型別的資料結構基本概念,邏輯結構與儲存結構,以及相關演算法的實現及應用,並能為各種儲存方式的應用設計相應的演算法,培養學生運用相關知識解決實際問題的能力。是實踐性較強的課程。
哈夫曼編解碼器
用哈夫曼編解碼器進行通訊可以大大提高通道利用率,縮短資訊傳輸時間,降低傳輸成本。但是,這要求在傳送端通過乙個編譯碼系統對待傳輸資料預先編碼,在接收端將傳來的資料進行解碼(復原)。對於雙工通道(即可以雙向傳輸資訊的通道),每端都需要乙個完整的編譯碼系統。需要滿足以下的條件:
1.能夠對27個字元進行編碼、並儲存。(initializing)
2.利用編碼能夠實現任意英文句子的編碼操作,並儲存編碼。(encoding)
3.能隨時檢視字母的編碼。
程式執行截圖:
直接附源**:
#include
#include
#include
#include
//建立哈夫曼樹結構體
typedef structhtnode,*huffmantree;
//建立哈夫曼樹
creation(huffmantree ht,int n,int m)while(ch=='y'||ch=='y');
//編碼
void coding(huffmantree p,int n)
int i,c,f;
char **hc; //指標的指標
char *cd;
char ch;
int s;
hc=(char**)malloc((n+1)*sizeof(char *)); //分配
n個字元編碼的頭指標向量
cd=(char*)malloc(n*sizeof(char)); //分配求編碼的工作空間
cd[n-1]='\0'; //編碼結束符
for(i=1;i<=n;i++)
s=n-1;//在
cd中從最後乙個開始加入編碼相對的數字
for(c=i,f=p[i].parent;f!=0;c=f,f=p[f].parent)//從葉子到根逆向求編碼
if(p[f].lchild==c) //左孩子編碼為
'0'
cd[--s]='0';
else //右孩子編碼為
'1'
cd[--s]='1';
hc[i]=(char*)malloc((n-s)*sizeof(char));//為第
i個字元編碼分配空間
strcpy(hc[i],&cd[s]); //從
cd複製編碼(串)到
hc,&
是取位址符,即取首位址,從
start
位置到'\0'
的編碼為止。
free(cd); //釋放工作空間
printf("\n輸出編碼後的結果:
\n");
printf("符號 數碼\n");
for(i=1;i<=n;i++)
printf("\n%c %s\n",p[i].code,hc[i]);
printf("是否進行解碼操作,是則解碼,否則退出程式!
\n是(輸入
y/y)否(輸入其他字元)
\n");
scanf("%s",&ch);
if(ch=='y'||ch=='y')
translate(hc,p,n);
else
exit(0);
void main();
int b[27]=;
printf("**********************************\n");
printf("*****歡迎使用哈夫曼編譯系統!
*****\n");
printf("**請輸入要進行編碼字元的個數:
****\n");
printf("**********************************\n");
printf("*******內容(
a~z
或者 空格)
******\n");
scanf("%d",&n);
while(n<1&&n>27)
printf("重新輸入:
\n");
m=2*n-1; //哈夫曼樹中沒有度為
1的結點,故含有
m=2n-1
個結點
ht=(huffmantree)malloc((m+1)*sizeof(htnode));//動態申請記憶體
for(i=1;i<=n;i++)else exit(0);
}else exit(0);
資料結構課程設計 哈夫曼樹設計
計算哈夫曼樹的wpl值 根據給定的n個權值 非負值 計算所構造哈夫曼樹的wpl值。基本要求 1 根據給定的資料,建立哈夫曼樹 2 輸出每個葉子結點的帶權路徑長度 3 輸出哈夫曼樹的wpl值。測試資料要求 輸入的n個權值之和應為100,且不允許有負值。include include include d...
資料結構 哈夫曼樹 哈夫曼編碼
哈夫曼樹又稱最優樹 二叉樹 是一類帶權路徑最短的樹。構造這種樹的演算法最早是由哈夫曼 huffman 1952年提出,這種樹在資訊檢索中很有用。結點之間的路徑長度 從乙個結點到另乙個結點之間的分支數目。樹的路徑長度 從樹的根到樹中每乙個結點的路徑長度之和。結點的帶權路徑長度 從該結點到樹根之間的路徑...
哈夫曼編碼 哈夫曼樹 (資料結構)
哈夫曼編碼,又稱霍夫曼編碼,是一種編碼方式,哈夫曼編碼是可變字長編碼 vlc 的一種。huffman於1952年提出一種編碼方法,該方法完全依據字元出現概率來構造異字頭的平均長度最短的碼字,有時稱之為最佳編碼,一般就叫做huffman編碼 有時也稱為霍夫曼編碼 include include inc...