ZKX's LAB

求哈夫曼编码 赫夫曼编码器代码

2020-10-04知识7

我需要一个程序设计的代码:设计一个利用哈夫曼算法的编码和译码系统

求哈夫曼编码 赫夫曼编码器代码

编程关于哈夫曼树的建立和编码器的实现? include<;stdio.h>;#define MAXBIT 10#define MAXVALUE 10000#define MAXLEAF 30#define MAXNODE MAXLEAF*2-1 typedef struct { int bit[MAXBIT];int start;。

求哈夫曼编码 赫夫曼编码器代码

求哈夫曼编码器 includeincludeincludeincludeincludetypedef int TElemType;const int UINT_MAX=1000;typedef struct{int weight;int parent,lchild,rchild;} HTNode,*HuffmanTree;typedef char*HuffmanCode;全局变量-HuffmanTree HT;HuffmanCode HC;int*w,i,j,n;char*z;int flag=0;int numb=0;求赫夫曼编码-int min(HuffmanTree t,int i){函数void select()调用int j,flag;int k=UINT_MAX;取k为不小于可能的值for(j=1;j;j+)if(t[j].weight[j].parent=0)k=t[j].weight,flag=j;t[flag].parent=1;return flag;}slect函数-void select(HuffmanTree t,int i,int&s1,int&s2){s1为最小的两个值中序号小的那个int j;s1=min(t,i);s2=min(t,i);if(s1>;s2){j=s1;s1=s2;s2=j;}}算法6.12-void HuffmanCoding(HuffmanTree&HT,HuffmanCode&HC,int*w,int n){w存放n个字符的权值(均>;0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HCint m,i,s1,s2,start;unsigned c,f;int c,f;HuffmanTree p;char*cd;if(n)return;检测结点数是否可以构成树m=2*n-1;HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));0号单元未用for(p=HT+1,i=1;i;i,+p,+w){p->;weight=*w;p->;parent=0;p->;lchild=0;。

求哈夫曼编码 赫夫曼编码器代码

哈夫曼编码的算法代码 /哈夫曼编码(算法)#includeincludeinclude<;string.h>;typedef char*HuffmanCode;动态分配数组,存储哈夫曼编码typedef struct{unsigned int weight;用来存放各个结点的权值unsigned int parent,LChild,RChild;指向双亲、孩子结点的指针} HTNode,*HuffmanTree;动态分配数组,存储哈夫曼树/选择两个parent为0,且weight最小的结点s1和s2void Select(HuffmanTree*ht,int n,int*s1,int*s2){int i,min;for(i=1;i;i+){if((*ht)[i].parent=0){min=i;break;}}for(i=1;i;i+){if((*ht)[i].parent=0){if((*ht)[i].weight<;(*ht)[min].weight)min=i;}}s1=min;for(i=1;i;i+){if((*ht)[i].parent=0&i。(*s1)){min=i;break;}}for(i=1;i;i+){if((*ht)[i].parent=0&i。(*s1)){if((*ht)[i].weight<;(*ht)[min].weight)min=i;}}s2=min;}/构造哈夫曼树ht。w存放已知的n个权值void CrtHuffmanTree(HuffmanTree*ht,int*w,int n){int m,i,s1,s2;m=2*n-1;ht=(HuffmanTree)malloc((m+1)*sizeof(HTNode));for(i=1;i;i+)/1-n号存放叶子结点,初始化{(*ht)[i].weight=w[i];(*ht)[i].LChild=0;(*ht)[i].parent=0;(*ht)[i].RChild=0;}for(i=n+1;i;i+){(*ht)[i。

求哈夫曼编码 #includeincludeinclude定义赫夫曼树结点的结构体变量,存放结点的权值、字符、双亲、坐孩子和右孩子*/typedef struct{int weight;char ch;增加一个域用于存放该节点的字符int parent,lchild,rchild;}HTNode,*HuffmanTree;typedef char*HuffmanCode;指向赫夫曼编码的指针本程序用到的函数原型*/void welcome();打印操作选择界面void HuffmanCoding(HuffmanTree&,char*,int*,int);建立赫夫曼树的算法void select(HuffmanTree HT,int j,int*s1,int*s2);从目前已建好的赫夫曼树中选择parent为0且weight最小的两个结点void Init();输入n个字符及其对应的权值,根据权值建立哈夫曼树void Coding();编码void Decoding();译码void Print_code();打印译码好的代码文件void Print_tree();以凹凸表形式打印哈夫曼树int Read_tree(HuffmanTree&);从文件中读入赫夫曼树void find(HuffmanTree&HT,char*code,char*text,int i,int m);译码时根据01字符串寻找相应叶子节点的递归算法void Convert_tree(unsigned char T[100][100],int s,int*i,int j);将内存中的赫夫曼树转换成凹凸表形式的赫夫曼树HuffmanTree HT;全局变量,指向存放赫夫曼树的存储空间int n=0;。

哈夫曼编码器 include\"stdio.h\"#include\"stdlib.h\"#include\"string.h\"typedef struct{ char ch;unsigned int weight;unsigned int parent,lchild,rchild;} HTNode;哈夫曼树类型定义(用一。

/*algo6-1.c 求哈夫曼编码。实现算法6.12的程序*/公用的常量和类型-includeincludeincludeinclude函数结果状态代码define TRUE 1define FALSE 0define OK 1define ERROR 0define INFEASIBLE-1define OVERFLOW-2define UINT_MAX 1000typedef int Status;c6-7.h 哈夫曼树和哈夫曼编码的存储表示*/typedef struct HTNode{char leaf;unsigned int weight;unsigned int parent,lchild,rchild;}HTNode,*HuffmanTree;动态分配数组存储哈夫曼编码表*/typedef char*HuffmanCode;动态分配数组存储哈夫曼编码表*/typedef struct Node{char leaf;unsigned int weight;struct Node*next;}LeafNode,*LeafLink;typedef struct{LeafLink head;unsigned len;}LeafLinkList;int min1(HuffmanTree t,int i){/*函数void select()调用*/int j,flag;unsigned int k=UINT_MAX;取k为不小于可能的值*/for(j=1;j;j+)if(t[j].weight[j].parent=0)k=t[j].weight,flag=j;t[flag].parent=1;return flag;}void select(HuffmanTree t,int i,int*s1,int*s2){/*s1为最小的两个值中序号小的那个*/int j;s1=min1(t,i);s2=min1(t,i);if(*s1>;*s2){j=*s1;s1=*s2;s2=j;}}。

关于C语言 哈夫曼编码器的 求大神!!!! 什么都不懂 请告诉每句话的意思 和程序的大致思路 谢谢了!! #includeincludeincludedefine MAXLEN 1000typedef struct hnode/Huffman树的节点{int weight,parent,lchild,rchild;}HTNode;typedef HTNode HFMT[MAXLEN];构造了一千个节点void InitHFMT(HFMT T,int*countPtr,int*sumWeightPtr)/统计权值,为建树做准备{FILE*fp;int i=0,weight,count,sumWeight=0;char ch;int tmp[MAXLEN];fp=fopen(\"weight.txt\",\"r\");printf(\"从文件weight.txt读到的权值依次为:\\n\");while。feof(fp)){fscanf(fp,\"%d\",&weight);fscanf(fp,\"%c\",&ch);printf(\"%4d\",weight);tmp[i+]=weight;sumWeight=sumWeight+weight;}count=i;countPtr=count;sumWeightPtr=sumWeight;fclose(fp);for(i=0;i*count-1;i+){if(i)T[i].weight=tmp[i];elseT[i].weight=0;T[i].lchild=-1;T[i].rchild=-1;T[i].parent=-1;}}取出节点中权值最小的两个void SelectMin(HFMT T,int i,int*min1PoiPtr,int*min2PoiPtr,int sumWeight){int min1=sumWeight;int min2=sumWeight;int j;for(j=0;j;j+){if(T[j].parent=-1&T[j].weight){min1=T[j].weight;min1PoiPtr=j;}}for(j=0;j;j+){if(T[j].parent=-1&T[j].weight。(*min1PoiPtr)){min2=T[j].weight;。

急求C++哈夫曼编码代码! #includeincludeusing namespace std;typedef struct{int weight;int flag;int parent;int lchild;int rchild;}hnodetype;typedef struct{int bit[10];int start;char leaf;}hcodetype;void huf(char cha[],int m[],int n){int i,j,m1,m2,x1,x2,c,p;hnodetype*huffnode=new hnodetype[2*n-1];hcodetype*huffcode=new hcodetype[n],cd;for(i=0;i*n-1;i+){huffnode[i].weight=0;huffnode[i].parent=0;huffnode[i].flag=0;huffnode[i].lchild=-1;huffnode[i].rchild=-1;}for(i=0;i;i+){huffnode[i].weight=m[i];huffcode[i].leaf=cha[i];}for(i=0;i;i+){m1=m2=10000000;x1=x2=0;for(j=0;j;j+){if(huffnode[j].weight[j].flag=0){m2=m1;x2=x1;m1=huffnode[j].weight;x1=j;}else if(huffnode[j].weight[j].flag=0){m2=huffnode[j].weight;x2=j;}}huffnode[x1].parent=n+i;huffnode[x2].parent=n+i;huffnode[x1].flag=1;huffnode[x2].flag=1;huffnode[n+i].weight=huffnode[x1].weight+huffnode[x2].weight;huffnode[n+i].lchild=x1;huffnode[n+i].rchild=x2;}for(i=0;i;i+){cd.start=n-1;c=i;p=huffnode[c].parent;while(p。0){if(huffnode[p。

#char#叶子结点#typedef#char函数#哈夫曼编码

随机阅读

qrcode
访问手机版