这些天明白了一个道理,搞技术也是需要激情的。
也不知道为什么这段过的感觉特别的不爽,也不知道是因为快要考试了,心里没底,而带来的恐惧,还是
搞技术太久,心里想放个假,总之是过的晕晕乎乎,做事情也总是反应迟钝,思维也不快,我爸妈说我是因为睡
不够,但是我觉得我一晚上睡6个半小时,也不算短了。真不知道这样的感觉还要持续多久。
习惯了,下课就做到电脑前,习惯了,晚上一个人回宿舍,习惯了,饿了随便吃点,习惯了,一个人钻研。
当一切开始成为了定式,总觉得生活变的简单。有一些人羡慕我,觉得我有很好的环境学技术。
但是我现在也不觉得我有什么好自满的东西。不过是个再普通不过的走在技术道路上的菜鸟。
心里有千万般的无奈,心里有数不清的彷徨。
我渴望曾经的激情。
其实我也不想说那么多,耽误看帖人的时间,但是心里总有些不吐不快。
师兄总是开玩笑的说我现在开始“淡定了”。
朋友们也觉得我越来越“沉默了”。
现在也不敢想以后会成什么样子,一切都未知。
我不想到了以后“生无可恋,死无可依”(这是一个老程序员的感悟)。
但是我不能停止,停止就是倒退。
好啦,不罗嗦了,下面是我的程序:
<!---->#include<iostream>
#define MAXVALUE 100000
using namespace std;
const int n=4;//叶子节点个数
//构造哈夫曼树结点
typedef struct{
int weight;//权值
int parent;//父节点
int lchild;//左子树
int rchild;//右子树
}HNodeType;
HNodeType HFMTree[2*n-1];//结点数
//构造哈夫曼编码数组
typedef struct{
int bit[n];
int start;
}HCodeType;
HCodeType HFMCode[n];
//创建哈夫曼树
void createHFMTree(HNodeType HFMTree[],int n){
int m1,x1,m2,x2;
int i,j;
//初始化
for(i=0;i<2*n-1;i++){
HFMTree[i].weight=0;
HFMTree[i].parent=-1;
HFMTree[i].lchild=-1;
HFMTree[i].rchild=-1;
}
cout<<"请输入结点权值:"<<endl;
for(i=0;i<n;i++){
cin>>HFMTree[i].weight;
}
for(i=0;i<n-1;i++){
x1=x2=MAXVALUE;
m1=m2=0;
for(j=0;j<n+i;j++){
if(HFMTree[j].parent==-1&&HFMTree[j].weight<x1){
x2=x1;
m2=m1;
x1=HFMTree[j].weight;
m1=j;
}
else if(HFMTree[j].parent==-1&&HFMTree[j].weight<x2){
x2=HFMTree[j].weight;
m2=j;
}
}
HFMTree[m1].parent=n+i;HFMTree[m2].parent=n+i;
HFMTree[n+i].weight=HFMTree[m1].weight+HFMTree[m2].weight;
HFMTree[n+i].lchild=m1;
HFMTree[n+i].rchild=m2;
}
}
//转化编码
void createHFMCode(HNodeType HFMTree[],HCodeType HFMCode[]){
HCodeType cd;
int i,j,c,p;
for(i=0;i<n;i++){
cd.start=n-1;
c=i;
p=HFMTree[c].parent;
while(p!=-1)
{
if(HFMTree[p].lchild==c)cd.bit[cd.start]=0;
else cd.bit[cd.start]=1;
cd.start--;
c=p;
p=HFMTree[c].parent;
}
for(j=cd.start+1;j<n;j++)
HFMCode[i].bit[j]=cd.bit[j];
HFMCode[i].start=cd.start+1;
}
}
//主函数
int main()
{
int i,j;
//创建树
createHFMTree(HFMTree,n);
//转码
createHFMCode(HFMTree,HFMCode);
cout<<endl;
for(i=0;i<n;i++)
{
for(j=HFMCode[i].start;j<=n-1;j++)
{
cout<<HFMCode[i].bit[j];
}
cout<<endl;
}
return 0;
}
这个是雏形,下面我们要实现的功能是,输入一个含有N位A,B,C,D四种字母的字符串。
然后转换成只含有0,1的代码串。之所以要使用哈夫曼树是因为哈夫曼树是最优树。根据权值来实现最短编码。
下面是实现自动转码的程序:
<!---->#include<iostream>
#define MAXVALUE 100000
using namespace std;
const int n=4;//叶子节点个数
string l;
int size;
//构造哈夫曼树结点
typedef struct{
int weight;//权值
int parent;//父节点
int lchild;//左子树
int rchild;//右子树
}HNodeType;
HNodeType HFMTree[2*n-1];//结点数
//构造哈夫曼编码数组
typedef struct{
int bit[n];
int start;
}HCodeType;
HCodeType HFMCode[n];
//创建哈夫曼树
void createHFMTree(HNodeType HFMTree[],int n){
int m1,x1,m2,x2;
int i,j;
//初始化
for(i=0;i<2*n-1;i++){
HFMTree[i].weight=0;
HFMTree[i].parent=-1;
HFMTree[i].lchild=-1;
HFMTree[i].rchild=-1;
}
cout<<"*******************哈夫曼树字符串最优转码程序***********************"<<endl;
cout<<"请输入一个字符串:(只含有A,B,C,D四种字符,输入回车结束)"<<endl;
cin>>l;
std::string str(l);
size=str.size();
for(int i=0;i<size;++i){
if(str.at(i)=='A')HFMTree[0].weight++;
else if(str.at(i)=='B')HFMTree[1].weight++;
else if(str.at(i)=='C')HFMTree[2].weight++;
else if(str.at(i)=='D')HFMTree[3].weight++;
else{
cout<<"输入有误!"<<endl;
break;
}
}
for(i=0;i<n-1;i++){
x1=x2=MAXVALUE;
m1=m2=0;
for(j=0;j<n+i;j++){
if(HFMTree[j].parent==-1&&HFMTree[j].weight<x1){
x2=x1;
m2=m1;
x1=HFMTree[j].weight;
m1=j;
}
else if(HFMTree[j].parent==-1&&HFMTree[j].weight<x2){
x2=HFMTree[j].weight;
m2=j;
}
}
HFMTree[m1].parent=n+i;HFMTree[m2].parent=n+i;
HFMTree[n+i].weight=HFMTree[m1].weight+HFMTree[m2].weight;
HFMTree[n+i].lchild=m1;
HFMTree[n+i].rchild=m2;
}
}
//转化编码
void createHFMCode(HNodeType HFMTree[],HCodeType HFMCode[]){
HCodeType cd;
int i,j,c,p;
for(i=0;i<n;i++){
cd.start=n-1;
c=i;
p=HFMTree[c].parent;
while(p!=-1)
{
if(HFMTree[p].lchild==c)cd.bit[cd.start]=0;
else cd.bit[cd.start]=1;
cd.start--;
c=p;
p=HFMTree[c].parent;
}
for(j=cd.start+1;j<n;j++)
HFMCode[i].bit[j]=cd.bit[j];
HFMCode[i].start=cd.start+1;
}
}
//主函数
int main()
{
int i,j;
//创建树
createHFMTree(HFMTree,n);
//转码
createHFMCode(HFMTree,HFMCode);
cout<<endl;
int k=65;
for(i=0;i<n;i++)
{
cout<<(char)k<<"的编码:";
for(j=HFMCode[i].start;j<=n-1;j++)
{
cout<<HFMCode[i].bit[j];
}
k++;
cout<<endl;
}
cout<<"转码后的字符串为:"<<endl;
std::string str(l);
size=str.size();
for(int i=0;i<size;++i){
if(str.at(i)=='A'){
for(j=HFMCode[0].start;j<=n-1;j++)
cout<<HFMCode[0].bit[j];
}
else if(str.at(i)=='B'){
for(j=HFMCode[1].start;j<=n-1;j++)
cout<<HFMCode[1].bit[j];
}
else if(str.at(i)=='C'){
for(j=HFMCode[2].start;j<=n-1;j++)
cout<<HFMCode[2].bit[j];
}
else if(str.at(i)=='D'){
for(j=HFMCode[3].start;j<=n-1;j++)
cout<<HFMCode[3].bit[j];
}
else{
cout<<"输入有误!"<<endl;
break;
}
}
return 0;
}
程序本机测试通过,可以放心运行!
转载注明:www.cnblogs.com/shiyangxt
分享到:
相关推荐
这是我做的一个基于哈夫曼树思想的压缩算法程序源码,希望大家指正
哈夫曼树 源码 实验报告 算法导论 哈夫曼树 源码 实验报告 算法导论
利用已建好的哈夫曼树(如不在内存,则从文件 hfmtree 中读入),对文件 tobetrans 中的正文进行编码,然后将结果存入文件 codefile 中。 (3)D:解码(Decoding)。利用已建好的哈夫曼树将文件 codefile 中的代码进行...
算法与数据结构课程设计源码与文档,题目为客房管理系统和哈夫曼树的编译系统
哈夫曼树的实现,哈夫曼编码解码,c++源码,数据结构与算法
全集内容结构如下: ├─图 │ ├─关键路径(有向无环图及其应用2) │ │ 1.txt │ │ ALGraph.cpp │ │ ALGraph.h │ │ CriticalPath.cpp │ │ CriticalPath.h │ │ InfoType.cpp │ │ InfoType.h │ │ ...
基于哈夫曼树的数据压缩算法描述输入一串字符串,根据给定的字符串中字符出现的频率建立相应哈夫曼树,构造哈夫曼编码表,在此基础上可以对待压缩文件进行压缩(即编码),同时可以对压缩后的二进制编码文件进行解压...
提供了有关使用算法和数据结构的一个详尽的介绍。Bucknall先从算法性能的讨论开始,涵盖了诸如数组、链表和二叉树等内容。这本书强调了查找算法(如顺序和二分查找),另外也重点介绍了排序算法(包括冒泡排序、插入...
数据结构课设基于C++的哈夫曼数据结构实现的编码译码程序源码+代码注释+实验报告.zip 该项目是个人课设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源...
1、该资源内项目代码都经过测试运行成功,功能ok的...适用工作项目、毕业设计,课程设计,项目源码均经过助教老师测试,运行无误,轻松复刻,欢迎下载 -------- 下载后请首先打开README.md文件(如有),仅供学习参考。
数据结构讲义(严蔚敏版)(含算法源码) 第0章 复习提示 1 一、 教材内容 1 二、 复习提示 1 1. 经典算法 1 2. 绪论 1 3. 线性表 1 4. 栈和队列 2 5. 串 2 6. 树和二叉树 2 7. 图 2 8. 查找表 3 9. 内部排序 3 第1章 ...
提供了有关使用算法和数据结构的一个详尽的介绍。Bucknall先从算法性能的讨论开始,涵盖了诸如数组、链表和二叉树等内容。这本书强调了查找算法(如顺序和二分查找),另外也重点介绍了排序算法(包括冒泡排序、插入...
第六章 - 二叉树链式存储、二叉树顺序存储、哈夫曼树与哈夫曼编码、树孩子表示法、树孩子兄弟表示法、树双亲表示法 第七章 - 图数组表示法、图邻接表表示、图的应用 第九章 - 哈希表、折半查找、B-树、二叉平衡树 ...
2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为...
实验采用C语言编写,包括线性表,循环链表,哈夫曼树,渡船模拟,循环队列,共享栈,逆波兰表达式。共涵盖4个实验,计科专业只需完成四个实验并检查,代码仅供大家参考和学习
数据结构》实验题目 实验一 学生成绩管理(链表) 实验目的:熟练掌握单链表操作的基本算法实现。 实现功能:以带表头结点的单链表为存储结构,实现如下学生成绩管理的设计要求。 实验机时:6 设计要求...
2. 利用上述哈夫曼树产生的哈夫曼编码对图片文件进行压缩。 3. 压缩后的文件与原图片文件同名,加上后缀.huf(保留原后缀),如pic.bmp 压缩后pic.bmp.huf ## 3.分析与设计 使用Huffman算法实现图片压缩程序,可...
共7个题目:单位员工通讯录管理系统、停车场管理、哈夫曼编码/译码系统、校园导游咨询、药店的药品销售统计系统、一元稀疏多项式的计算、二叉排序树的基本操作。内容有问题描述、需求分析、算法设计、调试分析、实验...
2012-06-11 15:23 270,989 n元多项式相乘+数据结构课程设计.rar 2012-06-11 15:41 7,171,049 opengl做的CS三维场景源代码+VC++.rar 2012-06-11 15:40 682,594 opengl射击游戏源代码.RAR 2012-06-11 15:43 5,624,459 ...