首页
学习
活动
专区
工具
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

96240

实现文件压缩压缩c语言

写一个对文件进行压缩和解压缩的程序,功能如下: ① 可以对纯英文文档实现压缩和解压; ② 较好的界面程序运行的说明。...介绍: 效率最高的判别树即为树 在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码...文件压缩与解压 姓名: 范天祚 1 程序说明 1.1数据结构 树 1.2函数功能说明 printfPercent界面 compress()读取文件内容并加以压缩,将压缩内容写入另一个文档 uncompress...()解压缩文件,并将解压后的内容写入新文件 1.3 程序编写的思路及流程 压缩:统计字符出现次数、将节点按出现次数排序、构造树、设置字符编码、读文件字符、按设置好的编码替换字符、写入存储文件 解压....count --; for (i = 0; i < 512; i ++) //HUFFMAN算法中初始节点的设置 { if (header

2.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

树与编码:聪明的数据压缩技术

hello,大家好,我是 Lorin,今天给大家带来数据结构中,二叉树中的特殊类型-树,下面我们来看看什么是树以及它是如何实现数据存储和传输的压缩。...算法构建树的过程称为算法,核心思想是将权重越大的节点放在靠近根节点的位置使节点的带权路径长度最小。...这棵树便是树。...key, Integer weight) { this.key = key; this.weight = weight; } }}应用-编码编码在数据压缩中有非常广泛的运用...编码构建实际上,一段内容中不同的字符出现的频率是不同的,树编码的的思想就是使出现频率高的字符编码长度尽可能小。

53450

树和编码

在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下(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.8K90

C++实现编码压缩软件

前言 一个简单的压缩软件,利用思想,构造编码,实现对文件的二进制压缩,以及解压,再利用MFC制作可视化操作界面,美化软件又简化文件操作。...根据已构造完成的树,从上往下开始构造每个结点的编码字符串,从根节点出发,如果下一个节点是其双亲的右孩子结点则在编码后接1,如果是左孩子结点则在编码后接0.存放树信息用到的是Huff_arr...根据已构造完成的树,从上往下开始构造每个结点的编码字符串,从根节点出发,如果下一个节点是其双亲的右孩子结点则在编码后接1,如果是左孩子结点则在编码后接0.编码树的左分支代表 0,右分支代表...,即源文件对应的字符和字符频度,在将编码每八位转成一个十进制值对应的字符时,有可能编码不是8的整数倍,需要在编码最后面补充8个0,多余的编码便可借0补位,以此避免二进制文件写入错误...,构造树 (3) 读取总编码生成的二进制数据。

2.1K60

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); } //开始构建

8410

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

我们称这样树为最优二叉树,或者树。   那么我们的问题就转变为:给N个节点,如何构造这样一棵树。   ...树的构造   我们观察树的形态树 编码,很容易看出,越大的数字应该放在越靠近根节点的位置,这样路径长度比较短:   构造这种树的算法是一种很好理解的贪心算法: 1....那么我们有一个问题,树唯一吗?其实即便在我们上面的例子中,他也不是唯一的树 编码,因为两个节点都可以选择放在左子树或者右子树,我们称这种树为同构树。   ...上图中,黄色的两个节点的左右子树和左侧树对应的节点正好相反(镜像),他们都可以通过上面的生成算法生成,只在相关节点选择时,将左右子树交换位置即可。   如果排除同构的情况,树唯一吗?...树的应用——编码   树最经典的应用是编码。在介绍编码之前我们先要介绍下可变长度的编码。   假设我们有一篇文字需要编码,这篇文字只有ABCDE5个字符。

56430

树、编码和字典树

树         树(Huffman Tree)是一种带权路径长度最短的二叉树。树常常用于数据压缩,其压缩效率比较高。...树的构建过程可以用贪心算法实现,构建出的树可以保证带权路径长度最短。...根据树的构建结果,生成每个字符的编码,并将输入字符串中每个字符替换为其对应的编码,得到压缩后的字符串。 由于编码是一种最优编码方法,因此它具有以下优点: (1)压缩率高。...使用编码进行压缩可以达到很高的压缩率,特别是对于包含大量重复字符的文本文件,编码的效果更加明显。 (2)无损压缩编码是一种无损压缩方法,压缩后的数据可以完全恢复为原始数据。...所以我们就可以使用编码,也就是最优无前缀编码。 通过这个树得到A:0 B:10 C:110 D:111,原文也就转换成了01001101101110,len= 14。

32910

算法编码(Huffman Coding)

编码? 是 Huffman 于 1952 年提出一种编码方法。 是一种无损编码方式,是可变字长编码 (VLC) 的一种。...结点带权路径长度:结点到树根的路径长度与结点的权的乘积; 树的带权路径长度:树中所有叶子结点的带权路径长度之和(WPL); 最优二叉树:WPL最小 的二叉树; 最优二叉树构造过程: 假设有n个权值,则构造出的树有...n个权值分别设为 w1、w2、…、wn,则树的构造规则为: 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); 图1 ?...重复上面 2 步,直到森林中只剩一棵树为止,该树即为所求得的树。 图3 ? 图4 ? 图5:最优二叉树构造完成 ? ? 3. 编解码过程?...例:用编码压缩字符串 “ABCACCDAEAE”; 图:编码过程构建的最优二叉树 ? 图:JS 代码 ? ? ?

2.1K20

C++ 漫谈

不等长编码的具体思路如下: 如现在要发送仅由A、B、C、D 4 个字符组成的报文信息 ,A字符在信息中占比为 50%,B的占比是 20%, C的占比是 15%, D的 占比是10%。...为什么称编码为树? 因为字符的编码是通过构建一棵自下向上的二叉树推导出来的,如下图所示: 树的特点: 信息结点都是叶子结点。 叶子结点具有权值。...相信大家对树有了一个大概了解,至于如何通过构建树,咱们继续再聊。 3....具体实现算法如下: 把n个结点存储到优先队列中,则n个节点都有一个优先权Pi。这里是权值越小,优先权越高。 如果队列内的节点数>1,则: 从队列中移除两个最小的结点。...在树中,叶子结点有 n个,非叶子结点有 n-1个,使用数组保存树上所的结点需要 2n-1个存储空间 。其算法思路和前文使用队列的思路差不多。

57620

编码

树 构建最短带权路径长度的二叉树,叫做树,也叫最优树(权重越大的结点离树根越近) 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 编码应用 通过编码传输文本...开源压缩框架 3.1 图片 Thumbnailator是专门压缩图片的,使用非常简洁 // 图片压缩 Thumbnails.of("C:\\Users\\Howl\\Desktop\\InPic.png

35710

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

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

46630
领券