哈夫曼树编码

来源:互联网 发布:网络机顶盒安装方法 编辑:程序博客网 时间:2024/04/28 23:50

          终于会哈夫曼编码了,那就把代码发上去了,这周我们课设了,感觉自己好颓废,过了几天糜烂的生活,自己也不知道怎么回事,有些事也就是那个样子,不要因为其他人影响自己的情绪,对自己好点,说到还要做到,不仅嘴上说说而已。我昨天一个人去,就一个人去的,一个人的感觉也不错嘛,想做什么就做什么,自己的情绪也好多了,就像我说Low·魂淡想怎样就怎样痛怎样伤怎样,任何时候都不要让自己的心累。别笑我,幼稚的轻狂,

          其实这次自己做了3个调用函数,一个创建,一个输出,一个标记最小值,注意有个for语句空循环;

 

          

//#include <iostream>#include<stdio.h>#include<stdlib.h>typedef struct node{char data;int weight;int left,right;    int parent;}Huffman;void select(Huffman *G,int n,int *s1,int *s2){int i;printf("输出前%d个结点的数据,左右孩子,双亲 ,权值:\n",n);for(i=0;i<n;i++){printf("%3c%3d%3d%3d%3d\n",G[i].data,G[i].left,G[i].right,G[i].parent,G[i].weight);}for(*s1=0;*s1<n;(*s1)++){     if(G[*s1].parent==-1)      {        break;      }        }for(*s2=*s1+1;*s2<n&&G[*s2].parent!=-1;*s2=*s2+1);for(i=*s2;i<n;i++){   if(G[i].parent==-1)        {    if(G[i].weight<G[*s1].weight)    { *s2=*s1; *s1=i;    }            else if(G[i].weight<G[*s2].weight)        {       *s2=i;        }    }}}void CreateHuffman(Huffman *G,int n){int i;int s1,s2;for(i=0;i<n;i++){fflush(stdin);printf("请你输入第%d个节点的数据和权值: ",i+1);scanf("%c%d",&G[i].data,&G[i].weight);G[i].parent=-1;G[i].left=-1;G[i].right=-1;}for(i=n;i<2*n-1;i++){select(G,i,&s1,&s2);G[i].weight=G[s1].weight+G[s2].weight;G[i].left=s1;G[i].right=s2;G[i].parent=-1;G[i].data=' ';G[s2].parent=G[s1].parent=i;}}void PrintHuffNode(Huffman *G,int n){int i,k,start=0,j;int temp;char ch;char r[10]={'\0'};    for(i=0;i<n;i++)    {j=i;ch=G[j].data;start=0;  while(G[j].parent!=-1){temp=G[j].parent;if(G[temp].left==i){    r[start++]='0';    }else{   r[start++]='1';}j=temp;  }    printf("\n输出符号%c的哈弗曼编码为:",ch);  for(k=start-1;k>=0;k--)  {  printf("%c",r[k]);r[k]='\0';  }    printf("\n");}}int main(int argc, char** argv) {    Huffman *G;    int n;char a[50]={'\0'};    printf("please input vertxe number: ");    scanf("%d",&n);    G=(Huffman *)malloc((2*n-1)*sizeof(Huffman));    CreateHuffman(G,n);PrintHuffNode(G,n);    return 0;}


 

0 0
原创粉丝点击