哈夫曼树编码
来源:互联网 发布:网络机顶盒安装方法 编辑:程序博客网 时间: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
- 哈夫曼树编码
- 哈夫曼树编码
- 哈夫曼树编码
- 哈夫曼树与哈夫曼编码(前缀编码)理解
- 哈夫曼树和哈夫曼树编码
- 哈夫曼树及哈夫曼树编码
- 哈夫曼树及编码
- [数据结构]哈夫曼树、哈夫曼编码
- [数据结构]哈夫曼树、哈夫曼编码
- 哈夫曼树和哈夫曼编码
- 哈夫曼树与哈夫曼编码
- 哈夫曼树与哈夫曼编码、
- 哈夫曼树,哈夫曼编码
- 哈夫曼树与哈夫曼编码
- 哈夫曼树|构建|哈夫曼编码
- 建立哈夫曼树,求哈夫曼编码
- 哈夫曼树和哈夫曼编码
- hdu 1053 哈夫曼树/编码
- ArcEngine实现撤销和重置功能
- UVA - 11121 - Base -2 (负进制转换!)
- Java实例开发01-01 屏幕捕获工具
- Java调用shell脚本传带空格参数
- 流式布局的实现-1
- 哈夫曼树编码
- iOS CFNetwork 内部原理
- Hbase总结(四)- Hbase与传统数据库的区别
- C++ primer习题笔记第4章
- IO流实例代码练习
- adfqwer asdfasdf
- 【小话设计模式】行为型之解释器模式
- adsfqwe sdfasd
- NYON28大数阶乘