霍夫曼编码与解码
数据结构作业三,对文件进行霍夫曼编码与解码
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-04-20 18:01 BiTree-Huffman
目录 0 2015-04-11 19:17 BiTree-HuffmanBiTree-Huffman
文件 7864320 2015-04-11 18:31 BiTree-HuffmanBiTree-Huffman.sdf
文件 909 2015-04-07 18:23 BiTree-HuffmanBiTree-Huffman.sln
文件 19968 2015-04-11 18:31 BiTree-HuffmanBiTree-Huffman.v11.suo
文件 4012 2015-04-07 18:38 BiTree-HuffmanBiTree-HuffmanBiTree-Huffman.vcxproj
文件 941 2015-04-07 18:38 BiTree-HuffmanBiTree-HuffmanBiTree-Huffman.vcxproj.filters
目录 0 2015-04-11 19:17 BiTree-HuffmanBiTree-HuffmanDebug
文件 61 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugBiTree-Huffman.lastbuildstate
文件 1455 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugBiTree-Huffman.log
文件 590 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugcl.command.1.tlog
文件 12462 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugCL.read.1.tlog
文件 312 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugCL.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink-cvtres.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink-cvtres.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink-rc.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink-rc.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1016-cvtres.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1016-cvtres.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1016-rc.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1016-rc.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1016.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1016.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1172-cvtres.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1172-cvtres.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1172-rc.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1172-rc.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1172.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1172.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1848-cvtres.read.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebuglink.1848-cvtres.write.1.tlog
............此处省略69个文件信息
//二叉树的建立,与霍夫曼压缩算法的实现
//BY-俞宏远,2015.4.10
#include
#include
#include
using namespace std;
const int MAX=128;
ifstream input(“inputfile1.txt“);
ofstream output(“outputfile1.txt“);
struct BiHuff//markflag 构成双重标记位
{
char data;
char code[100];
int weight;
bool flag;//1表示为叶,0不是
int lchildrchildparent;
bool mark;//标记是否是在建立霍夫曼树时需要遍历的项
};
struct BiNode//二叉树节点结构
{
char data;
BiNode *lchild;
BiNode *rchild;
};
class BiTree
{
public :
BiTree( ); //构造函数,初始化一棵二叉树,其前序序列由键盘输入
~BiTree( void); //析构函数,释放二叉链表中各结点的存储空间
BiNode* Getroot(); //获得指向根结点的指针
void PreOrder(BiNode *root); //前序遍历二叉树
void InOrder(BiNode *root); //中序遍历二叉树
void PostOrder(BiNode *root); //后序遍历二叉树
void CalcuTree( BiNode *root); //计算二叉树中叶节点个数,树的高度,度为2节点个数
// bool IsFullTree( BiNode *root); //判断二叉树是否为满树
private :
BiNode *root; //指向根结点的头指针
BiNode *Creat( ); //有参构造函数调用
void Release(BiNode *T); //析构函数调用
};
int MinWeight(BiHuff* int );//找到最小项
int CountTree(BiHuff* );//数被mark标记的树还剩多少
int FindLeaf(BiHuff* );//找叶子
void CreateHTree( BiHuff * int );//创建哈夫曼树
void Encoding ( BiHuff *);//编码
void TransHuffman(BiHuff *);//将文档转换为霍夫曼码
void Decoding (BiHuff *);//解码
void TranBinary();//把文档转换为2进制形式储存,采用按位与运算
void NormalBiTree(); //功能模块1建立普通二叉树并遍历得到有关信息
void HuffmanTree();//功能模块22.建立霍夫曼二叉树并对文件进行编码.
void main(){
TranBinary();
int choose=0;
while (choose!=3)
{
cout<<“功能选择: “< cout<<“ 1.建立普通二叉树并遍历得到有关信息. “< cout<<“ 2.建立霍夫曼二叉树并对文件进行编码. “< cout<<“ 3.退出! “< cin>>choose;
if(choose==1){
NormalBiTree();
}
else if(choose==2){
HuffmanTree();
}
else if(choose==3);
else{
cout<<“输入有误!“< break;
}
}
input.close();
output.close();
}
void TranBinary()//把文档转换为2进制形式储存,采用按位与运算
{
ifstream fileIn(“inputfile1.txt“);
ofstream fileOut(“inputfile3.txt“);
char inputs;
while (fileIn.get(inputs)) {
for (int i = 7; i >= 0; --i)
fileOut <<((inputs>>(i))&1);
// fileOut<<“ “;
}
fileIn.close();
fileOut.close();
}
BiTree::BiTree(){
this->root=Creat(); //保存根节点
}
BiNode* BiTree::Creat( )
{
BiNode* T=NULL;
char ch;
cin>>ch;
if (ch==‘*‘) root = NULL; //空格表示该节点下一个指针为空
else
{
T = new BiNode; //生成一个结点
T->data=ch;
T->lchild = Creat( ); //递归建立左子树
T->rchild = Creat( ); //递归建立右子树
}
return T;
}
BiTree::~BiTree(void)
{
Release(root);
}
void BiTree::Release(BiNode* root)//递归释放树空间
{
if (root != NULL){
Release(root->lchild); //释放左子树
Release(root->rchild); //释放右子树
delete root;
}
}
BiNode* BiTree::Getroot( )
{
return root;
}
void BiTree::PreOrder(BiNode *root)
{
if(root==NULL) return;
else{
cout<data<<“ “;
PreOrder(root->lchild);
PreOrder(root->rchild);
}
}
void BiTree::InOrder (BiNode *root)
{
if (root==NULL) retu
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-04-20 18:01 BiTree-Huffman
目录 0 2015-04-11 19:17 BiTree-HuffmanBiTree-Huffman
文件 7864320 2015-04-11 18:31 BiTree-HuffmanBiTree-Huffman.sdf
文件 909 2015-04-07 18:23 BiTree-HuffmanBiTree-Huffman.sln
文件 19968 2015-04-11 18:31 BiTree-HuffmanBiTree-Huffman.v11.suo
文件 4012 2015-04-07 18:38 BiTree-HuffmanBiTree-HuffmanBiTree-Huffman.vcxproj
文件 941 2015-04-07 18:38 BiTree-HuffmanBiTree-HuffmanBiTree-Huffman.vcxproj.filters
目录 0 2015-04-11 19:17 BiTree-HuffmanBiTree-HuffmanDebug
文件 61 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugBiTree-Huffman.lastbuildstate
文件 1455 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugBiTree-Huffman.log
文件 590 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugcl.command.1.tlog
文件 12462 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugCL.read.1.tlog
文件 312 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugCL.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
文件 2 2015-04-11 17:59 BiTree-HuffmanBiTree-HuffmanDebugli
............此处省略69个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)