首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言实现编码_编码压缩文件c语言

用一个有序链表(从大到小)来保存节点,然后通过链表来构造霍夫曼树, 再由霍夫曼树得到霍夫曼编码**/ typedef struct huffman_tree_node{ int weight;//权重 char c;...HuffmanTreeNode; //霍夫曼树节点 typedef struct huffman_code{ char *s;//编码 如 010, 00, .... int len;//编码长度 char c;...* createHuffmanTreeNode(char c, int weight){ HuffmanTreeNode * node = (HuffmanTreeNode *)calloc(1, sizeof...(HuffmanTreeNode)); node->c = c; node->weight = weight; node->nextHuffmanTreeNode = NULL; node->leftHuffmanTreeNode...= 0){ //到叶子节点了 //打印编码结果(或保存到结构体中): printf("%c->%s\n", node->c, s); free(s); return; } //遍历左节点 编码增加一个0

97040

树和编码

在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下(HUFFMAN)树和编码。编码是树的一个应用。编码应用广泛,如JPEG中就应用了编码。...首先介绍什么是树。 树又称最优二叉树,是一种带权路径长度最短的二叉树。...可以证明树的WPL是最小的。   编码步骤: 一、对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,...,Ti,......eg:对于这样的8个节点:5  29  7  8  14  23  3  11,我们进行编码的过程如下: ? ---- ? ---- ? ---- ? ---- ? ---- ? ---- ?...然后,我们利用Huffman算法构造出的各字符的二进制编码为(节点的左子树编码为0,右子树编码为1): A: 1011110 B: 1011111 C: 101110 D: 10110

1.9K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++实验】树与编码实验

    问题描述: 利用编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。...试为这样的u信息收发编写一个码的编/译码系统。 基本要求: (1)接收原始数据(电文):从终端输入电文(电文为一个字符串,假设仅由26个小写英文字母构成)。...(2)编码:利用已建好的树,对电文进行编码。 (3)打印编码规则:即字符与编码的一一对应关系。 (4)打印显示电文以及该电文对应的编码。...(5)接收原始数据(编码):从终端输入一串二进制编码(由 0和1构成)。 (6)译码:利用已建好的树对该二进制编码进行译码。 (7)打印译码内容:将译码结果显示在终端上。...for(int i=0;i<number;i++) { hfm[i].weight=temp[i][0]; code[i]=new HuffCode(number); } //开始构建

    9010

    nginx中的解码算法-解码

    引言   在《nginx中的解码算法[上]-编码》中,我们介绍了nginx采用查表的方法来实现的编码对http2 hpack进行压缩的功能,其编码的实现原理还是比较简单的。...然而,上山容易下山难,nginx中实现的快速解码算法在理解上相对于编码算法有一些难度的。今天我们来聊一聊nginx是如何来实现快速解码的。   为什么要增加快速这个形容词呢?...因为在学习原理的时候,书本上介绍的是采用构建树的方式,通过一边读取输入流中的比特,一边在树中不断游走的方式来实现的解码方式,虽然这种方式比较容易理解,但是其解码效率是不那么理想的。...本文分三部分进行讲解,首先介绍nginx实现的解码算法中的状态转移矩阵的构造及利用状态转移矩阵如何进行解码的原理;接着我们结合nginx的源码来详细分析nginx的解码源码的实现原理;最后,介绍快速解码算法的最核心的内容...举个例子,譬如,0a0a9bc\xf8的编码为 00 c0 37 e3 27 ff ff eb,按照nginx定义的状态转移矩阵,人工进行解码,将过程总结成一个表格,如下:   需要特别说明的是上述表格的

    8310

    树 编码-# 树的应用——编码

    树 “最优”的二叉树   我们考虑这样一个要求:把成绩从百分制转为五级制。...我们称这样树为最优二叉树,或者树。   那么我们的问题就转变为:给N个节点,如何构造这样一棵树。   ...树的构造   我们观察树的形态树 编码,很容易看出,越大的数字应该放在越靠近根节点的位置,这样路径长度比较短:   构造这种树的算法是一种很好理解的贪心算法: 1....那么我们有一个问题,树唯一吗?其实即便在我们上面的例子中,他也不是唯一的树 编码,因为两个节点都可以选择放在左子树或者右子树,我们称这种树为同构树。   ...树的应用——编码   树最经典的应用是编码。在介绍编码之前我们先要介绍下可变长度的编码。   假设我们有一篇文字需要编码,这篇文字只有ABCDE5个字符。

    57930

    使用树实现文本编码、解码

    编码可以对日常数据量很大的数据,进行数据压缩技术来实现存储和传输。...所以在本程序中,需要构造一棵二叉树来存储一大串字符串,对给构造出来的树进行编码,再由已经编好的编码对给定的字符串进行编码,之后对编码的字符串进行解码,最后比较编/解码前后字符串是否相同。...第三,编造编码。根据二叉树,对每个叶节点进行编码;结果用map来储,其中key=叶节点,value=编码。 第四,编码。根据编码,对给定字符进行编码,返回结果字符串。 第五,解码。...: map_code.keySet()){ System.out.println("字符'"+c+"'的编码:"+map_code.get(c)); } String text...{ this.code = c; } public char getCode(){ return code; } } //树的叶子结点数据 private char

    92410

    编码

    树 构建最短带权路径长度的二叉树,叫做树,也叫最优树(权重越大的结点离树根越近) 1.1 基本定义 路径:树中的一个节点到另一个节点之间的通路 路径长度:某路径中所经过的节点数量 节点的权:...编码 编码是一种编码方式,其可以对信息进行压缩,而从提高存储,传输的效率 2.1 基本定义 等长编码:任何字符的编码长度都相同,比如ASCII。...[01,10,11,100,101]中10是100的前缀,因此不是无前缀编码 2.2 构建步骤 根据权值构建树 将树的左树标 0,右树标记1,根节点不计算 将权值替换为对应的字符 列出字符对应的二进制...2.3 构建图示 假设字符A、B、C、D对应的权值为1、9、4、6 (4) 字符 编码 A 000 B 1 C 001 D 01 2.4 编码应用 通过编码传输文本...,记录字符及其对应的编码,保存文件为 HuffmanCode 将原文的字符用编码代替,保存文件为 HuffmanText 将上面两个文件发送给对方 对方根据这两份文件就可以解码出原文 3.

    36310

    C++ 漫谈

    不等长编码的具体思路如下: 如现在要发送仅由A、B、C、D 4 个字符组成的报文信息 ,A字符在信息中占比为 50%,B的占比是 20%, C的占比是 15%, D的 占比是10%。...为什么称编码为树? 因为字符的编码是通过构建一棵自下向上的二叉树推导出来的,如下图所示: 树的特点: 信息结点都是叶子结点。 叶子结点具有权值。...如上二叉树,A结点权值为0.5,B结点权值为0.2,C结点权值为0.15,D结点权值为 0.1。 编码为不等长前缀编码(即要求一个字符的编码不能是另一个字符编码的前缀)。...相信大家对树有了一个大概了解,至于如何通过构建树,咱们继续再聊。 3....总结 树是二叉树的应用之一,掌握树的建立和编码方法对解决实际问题有很大帮助。

    58820

    树 编码-数据结构(C语言

    导语   本文使用C语言。...对某一输入的字符串,对其构造()树,并由此树的到字符串中每一个字符的编码   本文树和编码采用顺序存储结构实现   树   给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小...树是带权路径长度最短的树,权值较大的结点离根较近。   树,图片来源百度百科编码   在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。...利用树来设计二进制的前缀编码,既满足前缀编码的条件,又保证报文编码总长最短,该前缀编码称为编码   编码   如上图所示,对于一个字符串“” 来说,很容易知道每个字符出现的频次{3,2...通过该树,我们可以得到每个字符的编码 A=10,B=001,C=01,D=11,E=000   容易证明,每个字符的编码都是前缀编码   C语言实现编码   网上许多大佬实现树的结点都是采用链式存储结构

    47630

    树学习笔记-构建

    什么是树? 树(Huffman Tree)是一种用于数据压缩的树形数据结构,由David A. Huffman在1952年发明。...最终生成的树是一棵带权路径长度最小的二叉树,可以根据树来生成每个字符的编码,从而实现数据压缩。 树构建过程 从数组中选择权值最小的两个结点,作为子结点,生成一棵树。...构建树代码(C++) 下面是使用c++实现的构建树的代码 //树构建 BTreeNode *CreateHuffman(ElemType a[],int n) { BTreeNode...下面是树编码的实现算法: 通过递归调用实现编码,函数首先判断当前结点是否由孩子结点,如果没有孩子结点,就直接遍历静态数组,输出,此时数组就是当前结点的编码。...c++: //树编码,len传入的时候是0,因为根节点的是0 void HuffManCoding(BTreeNode *FBT,int len){ static int a[10];

    1.1K40
    领券