用三重指针实现HaffTree
来源:互联网 发布:mysql拖动排序设计 编辑:程序博客网 时间:2024/06/05 06:29
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct Tree{int wight;int left;int right;int flag;int parent;}HaffTree;void CreatHaffTree(HaffTree *p,int n,int *wight){int i,j; //循环变量int min1,min2; //最小值和次小值int x1,x2; //最小值和次小值的下标//初始化 HaffTreefor (i = 0; i < 2 * n -1; i++){if (i < n)p[i].wight = wight[i];elsep[i].wight = 0;p[i].parent = 0;p[i].left = p[i].right = 0;p[i].flag = 0;}//创建HaffTreefor (i = 0; i < n -1;i++){min1 = min2 = INT_MAX;x1 = x2 = 0;for (j = 0; j < n + i; j++){if (p[j].wight < min1 && p[j].flag == 0){min2 = min1;x2 = x1;min1 = p[j].wight;x1 = j;}else if (p[j].wight < min2 && p[j].flag ==0){min2 = p[j].wight;x2 = j;} }p[x1].flag = p[x2].flag = 1;p[x1].parent = p[x2].parent = n+i;p[n+i].wight = min1 + min2;p[n+i].left = x1;p[n+i].right = x2;}}void HaffTreeSet(HaffTree *p,int n,char ***Code){int i; // 循环变量char ch[20] = "";int start; //ch的下标int parent;int child;int lenth;(*Code) = (char **)malloc(sizeof(char **)*n);for (i = 0; i < n; i++){parent = p[i].parent;//p[i].parent 存储的是parent的下标child = i;start = 10;while (parent != 0){if(p[parent].left == child )ch[start--] = '1';else ch[start--] = '0';child = parent;parent = p[parent].parent;}int len = strlen(ch+start+1)+1;(*Code)[i] = (char *)malloc(len); // (*Code)[i] ==*(*Code)+i 即char * strcpy((*Code)[i],ch+start+1);}}void main(){int wight[] = {1,5,15,3,2,54,24,17,14};int n = sizeof(wight)/sizeof(wight[0]);HaffTree *p= (HaffTree*) malloc (sizeof( HaffTree)*(2*n-1));CreatHaffTree(p,n,wight);char **Code = NULL; //实际是创建了一个字符串数组的指针;想要改变数组内的值,就需要一个二级指针;想要在函数中改变,就需要三级指针;HaffTreeSet(p,n,&Code);for (int i = 0; i < n; i++){printf("%d ",wight[i]);puts(Code[i]);}}
阅读全文
0 0
- 用三重指针实现HaffTree
- 实现循环的三重境界
- JAVA实现三重DES加密软件
- Oracle 11g如何实现"三重分区"
- Hibernate高级实体关联映射之多值的实体关联(用组件类实现三重关联,单向导航)
- Android、Ios and Java 实现三重Des对称加密
- AngularJS 多重搜索——之三重搜索实现
- 用指针实现队列
- 用指针实现队列
- 用指针实现表
- 20170801 JAVA用三重循环解决比赛分组逻辑问题
- 三重境界
- 三重门
- 三重缓冲
- 三重背包
- 三重缓冲
- 用指针实现实验8.9
- 用指针实现变量交换
- 6-5 java简介
- RocketMQ原理解析-consumer 5.push消费-顺序消费消息
- VS2010程序输出路径参数设置
- Linux Device Tree 同名覆盖问题
- Redis相关
- 用三重指针实现HaffTree
- 线程sleep()和 wait()有什么区别?
- JAVA环境变量配置
- 1022. Digital Library (30)
- 夜神模拟器访问本地tomcat服务器测试:失败
- mysql对同一张表进行查询和赋值更新
- 深度学习斯坦福cs231n 课程笔记
- Delphi New,Getmem,ReallocMem联系与区别
- 引用类型(一)