第一次发帖,先试试水,希望排版别太乱 今天给大家分享一串哈夫

电脑杂谈  发布时间:2019-04-29 23:25:55  来源:网络整理

哈夫曼树的编码_哈夫曼编码实验报告_哈夫曼树的编码c

哈夫曼树的编码c

第一次发帖,先试试水,希望排版别太乱

字符的编码方式有多种,除了大家熟悉的ascii编码,哈夫曼编码(huffmancoding)也是一种编码方式,它是可变字长编码。字符的编码方式有多种,除了大家熟悉的ascii编码,哈夫曼编码(huffman coding)也是一种编码方式,它是可变字长编码。哈夫曼编码是上个世纪五十年代由哈夫曼教授研制开发的,它借助了数据结构当中的树型结构,在哈夫曼算法的支持下构造出一棵最优二叉树,我们把这类树命名为哈夫曼树.因此,准确地说,哈夫曼编码是在哈夫曼树的基础之上构造出来的一种编码形式,它的本身有着非常广泛的应用.那么,哈夫曼编码是如何来实现数据的压缩和解压缩的呢。

一开始是用的冒泡排序,编译出来是等长的编码。。而且找了一天没发现错误,最后换了选择排序,总算把问题揪出来了

不多说,上代码——

——————————————————————————————————————————————————————

#include <stdio.h>

#include <stdlib.h>

#define N 8

struct hNode//定义数组结点

{

int suffix ;//下标

int weight ;//权值

int parent , lchild , rchild ; //父子结点

};

struct cNode// 定义编码结点

{

int suffix ;

int weight ;

int length ; //编码长度

char *code ; //编码字符串

};

void Initial( hNode h[],int w[] )//数组初始化( 将数组w[]里的数放到到h[]里面 )

{

int i;

for ( i = 1 ; i <= N ; i++ ) // 前半部分 , 叶子结点的标号从1 到 N

{

h[i].suffix = i ;

h[i].weight = w[i-1];

h[i].parent = 0 ;

h[i].lchild = 0 ;

h[i].rchild = 0 ;

}

86 //1--n号存放叶子结点,初始化叶子结点,结构数组来初始化每个叶子结点,初始的时候看做一个个单个结点的二叉树。(1) a、根结点无左子树的二叉树 b、根结点无右子树的二叉树c、只有根结点的二叉树或非叶子结点只有左子树的二叉树d、只有根结点的二叉树或非叶子结点只有右子树的二叉树(2) a、非叶子结点只有左子树的二叉树 b、只有根结点的二叉树 c、根结点无右子树的二叉树 d、非叶子结点只有右子树的二叉树 10、 假设一棵二叉树的后序遍历序列为 dgjhebifca,中序遍历序列为 dbgehjacif,则其前序遍历序列为 (10) 。2.哈夫曼编码规定哈夫曼编码的左分支代表0,右分支代表1,则从根节点到每个叶子结点所经过的路径组成的0和1的序列便为该叶子结点对应字符的编码,称为哈夫曼编码。

{

h[i].suffix =i ;

h[i].weight =0 ;

h[i].parent = 0 ;

h[i].lchild = 0 ;

h[i].rchild = 0 ;

}

哈夫曼树的编码c_哈夫曼编码实验报告_哈夫曼树的编码

}

//将数组h[]的结点按权值大小或下标顺序排序

void Sort ( hNode h[] ,int m , int n ,int action )

{

int i , j , pos ,min , flag ;

hNode temp ;

if( action == 0 ) //action == 0 ,用选择排序依权值从小到大排序


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-95077-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...