问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

急求求C++编写的字符串编辑 和 哈夫曼编码 的数据结构程序

发布网友 发布时间:2022-05-18 22:19

我来回答

1个回答

热心网友 时间:2023-11-12 03:59

吧Huffman的给你吧,字符串的就算了,麻烦
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<string>
using
namespace
std;
const
int
MaxV
=
100;
//最大权值
const
int
MaxBit
=
15;
//最大编码位数
const
int
MaxN
=
20;
//最大结点个数
typedef
struct
{
int
weight;
//权值
int
parent;
//双亲节点下标
int
left
,
right;
//孩子节点下标
int
flag;
//
标记
}HuffNode;
typedef
struct
{
int
bit[MaxN];
int
start;
int
weight;
}Code;
class
HuffmanTree
{
public:
HuffmanTree(HuffNode
*&,
Code
*&,
int
);
//创建huffman树
void
MakeHuffm(int
weight[]
,
int
n);
void
HuffCode(int
n);
private:
HuffNode
*HuffTree;
Code
*HuffCode1;
};
HuffmanTree::HuffmanTree(HuffNode
*&huffnode
,
Code
*&huffcode,
int
n)
{
huffnode
=
new
HuffNode[2
*
n
+
1];
huffcode
=
new
Code[n
+
1];
HuffTree
=
huffnode;
HuffCode1
=
huffcode;
}
void
HuffmanTree::MakeHuffm(int
weight[]
,
int
n)
{
int
x1
,
x2
,
m1
,m2,i
,
j;
for(i
=
0;
i
<
2
*
n
-
1;
i++)
{
if(i
<
n)
{
HuffTree[i].weight
=
weight[i];
}
else
{
HuffTree[i].weight
=
0;
HuffTree[i].flag
=
0;
HuffTree[i].parent
=
0;
HuffTree[i].left
=
-1;
HuffTree[i].right
=
-1;
}
}//for
//构造非叶子节点,共
n-1个
for(i
=
0
;
i
<
n
-
1;
i++)
{
m1
=
m2
=
MaxV;
x1
=
x2
=
0;
for(j
=
0;
j
<
n
+
i;
j++)
{
if(HuffTree[j].weight
<
m1
&&HuffTree[j].flag
==
0)
{
m2
=
m1;
x2
=
x1;
m1
=
HuffTree[j].weight;
x1
=
j;
}
else
if(HuffTree[j].weight
<
m2
&&HuffTree[j].flag
==
0)
{
m2
=
HuffTree[j].weight;
x2
=
j;
}
}//for
cout<<"x1
=
"<<x1<<"
"<<"x2
=
"<<x2<<endl;
HuffTree[x1].parent
=
n
+
i;
HuffTree[x2].parent
=
n
+
i;
HuffTree[x1].flag
=
1;
HuffTree[x2].flag
=
1;
HuffTree[n
+
i].weight
=
HuffTree[x1].weight
+
HuffTree[x2].weight;
HuffTree[n
+
i].left
=
x1;
HuffTree[n
+
i].right
=
x2;
}//for
}
void
HuffmanTree::HuffCode(int
n)
{
Code
*cd
=
new
Code;
int
child
,
parent;
for(int
i
=
0
;
i
<
n;
i
++)
{
cd->start
=
n
-
1;
//从后往前
cd->weight
=
HuffTree[i].weight;
child
=
i;
parent
=
HuffTree[child].parent;
while(parent
!=
0)
{
if(HuffTree[parent].left
==
child)
{
cd->bit[cd->start]
=
0;
}
else
{
cd->bit[cd->start]
=
1;
}
cd->start--;
child
=
parent;
parent
=
HuffTree[child].parent;
}
for(int
j
=
cd->start
+
1;
j
<
n;
j++)
{
HuffCode1[i].bit[j]
=
cd->bit[j];
}
HuffCode1[i].start
=
cd->start;
HuffCode1[i].weight
=
cd->weight;
}//for
}
int
main()
{
cout<<"运行结果为:"<<endl;
int
i
,
j
,
n
=
4;
int
weight[]
=
{1
,3
,5
,7};
HuffNode
*myHuffTree;
Code*
myHuffCode;
HuffmanTree
t(myHuffTree
,
myHuffCode
,
n);
if(n
>
MaxN)
{
cout<<"n越界"<<endl;
exit(1);
}
t.MakeHuffm(weight
,
n);
t.HuffCode(n);
for(i
=
0;
i
<
n;
i++)
{
cout<<"weight
=
"<<myHuffCode[i].weight<<"
Code
=
";
for(j
=
myHuffCode[i].start
+
1;
j
<
n;
j++)
{
cout<<myHuffCode[i].bit[j];
}
cout<<endl;
}
cin.get();
return
0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人字梯有什么安全隐患吗 怎样激发青春期孩子的内驱力 如何激发青春期孩子的内驱力 ...小题1:移船相近邀相见,添酒回灯重开宴。 , &amp;n... L1和L2串联 电压表并联在L1两端 当L1断路后 电压表测的为什么就成了电源... L1和L2串联,用电压表测L1两端的电压,L2不亮时,电流表为什么测的是电源电... 电路上传连两个灯泡L1与L2电压表测L1电压,当L1短路与断路时电压表情况... 对方拖着不办离婚手续该怎么办 计算机一级电子表格怎么拿分 如何配置思源黑体为latex中文字体? 思源黑体字体怎么安装 Gf8100m2G+能配什么u? (1)compiler flags是什么 中电万维信息技术有限责任公司张掖分公司怎么样? GF8100 M2G+的主板如何开启内存双通道 sql语句。查询数据库中的所有表中是否有db_code字段,如果有,则修改down_flag的类型从int改为bigint 映泰GF8100-M2G只用集成显卡可以玩大型网游吗 日照万维信息科技有限公司怎么样? 单片机中断代码 Geforce 8100 bios 刷新 不敢下手,寻求 电脑配置 高手 帮忙点醒。。马上给分。 北京国创万维信息技术有限责任公司怎么样? 帮我看看我的电脑配置怎么样!(电脑高手来) 姓邢的小女孩起啥名好听 word通配符问题。 NVIDIA(英伟达) GeForce GT 540M (GF108M) 后面的 (GF108M)是什么意思?我好像记得以前我后面是(1G) [CRM]2011-01-24 09:39:03,093 INFO SQLErrorCodesFactory:128 - SQLErrorCodes loaded: [DB2, Derby, H2, 万维信息技术公司十五年庆,跪求对联一副! key flags是什么意思 主板是翔升GF8100,CPU是AMD4400+。请问怎样超频 求救,有一个C语言程序设计编程题目,请高手帮忙,万分万分感谢 翔升gf8100 主板 在GF8400M GS的显卡下 T7100与T8300有多大差距 给好友发粘贴怎么能打开下载? 集成的GF8100显卡256M的,2G内存,能玩血战上海滩吗?怎么一进游戏就黑屏,但是声音还正常 请大大解决一条程序题~ 女孩姓邢。起名要 洋气的 为什么我找不到自己哭的原因. 为什么要哭?自己都不知道什么原因要哭! 我不知道为什么哭? 哭了,不知道为什么哭,怎么办? 为什么我会莫名的哭,自己都不知道原因 为什么 半夜哭着醒来,竟然早上起床连自己为什么哭都不知道? 麻辣烫配方怎么做 我不知道为什么,情绪一波动就哭了,我该怎么办? 谁会做麻辣烫需要什么配料请帮忙写下还告诉我 不知道为什么想哭? 我不知道自己为什么哭了 psp按键失灵了 PSP按键坏了自己怎么修? psp按键不灵活怎么修