资源简介
在双工通讯中利用哈夫曼编码和译码。功能:
1) 初始化:从键盘读入字符集大小n,以及n个字符和相应的权值,建立哈夫曼树,并存入文件A中。
2) 编码:利用已经建好的哈夫曼树,对文件B中的正文进行编码,然后将结果存入文件C中。
3) 译码:利用已经建好的哈夫曼树将文件C中的代码进行译码,结果存入文件D中。
代码片段和文件信息
#include
#include
#include
#include
#include
//typedef int TElemType;
const int UINT_MAX=1000;
char str[50];
typedef struct
{
int weightK;
int parentlchildrchild;
}HTNode* HuffmanTree;
typedef char **HuffmanCode;
//-----------全局变量-----------------------
HuffmanTree HT;
HuffmanCode HC;
int w[50]ijn;
char z[50];
int flag=0;
int numb=0;
// -----------------求赫夫曼编码-----------------------
struct cou{
char data;
int count;
}cou[50];
int min(HuffmanTree tint i)
{ // 函数void select()调用
int jflag;
int k=UINT_MAX; // 取k为不小于可能的值即k为最大的权值1000
for(j=1;j<=i;j++)
if(t[j].weight k=t[j].weightflag=j;
t[flag].parent=1;
return flag;
}
//--------------------slect函数----------------------
void select(HuffmanTree tint iint &s1int &s2)
{ // s1为最小的两个值中序号小的那个
int j;
s1=min(ti);
s2=min(ti);
if(s1>s2)
{
j=s1;
s1=s2;
s2=j;
}
}
void HuffmanCoding(HuffmanTree &HTHuffmanCode &HCint *wint n)
{ // w存放n个字符的权值(均>0)构造赫夫曼树HT并求出n个字符的赫夫曼编码HC
int mis1s2start;
//unsigned cf;
int cf;
HuffmanTree p;
char *cd;
if(n<=1)
return;//检测结点数是否可以构成树
m=2*n-1;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); // 0号单元未用
for(p=HT+1i=1;i<=n;++i++p++w)
{
p->weight=*w;
p->parent=0;
p->lchild=0;
p->rchild=0;
}
for(;i<=m;++i++p)
p->parent=0;
for(i=n+1;i<=m;++i) // 建赫夫曼树
{ // 在HT[1~i-1]中选择parent为0且weight最小的两个结点其序号分别为s1和s2
select(HTi-1s1s2);
HT[s1].parent=HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
// 从叶子到根逆向求每个字符的赫夫曼编码
HC=(HuffmanCode)malloc((n+1)*sizeof(char*));
// 分配n个字符编码的头指针向量([0]不用)
cd=(char*)malloc(n*sizeof(char)); // 分配求编码的工作空间
cd[n-1]=‘\0‘; // 编码结束符
for(i=1;i<=n;i++)
{ // 逐个字符求赫夫曼编码
start=n-1; // 编码结束符位置
for(c=if=HT[i].parent;f!=0;c=ff=HT[f].parent)
// 从叶子到根逆向求编码
if(HT[f].lchild==c)
cd[--start]=‘0‘;
else
cd[--start]=‘1‘;
HC[i]=(char*)malloc((n-start)*sizeof(char));
// 为第i个字符编码分配空间
strcpy(HC[i]&cd[start]); // 从cd复制编码(串)到HC
}
free(cd); // 释放工作空间
}
//---------------------获取报文并写入文件---------------------------------
int InputCode()
{
//printf(“请输入你想要编码的字符“);
FILE *tobetran;
if((tobetran=fopen(“tobetran.txt““w“))==NULL)
{
printf(“不能打开文件“);
return 0;
}
printf(“请输入你想要编码的字符“);
scanf(“%s“str);
fputs(strtobetran);
printf(“获取报文成功“);
fclose(tobetran);
return strlen(str);
}
//--------------初始化赫夫曼链表---------------------------------
void Initialization()
{ int akflaglen;
a=0;
len=InputCode();
for(i=0;i {k=0;flag=1;
cou[i-a].data=str[i];
cou[i-a].count=1;
while(i>k)
{
if(str[i]==str[k])
{
a++;
flag=0;
}
k++;
if(flag==0)
break;
}
if(flag)
{
for(j=i+1;j {if(str[i]==str[j])
++cou[i-a].count;}
}
}
n=len-a;
for(i=0;i { printf(“%c的出
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8718 2009-01-07 11:08 huffman\huffman.cpp
文件 198656 2009-01-07 18:00 huffman\图画\1 main.edd
文件 171008 2009-01-07 18:02 huffman\图画\1i.edd
文件 16005 2009-01-07 18:02 huffman\图画\1i.jpg
文件 19905 2009-01-07 18:00 huffman\图画\1main.jpg
文件 174592 2009-01-07 18:03 huffman\图画\2e.edd
文件 17931 2009-01-07 18:04 huffman\图画\2e.jpg
文件 174592 2009-01-07 18:10 huffman\图画\3d.edd
文件 19309 2009-01-07 18:10 huffman\图画\3d.jpg
文件 169472 2009-01-07 18:12 huffman\图画\4p.edd
文件 18064 2009-01-07 18:12 huffman\图画\4p.jpg
文件 173568 2009-01-07 18:13 huffman\图画\5t.edd
文件 17193 2009-01-07 18:13 huffman\图画\5t.jpg
文件 173568 2009-01-07 18:14 huffman\图画\6y.edd
文件 17367 2009-01-07 18:14 huffman\图画\6y.jpg
目录 0 2009-03-01 23:17 huffman\图画
目录 0 2009-04-22 16:34 huffman
----------- --------- ---------- ----- ----
1369948 17
相关资源
- 灭火机器人
- 《C语言课程设计》 学生成绩管理系统
- FLICM聚类算法C语言
- C语言历年试题及答案合集
- C语言读取BMP文件
- 离散数学实验 C语言编程
- 宿舍管理系统 数据结构课程设计 宿舍
- 奇异值分解SVD算法c语言源代码
- 《 Linux操作系统下C语言编程入门》
- Linux下纯C语言 多线程 人机 贪吃蛇
- 数据结构课程设计----C语言航空订票系
- c语言 航空订票系统
- c语言均值滤波源程序
- c语言实现Socket套接字通信
- C语言三角波、正弦波、整流正弦波、
- c语言 n个点之间的最短距离
- C语言课程设计论文-学生考勤系统设计
- 用C语言写的简洁的Dijkstra最短路径算
- 郁闷的出纳员伸展树 C语言
- 谭浩强C语言教材源程序代码 大全
- 五子棋纯c语言代码(测试完美)
- 一些常见的数据结构ADT定义及相关数
- C语言编写的校园导游系统源代码 能运
- vs2010下c语言编写c/s socket 文件内容传
- C语言实现matlab的butter函数
- C语言编写modbus
- 字符串匹配算法详解 BM算法 c语言
- C语言和汇编语言的混合编程
- HMC830_HMC_MODE.rar
- c语言实现的发送邮件
评论
共有 条评论