基于C语言的哈夫曼转化软件

news2024/12/27 9:41:20

完整资料进入【数字空间】查看——baidu搜索"writebug"

该软件可实现如下功能:

用户可以通过点击“打开文件”按钮打开本地计算机中任意一个文本文件,点击确认将其文本导入到程序输入文本框中,也可以直接在文本框中通过键盘键入文本。

文本支持 UTF-8 格式,可以随意输入英文、数字和中文交给程序运行处理。

点击“开始”按钮可以开始程序,点击后该按钮变成“终止”按钮,点击即可终止程序。程序执行过程中,首先将字符逐个添加到右侧的编码表中,新添加一栏或者频率加一,正在处理的字符在文本框和编码表内都会有高亮颜色突出显示,不同的字符也会随机赋予不同的颜色显示,进行有效区分。

会按照字符出现频率将字符从上到下排序,出现频率即对应权重,首先将所有字符输入到树结构中当做初始节点,然后按照构建哈夫曼树的算法逐渐把节点按权重升序添加到哈夫曼树中,中间的树视图会将这一过程进行动态展示,过程中会对当前添加节点进行高亮颜色突出显示。

哈夫曼树建好之后,根据各个节点在树上的位置,对各个字符进行编码,显示到右侧的编码表中。

获得了字符编码后,即可对字符串的哈夫曼编码进行动态输出,输出在左下角的富文本框中,同样的,输出过程会有当前字符及其对应编码的高亮显示。

点击“停止”按钮可在程序执行过程中暂停程序,点击后按钮变为“继续”,再次点击即可继续执行。

当上一步点击“停止”后,可以点击“下一步”按钮,一步步的进行程序运行,仔细观察程序运行的每一步。

配有速度拖动条可以动态调节程序执行速度,每一步 1ms-1800ms 的变化区间,非常灵活,是通过控制 timer 控件的间隔来实现的。

程序会显示当前的运行步骤,主要有五个阶段(终止,读入,建树,编码,输出)

随机生成颜色种子,不同的字符会有不同的颜色显示,包括其对应的编码。

通过 ToolTip 控件,当程序执行完后,鼠标落在树节点上会显示树节点的路径权重编码信息,直观明了。

设计思想
可视化图形界面采用 C# .net framwork 编写,初步接触窗体程序设计,感觉和网页页面的前端后端类似,“前端”即窗体程序显示界面,通过.net framework 框架工具箱里的各个组件灵活进行搭配,至于“后端”,即各个模块对应的处理程序代码及其相应的算法。题目要求通过多种方式读入字符串,我考虑通过调用计算机本地文本文件或者直接输入两种方式输入字符串,这就需要一个按钮调用 openFileDialog 组件和一个文本输入框,题目要求给出哈夫曼树的构建显示过程并输出哈夫曼编码,没有涉及到解码过程,这就简单多了,哈弗曼编码的过程简单说就是先对所有字符排序,把它们当做初始节点,然后按照权重由小到大一个一个往哈夫曼树里增添。最后根据字符在哈夫曼树中的位置,进行相应的 0、1 编码,这样每个字符都会获得自己的一个独有的编码,最后按照字符串中字符的顺序依次输出编码,初始想法是这样。因此需要输入模块、控制模块、执行模块、输出模块,每个模块都会有不同的属性和功能。因此,首先通过 VS 可视化操作将整体页面设计完善,然后进入代码页面赋予对应模块相应的功能,最后达到程序正常运转。之后考虑到调整程序速度或者逐步执行以便详细观察哈夫曼编码过程,考虑添加 timer 计数器模块,通过控制其计时间隔控制程序执行速度,开始或者暂停。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/785654.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

502 Bad GateWay报错的解决方法

什么是502 bad gateway 报错 简单来说 502 是报错类型代码 bad gateway 错误的网关。是Web服务器作为网关或代理服务器时收到无效的响应。 用我们的口语说就是运行网站的服务器暂时挂了(不响应)。 产生错误的原因 1.连接超时 我们向服务器发送请求 由于服务器当前链接太多&am…

js设置一个定时器,定时发送请求

1.setTimeout方式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </he…

整流电路设计

一、交直流电区别 交流电&#xff1a;一般指大小和方向都随时间作周期性变化的电压或电流。交流电的极性在一个周期内变换多次&#xff0c;而直流电则保持恒定。 直流电&#xff08;电压或电流&#xff09;&#xff1a;直流电的方向不随时间而变化。直流电通常又分为恒定电压…

【Linux命令200例】chmod设置文件或目录的访问权限

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

Python获取接口数据

首先我们需要下载python&#xff0c;我下载的是官方最新的版本 3.8.3 其次我们需要一个运行Python的环境&#xff0c;我用的是pychram&#xff0c;需要库的话我们可以直接在setting里面安装 代码&#xff1a; # -*- codeing utf-8 -*- from bs4 import BeautifulSoup # 网页…

Stable Diffusion生成艺术二维码

Stable Diffusion生成艺术二维码 文章会有浏览问题&#xff0c;点击此处查看原文 首先需要一个Stable Diffusion服务环境&#xff0c;《Stable Diffusion服务环境搭建&#xff08;远程服务版&#xff09;》如果你已经有了那就忽略 一、准备一个比较好的二维码底图 首先解析二…

第一章 介绍 对 HL7 版本 2 的支持

文章目录 第一章 介绍InterSystems 对 HL7 版本 2 的支持HL7 版本 2 路由生成 第一章 介绍 InterSystems 对 HL7 版本 2 的支持 InterSystems 产品支持 HL7 版本 2 消息作为虚拟文档。虚拟文档是 InterSystems 产品仅部分解析的一种消息。这种消息具有标准的production 消息头…

微信朋友圈推广优势有哪些?

你知道的朋友圈推广效果有哪些 1、定向精准触达 在朋友圈广告推广中&#xff0c;人群的性别、年龄、兴趣爱好、活动范围、学历、手机型号、推广时段等&#xff0c;这些都是可以进行精准定向。通过精准定向&#xff0c;可以找到企业想找到的人群。 2、用户高活跃度 大家平均每…

亿发数字化生产工厂MES管理系统,助力云南工厂实现智能制造

近年来&#xff0c;云南省将制造业数字化作为“工业强省”战略的关键和打造现代产业体系的重中之重&#xff0c;而随着工业4.0时代的来临&#xff0c;数字化转型已成为制造企业企业蓬勃发展之路。在这个过程中&#xff0c;MES精益制造管理系统显露出潜力&#xff0c;成为云南省…

前端生成批量二维码,并且下载到本地

Ⅰ- 壹 - 功能展示和使用需求 需求描述 前端生成批量二维码&#xff0c;并且下载&#xff0c;本项目使用了 vue3. 功能展示 Ⅱ - 贰 - 封装代码 需要的库 yanr add qrcodejs2-fix // 生成二维码 yarn add html2canvas // 转图片 yarn add jszip// 压缩包 yarn add file-sa…

25.2 matlab里面的10中优化方法介绍——插值法(matlab程序)

1.简述 插值法 插值法又称“内插法”&#xff0c;是利用函数f (x)在某区间中已知的若干点的函数值&#xff0c;作出适当的特定函数&#xff0c;在区间的其他点上用这特定函数的值作为函数f (x)的近似值&#xff0c;这种方法称为插值法。如果这特定函数是多项式&#xff0c;就称…

(css)列表点击前后样式

(css)列表点击前后样式 效果&#xff1a; html <ul v-show"rightOne" class"one-content"><liv-for"(item,index) in exampleList":key"index"click"searchHandle(item,index)"class"liClass":class&qu…

Linux基本指令操作

登陆指令&#xff08;云服务器版&#xff09; 当我们获取公网IP地址后&#xff0c;我们就可以打开xshell。 此时会有这样的界面&#xff0c;我们若是想的登陆&#xff0c;则需要输入以下的指令 ssh 用户名公网IP地址 然后会跳出以下的窗口 接着输入密码——密码便是先前定好…

ArcGIS Engine 与 Visual Studio版本对照表

通过C#对于Arcgis的二次开发&#xff0c;需要Visual Studio版本需要与ArcGIS Engine对应&#xff0c;Visual Studio版本的或高或低都不能使ArcObjects SDK for microsoft.Net framework安装成功。下面是各个版本的对照表。 序号ArcEngine版本visual Studio版本Network版本110.…

React Native实现理想的震动效果

React Native实现理想的震动效果 一、背景说明 业务开发中&#xff0c;总会用到一些和用户反馈的效果&#xff0c;用来提升用户对于某个事件或者操作的重要程度&#xff0c;比如常见的就是 长按复制、滑动或点击图表、点击底部TabBar时的反馈等操作。 二、构思实现及过程 2.…

微信小游戏个人开发者上架:从注册到上线的详细步骤

微信小游戏个人开发者上架&#xff1a;从注册到上线的详细步骤 一&#xff0c;注册小程序账号1.1 微信公众平台1.2 填写信息1.3 绑定管理 二&#xff0c;打包步骤2.1 工具准备2.2 关于Unity版本2.3 打包详解 三&#xff0c;提包步骤3.1 填写用户隐私3.2 完善开发者自查3.3 游戏…

《向量数据库指南》:向量数据库Pinecone使用命名空间

目录 创建命名空间 创建多个命名空间 跨所有命名空间的操作 Pinecone允许您将索引中的向量划分为命名空间。然后,查询和其他操作仅限于一个命名空间,因此不同的请求可以搜索索引的不同子集。 例如,您可能想为按内容索引的文章定义一个命名空间,为按标题索引的文章定义另…

内存条的故障修复方法分享

你知道电脑的内存条遇到故障要怎么修复吗&#xff1f;可能很多小伙伴都是直接说&#xff1a;“找电脑维修师傅就好。”那当只有你自己的时候怎么办呢&#xff1f;今天我就跟你分享几个电脑常见的故障以及修复的方法吧。 1、开机无显示。此类故障通常是由于内存条与主板内存插槽…

kernel-pwn之ret2dir利用技巧

前言 ret2dir是2014年在USENIX发表的一篇论文&#xff0c;该论文提出针对ret2usr提出的SMEP、SMAP等保护的绕过。全称为return-to-direct-mapped memory&#xff0c;返回直接映射的内存。论文地址&#xff1a;https://www.usenix.org/system/files/conference/usenixsecurity1…

如何在电脑上查看连接过的wifi信息?

忘记wifi密码&#xff1f;想要看看wifi信息&#xff1f; 我想这篇文章可以帮到你O(∩_∩)O哈哈~。 通过网络连接中心查看 电脑上找到“网络和共享中心” 点击连接的wifi名称 点击无线属性 在安全选项中就有密码 通过电脑命令行工具查看推荐 通过winr快捷键打开电脑运…