• 大小: 2.98MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-05
  • 语言: 其他
  • 标签: 霍夫曼  

资源简介

数据结构作业三,对文件进行霍夫曼编码与解码

资源截图

代码片段和文件信息

//二叉树的建立,与霍夫曼压缩算法的实现
//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\link-cvtres.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link-cvtres.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link-rc.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link-rc.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1016-cvtres.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1016-cvtres.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1016-rc.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1016-rc.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1016.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1016.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1172-cvtres.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1172-cvtres.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1172-rc.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1172-rc.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1172.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1172.write.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1848-cvtres.read.1.tlog
     文件           2  2015-04-11 17:59  BiTree-Huffman\BiTree-Huffman\Debug\link.1848-cvtres.write.1.tlog
............此处省略69个文件信息

评论

共有 条评论