资源简介
数据结构作业三,对文件进行霍夫曼编码与解码
代码片段和文件信息
//二叉树的建立,与霍夫曼压缩算法的实现
//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-Huffman\BiTree-Huffman\
文件 7864320 2015-04-11 18:31 BiTree-Huffman\BiTree-Huffman.sdf
文件 909 2015-04-07 18:23 BiTree-Huffman\BiTree-Huffman.sln
文件 19968 2015-04-11 18:31 BiTree-Huffman\BiTree-Huffman.v11.suo
文件 4012 2015-04-07 18:38 BiTree-Huffman\BiTree-Huffman\BiTree-Huffman.vcxproj
文件 941 2015-04-07 18:38 BiTree-Huffman\BiTree-Huffman\BiTree-Huffman.vcxproj.filters
目录 0 2015-04-11 19:17 BiTree-Huffman\BiTree-Huffman\Debug\
文件 61 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\BiTree-Huffman.lastbuildstate
文件 1455 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\BiTree-Huffman.log
文件 590 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\cl.command.1.tlog
文件 12462 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\CL.read.1.tlog
文件 312 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\CL.write.1.tlog
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
文件 2 2015-04-11 17:59 BiTree-Huffman\BiTree-Huffman\Debug\li
............此处省略69个文件信息
- 上一篇:B-树的一些基本操作
- 下一篇:某银行金融大厦网络拓扑图v2.2
评论
共有 条评论