哈夫曼树结构体数组生成方法
来源:互联网 发布:笑气在淘宝怎么搜 编辑:程序博客网 时间:2024/04/28 19:17
哈夫曼树结构体数组生成方法。
#include"iostream"#include"string"#include"stdio.h"struct node{int data; //data域int tag; //标记0为叶子,1为分支节点node *pos; //后继指针node *f; //父亲指针int time; //编码位数};void sort(node table[], int i, int j, node **head);using namespace std;//假设拥有数组{3,5,7,9,11}构建哈夫曼树int main(){int i, j, num = 0;node table[15], *head, *p;//5个数最坏打算15个结点memset(table, 0, sizeof(table));//置零for (i = 0; i < 5; i++)//顺序存储数据(0放后面)table[i].data = 2 * i + 3;for (i = 0; table[i].data != 0; i++)num++;//计数if (num == 1){table[0].time = 1;}else{for (i = 0; i <(num - 1); i++)//构建待排序列{table[i].pos = &table[i + 1];}head = &table[0];i = 0;//i控制待排序列头,j控制尾j = num;while (i != j)//当i==j时排完{table[j].data = head->data + head->pos->data;//生成分支节点head->f = head->pos->f = &table[j];//确定父子关系table[j].tag = 1;i += 2;head = head->pos->pos;//head指向待排序列中最小的位置if (i != j){sort(table, i, j, &head);//把新增添的table[j]按序列放入待排序列(更改的是各元素的pos的指向)j++; //用指针的指针是因为新增添的元素有可能是待排序列中最小的元素,head的指向可能发生改变}}for (i = 0; table[i].data; i++)//求叶子结点所需的编码长度{if (table[i].tag == 0){p = &table[i];while (p->f){p = p->f;table[i].time++;}}}}return 0;}void sort(node table[], int i, int j, node **head){node *p = *head;if (table[j].data <= (*head)->data)//如果table[j]比原来最小的值还小,把table[j]放在原head的前面,head指向这个最小的位置{table[j].pos = *head;*head = &table[j];}else if (p->pos == 0)//如果待排序列中只有一个元素,且table[j]比head的值大,则添加到head的后面{(*head)->pos = &table[j];}else{while (p->pos && (!(table[j].data>p->data&&table[j].data <= p->pos->data))) // 找到一个table[j]适合的位置(大于前驱,不大于后继;)p。添加在p的后面。p = p->pos;table[j].pos = p->pos;p->pos = &table[j];}}
0 0
- 哈夫曼树结构体数组生成方法
- 一种初始化结构体数组的方法
- 数组--结构体数组
- 【原创】PB调用SAP的Web Service结构体数组参数方法详解(使用C#调用Web Service生成dll)
- java学习小记 数组及其方法 结构体
- 面向过程方法利用结构体写数组
- 结构体、结构体数组
- 冒泡选择排序 二维数组 虚方法 隐藏方法 枚举 类 结构体 构造方法
- MIDI文件结构分析及生成方法
- MIDI文件结构分析及生成方法
- MIDI文件结构分析及生成方法
- 动态生成树型结构方法
- MIDI文件结构分析及生成方法
- MFC 手动生成SDI结构的方法
- sqlserver生成表结构文档的方法
- 结构体数组使用方法
- 结构体数组
- 结构体数组
- JAVA——常见IO流的使用
- 45度斜角地图菱形坐标转换
- POJ 1797 Heavy Transportation
- linux下手动build spark1.6.0
- 匿名内部类那点事
- 哈夫曼树结构体数组生成方法
- 游戏地图中两点坐标相对的方向(角度)判断
- 斜45度地图简介、坐标系转换以及数据碰撞
- JavaScript中数组类型的常用操作方法以及属性
- Masonry自动计算cell行高:HYBMasonryAutoCellHeight
- Android Studio——通过java.net.URLConnection发送HTTP请求的方法
- Spring Security(20)——整合Cas
- Masonry自动布局详解一:基本用法
- Upgrading from ZeroMQ v2.2 to ZeroMQ v3.2