资源简介
游程编码与哈夫曼编码结合,可以直接运行。很好理解的代码。
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
#define n 100
#define m 2*n-1
//码结点的存储结构
typedef struct{
char ch;
char bits[9];
int len;
}CodeNode;
typedef CodeNode HuffmanCode[n+1];
//树节点
typedef struct{
int weight;
int lchildrchildparent;
}HTNode;
typedef HTNode HuffmanTree[m+1];
int num;
double hx=0.0;
int lengthhigh;//输入阵列的长和高
char sourdata[256];//输入中的符号们
int pinglv[256];//输入中每个符号的频率
double gailv[256];//输入中每个符号发生的概率
char st[256][256]s[256][256]; //st接受输入的字符,s接受译码时的字符
int YClen[256][256]; //存储游程长度
char YCcode[256][256]; //存储游程码
int YCyilen[256][256]; //存储译码过程的游程长度
char YCyicode[256][256]; //存储译码过程的游程码
char YCnum[256]; //存储每行的游程码个数
string YC; //游程编码值
string liangwei[4]; //存储两位二进制数
string sanwei[8]; //存储三位二进制数
HuffmanTree HT; ///
HuffmanCode HC; //创建霍夫曼树
int z;
//选择权值最小的两个值
void select(HuffmanTree HTint kint &s1int &s2){
int ij;
int minl=32767;
//现在所有节点中选取一个权值最小的 记为s1
for(i=0;i<=k;i++){
if(HT[i].weight j=i;
minl=HT[i].weight;
}
}
s1=j;
minl=32767;
//再在除了S1的结点外的其他所有结点中,找另外一个最小的
for(i=0;i<=k;i++){
if(HT[i].weight j=i;
minl=HT[i].weight;
}
s2=j;
}
}
//统计相关数据 字符种类 字符出现的频数和概率
void tongji(int highint length){ //分析出字符阵列中出现的所有字符并求出其对应的出现概率
for (int i=0;i<100;i++){ //先将每个字符出现的次数预设为0
pinglv[i]=0;
}
num=0;
int sign=0;
//统计阵列中出现的字符,并存入数组中
for (i=0;i for (int j=0;j sign=0;
for(int k=0;k if (sourdata[k]==st[i][j]){
pinglv[k]=pinglv[k]+1;
sign=1;
}
}
if (sign==0){
sourdata[num]=st[i][j];
pinglv[num]=1;
num=num+1;
}
}
//求解每个字符对应的概率
int add=0;
for(i=0;i add=add+pinglv[i];//统计总和 为了求概率
for(i=0;i gailv[i]=(double)(double)pinglv[i]/(double)add;
}
//建立霍夫曼树
void chuffmantree(HuffmanTree &HTHuffmanCode &HCint cnt[]char str[]){
int is1s2;
for(i=0;i<=2*num-1;i++){
HT[i].lchild=0;
HT[i].rchild=0;
HT[i].parent=0;
HT[i].weight=0;
}
for(i=0;i<=num;i++){
HT[i].weight=cnt[i];
}
for(i=num;i<2*num-1;i++){
select(HTi-1s1s2);
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
}
for(i=0;i<=num;i++){
HC[i].ch=str[i];
}
}
void HuffmanEncoding(HuffmanTree HTHuffmanCode HC){
int cpi;
char cd[n];
int start;
cd[num]=‘\0‘;
for(i=0;i start=num;
c=i;
while((p=HT[c].parent)>0){
start--;
cd[start]=(HT[p].lchild==c)?‘0‘:‘1‘;
c=p;
}
strcpy(HC[i].bits&cd[start]);
HC[i].len=num-start;
}
}
void decode(HuffmanCode HCchar receive[]char s[]){
char str[268];
char cd[9];
int ijk=0p=0cjs;
while(receive[p]!=‘\0‘){
cjs=0;
}
for(i=1;i cd[i]=‘
- 上一篇:无优先级运算问题
- 下一篇:Matlab R2020b linux安装包
相关资源
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
- c++ 虚拟摄像头
- hook,捕获所有案件,查找所有窗口,
- C语言课设计算器
- c++ 简易贪吃蛇源码
- 高精度加法(c++代码)
- C++调用百度地图案例
- 北京化工大学计算方法(C/C++)讲义
- 基于VC++的SolidWorks二次开发SolidWorks
- c++ 模拟鼠标按键
- OFD编辑器
- Beginning C++17 From Novice to Professional
- C++ STL实现
- opencv手部轮廓识别以及轨迹识别
- 百度C++编码规范
- C++ sql2008 WebServer通讯.docx
- c++ 定时关机程序源码
- 基于VSCode和CMake实现C++开发
- c++语法查询工具
- c++ 账务系统源码
- GBT 28169-2011 嵌入式软件 C语言编码规范
- c++ 猜拳小游戏
- XUnZip Zip解压缩.rar
评论
共有 条评论