电文的编码和译码c语言实现,电文的编码及译码.doc
數據結構課程設計
題目:電文的編碼與譯碼
院系:
班級:
學號:
姓名:
2014-2015年度 第1學期
目錄
一.題目:電文的編碼與譯碼3
二.設計目標3
三.問題描述3
四.需求分析3
五.概要設計4
六.詳細設計(給出算法的偽碼描述和流程圖)4
流程圖設計:4
主流程圖:4
哈夫曼編碼:5
哈夫曼譯碼:6
建立哈夫曼樹:8
代碼分析:10
第一步:定義常量與結構體:10
建立哈夫曼樹10
哈夫曼編碼11
哈夫曼譯碼12
第三步:在主函數中調用其它函數13
七.測試分析14
八.使用說明14
九.測試數據15
十.課程設計總結16
電文的編碼與譯碼
一.題目:電文的編碼與譯碼
二.設計目標
幫助學生熟練掌握了解哈弗曼樹的創(chuàng)建,以及利用哈弗曼進行編碼和譯碼。
三.問題描述
從鍵盤接收一串電文字符,輸出對應的Huffman編碼。同時,能翻譯由Huffman編碼生成的代碼串,輸出對應的電文字符串。
四.需求分析
在電報通信中,電文是以二進制代碼傳送的。在發(fā)送時,需要將電文中的字符轉換成二進制代碼串,即編碼;在接收時,要將收到的二進制代碼串轉化為對應的字符序列,即譯碼。我們知道,字符集中的字符被使用的頻率是非均勻的。在傳送電文時,要想使電文總長可能短。因此,若對某字符集進行不等長編碼的設計,則要求任意一個字符的編碼都不是其他字符編碼的前綴,這種編碼稱做前綴編碼。
由Huffman樹求得的編碼是最優(yōu)前綴,也叫Huffman編碼。給出字符集和各個字符的概率分布,構造Huffman樹,將Huffman樹中的每個分支結點的左分支標0,右分支標1,將根到每一個葉子路徑上的標號連起來,就是該葉子所代表字符的編碼。
五.概要設計
構建一顆Huffman樹;
實現Huffman編碼,并用Huffman編碼生成的代碼串進行譯碼。
程序中字符和權值是可變的,實現程序的靈活性。
六.詳細設計(給出算法的偽碼描述和流程圖)
總體操作步驟:
流程圖設計:
主流程圖:
哈夫曼編碼:
哈夫曼譯碼:
建立哈夫曼樹:
代碼分析:
第一步:定義常量與結構體:
#define MAXNUM 50
typedef char DataType;
typedef struct/* 哈夫曼樹結點的結構 */
{
DataType data; /* 數據用字符表示 */
int weight; /* 權值 */
int parent; /* 雙親 */
int left; /* 左孩子 */
int right; /* 右孩子 */
}HuffNode;
typedef struct/* 哈夫曼編碼的存儲結構 */
{
DataType cd[MAXNUM];/* 存放編碼位串 */
int start; /* 編碼的起始位置 */
}HuffCode;
第二步:構造函數:
建立哈夫曼樹
int HuffmanCreate(HuffNode *ht)
{
int i,k,n,m1,m2,p1,p2;
printf("請輸入元素個數:");
scanf("%d",&n);
for(i=1;i<=n;i++) /* 輸入結點值和信息 */
{
getchar(); /* 接收回車 */
printf("第%d個元素的=>\n\t結點值:",i);
scanf("%c",&ht[i].data);
printf("\t權 重:");
scanf("%d",&ht[i].weight);
}
for(i=1;i<=2*n-1;i++) /* 對數組初始化 */
ht[i].parent=ht[i].left=ht[i].right=0;
for(i=n+1;i<=2*n-1;i++)
{
m1=m2=32767; /* 初始化,令m1、m2為整數最大值 */
p1=p2=1;
for(k=1;k<=i-1;k++) /* 從數組ht[1]到ht[i-1]中找出 */
if(ht[k].parent==0) /* parent為0并且權值最小的兩個結點 */
if(ht[k].weight
總結
以上是生活随笔為你收集整理的电文的编码和译码c语言实现,电文的编码及译码.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串的表示形式_pytho
- 下一篇: python画精美图案_Python语言