当前位置: 首页 > wzjs >正文

网站建设的一些背景图片建筑公司资质等级

网站建设的一些背景图片,建筑公司资质等级,网页视频制作,做网站 什么语言好👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 C语言 哈夫曼编码传输(源码数据文件&am…

请添加图片描述


👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


C语言 哈夫曼编码传输(源码+数据文件)【独一无二】


目录

  • C语言 哈夫曼编码传输(源码+数据文件)【独一无二】
  • 一、设计要求
  • 二、设计思路
    • 2. 核心数据结构与辅助函数
      • 2.1 数据结构定义
      • 2.2 最小堆辅助函数
    • 3. 哈夫曼树的构建与编码生成
      • 3.1 构建哈夫曼树
      • 3.2 生成哈夫曼编码表
    • 4. 文件编码、解码与验证
      • 4.1 编码文件
      • 4.2 解码文件
      • 4.3 文件一致性对比
    • 5. 主函数及整体工作流程


一、设计要求

问题4:某系统在通信联络中需要传送一个英文文件,该文件包含26个英文字母和空格等字符。请自行准备一个文本文件,要求这个文件中总符号数不少于10000个。要求运用哈夫曼编码方法,对该文本文件进行编码和解码,并校验解码后的文本正确性。请编写具体的计算机程序

在这里插入图片描述


二、设计思路

在这里插入图片描述

整个程序可以分为以下几个主要部分:

  1. 文件操作与预处理

    • 获取文件大小(getFileSize())。
    • 统计输入文件中每个字符的出现频率,为构建哈夫曼树做准备。
  2. 核心数据结构与辅助工具

    • 定义哈夫曼树节点(HuffmanTreeNode)和最小堆(MinHeap)的数据结构。
    • 实现最小堆的基本操作:插入、交换、向下调整(minHeapify())与提取最小节点(extractMin())。
  3. 哈夫曼树构建与编码表生成

    • 根据字符频率构建哈夫曼树,采用贪心策略不断合并频率最低的两个节点。
    • 遍历哈夫曼树生成每个字符的二进制编码(buildCodes()),并存入全局编码表 huffmanCode 中。
  4. 文件编码与解码

    • 通过编码表对原始文件进行编码(encodeFile()),将字符转换成由 0 和 1 组成的字符串保存到输出文件中。
    • 利用构建好的哈夫曼树对编码后的文件进行解码(decodeFile()),还原出原始文本信息。
  5. 验证与性能统计

    • 对比原始文件和解码后的文件(compareFiles())确保解码准确性。
    • 计算文件压缩率,展示压缩效果。

2. 核心数据结构与辅助函数

2.1 数据结构定义

程序中定义了两个核心数据结构,在哈夫曼编码中起到重要作用:

  • 哈夫曼树节点(HuffmanTreeNode)

    每个节点存储一个字符及其出现频率,同时包含左右孩子指针。例如:

    typedef struct HuffmanTreeNode {unsigned char ch;   // 字符unsigned freq;      // 字符频率struct HuffmanTreeNode *left, *right;
    } HuffmanTreeNode;
    
  • 最小堆(MinHeap)

    最小堆用于快速找到频率最小的节点,在构建哈夫曼树过程中非常关键:

    typedef struct MinHeap {int size;int capacity;HuffmanTreeNode** array;
    } MinHeap;
    

2.2 最小堆辅助函数

程序实现了常用的最小堆操作,包括节点交换、向下调整(minHeapify())、插入节点(insertMinHeap())和提取最小节点(extractMin())。
例如,向下调整函数保证了堆的性质:

void minHeapify(MinHeap* minHeap, int idx) {int smallest = idx;int left = 2 * idx + 1;// 代码略....if (right < minHeap->size &&minHeap->array[right]->freq < minHeap->array[smallest]->freq) {smallest = right;}if (smallest != idx) {swapNode(&minHeap->array[smallest], &minHeap->array[idx]);minHeapify(minHeap, smallest);}
}

在这里插入图片描述


3. 哈夫曼树的构建与编码生成

3.1 构建哈夫曼树

函数 buildHuffmanTree() 根据统计好的字符频率构建哈夫曼树,其基本流程如下:

  1. 统计有效字符数量
    遍历频率表,统计每个出现过的字符个数以确定最小堆的容量。

  2. 构建最小堆并插入所有字符节点
    为每个出现的字符创建一个节点,并插入到最小堆中。

  3. 合并最小节点
    循环执行以下操作:

    • 提取两个最小频率的节点。
    • 创建一个新节点,其频率为两节点频率之和,新节点左右指针指向这两个节点。
    • 将新节点重新插入堆中,直到堆中只剩下一个节点,该节点即为哈夫曼树的根。

部分代码示例如下:

while (minHeap->size > 1) {HuffmanTreeNode* left = extractMin(minHeap);HuffmanTreeNode* right = extractMin(minHeap);HuffmanTreeNode* top = createNode('\0', left->freq + right->freq);top->left = left;top->right = right;insertMinHeap(minHeap, top);
}

3.2 生成哈夫曼编码表

利用已经构建好的哈夫曼树,通过递归方式生成每个字符的编码:

  • 当递归向左(代表二进制“0”)或右(代表二进制“1”)不断累积编码,直到遇到叶子节点;
  • 到达叶子节点后,将生成的二进制字符串保存到全局编码表 huffmanCode 中。

函数示例:

void buildCodes(HuffmanTreeNode* root, char* code, int length) {if (!root) return;// 代码略....code[length] = '0';buildCodes(root->left, code, length + 1);code[length] = '1';buildCodes(root->right, code, length + 1);
}

在这里插入图片描述


4. 文件编码、解码与验证

4.1 编码文件

函数 encodeFile() 打开原始文件,并对每个字符用对应的哈夫曼编码替换后写入到编码文件中。
关键代码:

while ((ch = fgetc(fin)) != EOF) {fputs(huffmanCode[ch], fout);
}

4.2 解码文件

函数 decodeFile() 根据编码文件中的 0/1 流,利用哈夫曼树反向遍历解码还原每个字符,直到完整还原出原始文本:

HuffmanTreeNode* curr = root;
while ((bit = fgetc(fin)) != EOF) {if (bit == '0')curr = curr->left;else if (bit == '1')curr = curr->right;// 到达叶子节点,输出字符if (!curr->left && !curr->right) {fputc(curr->ch, fout);curr = root;}
}

4.3 文件一致性对比

函数 compareFiles() 将原始文件和解码后的文件进行字节级对比,确保解码过程没有任何错误:

do {c1 = fgetc(f1);c2 = fgetc(f2);if (c1 != c2) { /* 不同 */fclose(f1);fclose(f2);return 0;}
} while (c1 != EOF && c2 != EOF);

在这里插入图片描述


5. 主函数及整体工作流程

主函数 main() 整合了上述所有步骤,其主要流程如下:

  1. 预处理与频率统计

    • 判断原始文件是否存在,读取文件大小。
    • 遍历文件,统计每个字符的出现频率,填充频率表 freqTable
  2. 构建哈夫曼树与生成编码表

    • 调用 buildHuffmanTree() 构建哈夫曼树;
    • 通过 buildCodes() 生成用于编码的哈夫曼编码表。
  3. 执行编码与解码

    • 使用 encodeFile() 对原始文件进行编码;
    • decodeFile() 将编码后文件解码为还原文件。
  4. 结果验证与性能评估

    • 调用 compareFiles() 检查解码文件与原文件是否一致;
    • 计算压缩率,并打印原始大小、压缩后大小及压缩率。

主函数示例代码:

int main() {const char* inputFile    = "input.txt";    // 原始文件const char* encodedFile  = "encoded.txt";  // 编码结果(0/1串)const char* decodedFile  = "decoded.txt";  // 解码结果// 1) 读取原文件大小// 代码略....// 3) 构建哈夫曼树HuffmanTreeNode* root = buildHuffmanTree(freqTable);// 代码略....printf("原文件大小:%ld 字节\n", originalSize);printf("压缩后文件大小:%ld 字节\n", compressedSize);printf("压缩率:%.2f%%\n", ratio);printf("解压后文本与原文本相同:%s\n", isSame ? "True" : "False");// 释放哈夫曼树freeHuffmanTree(root);return 0;
}

运行结果:
在这里插入图片描述

---


文章转载自:

http://tNN2dIFZ.ywgrr.cn
http://r1K8B9JT.ywgrr.cn
http://17dHs6Mz.ywgrr.cn
http://0Hkp4fcu.ywgrr.cn
http://3izIu6Lv.ywgrr.cn
http://FoZPuzTV.ywgrr.cn
http://4KarNZz3.ywgrr.cn
http://1puPZxaD.ywgrr.cn
http://YAKdZV1q.ywgrr.cn
http://ny6glqKG.ywgrr.cn
http://PsM4Mmyg.ywgrr.cn
http://DeXEaCqr.ywgrr.cn
http://fvpFgg5A.ywgrr.cn
http://I7pRb5HN.ywgrr.cn
http://KaXs0I8h.ywgrr.cn
http://ad44enjk.ywgrr.cn
http://wDWz25Z9.ywgrr.cn
http://Cdsb0uKh.ywgrr.cn
http://PzORwmrf.ywgrr.cn
http://jJ99FpYC.ywgrr.cn
http://C6yB2kGZ.ywgrr.cn
http://Ehy57Fpk.ywgrr.cn
http://A2U8qrn8.ywgrr.cn
http://NlATN9E6.ywgrr.cn
http://jV46doqX.ywgrr.cn
http://8UuCmTyB.ywgrr.cn
http://yDT6iRki.ywgrr.cn
http://6ms0ZshP.ywgrr.cn
http://C7jyeVZr.ywgrr.cn
http://TNffO6eF.ywgrr.cn
http://www.dtcms.com/wzjs/706616.html

相关文章:

  • 南宁网站建设技术支持海南注册家族公司条件
  • 在哪里可以找到网站响应式网站无法做联盟广告
  • 网站备案多长时间来完成电子商务网上法庭
  • 网站建设责任分工表长沙网页制作模板
  • 网站建设的创新之处网站建设找汉狮
  • 网站建设会遇到哪些问题河南省百城建设提质工程官网网站
  • 济南网站制作工具东莞网站建设优化排名
  • 河南网站建设优化网站多少个关键词
  • 购物网站开发代码安徽省建设工程管理信息网
  • 波莱网站开发做网站建设公司crm在线的提升服务
  • 广东建设执业资格注册管理中心网站wordpress wpquery
  • 广西建设网站官网雅安网站建设公司
  • 2017 上海网站备案发帖推广哪个平台好
  • 有人做几个蝎子养殖门户网站平顶山市做网站
  • 网站建设简单合同模板东营市建设工程网官网
  • 关于网络的网站怎么做网站改版提案
  • 免费在线网站甘肃建设网站
  • 网站标题字体大小广州市手机网站建设
  • 国外电商网站网站模版怎么上传到空间
  • 安徽区块链虚拟币网站开发价格郑州广告牌制作市场
  • 做标准件网站四川超宇建设集团有限公司网站
  • 名师工作室建设网站银川网站怎么做seo
  • php做彩票网站吗怎么做网站的301
  • 新科网站建设个人做外贸的网站
  • 美发网站模板天津市规划局官方网站建设项目
  • 马鞍山网站建设咨58同城泉州网站建设
  • 烟台企业网站怎么优化网站二级导航
  • 做游戏人设计网站wordpress 网页制作
  • 制作网站需要域名还需要什么如何自己做购物网站
  • 中华企业网站建设新华书店的做的数字阅读网站