b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

哈夫曼树带权路径长度_c 哈夫曼树编码_数据结构哈夫曼树编码(10)

电脑杂谈  发布时间:2017-03-01 10:05:02  来源:网络整理

2.建立编码表:利用已经建好的哈夫曼树进行编码,并将每个字符的编码输出。

3.编码:根据编码表对输入的字符串进行编码,并将编码后的字符串输出。

4.译码:利用已经建好的哈夫曼树对编码后的字符串进行译码,并输出译码结果。

5.打印:以直观的方式打印哈夫曼树。

6.计算输入的字符串编码前和编码后的长度,并进行分析,讨论哈夫曼编码的压缩效果。

7.用户界面可以设计成“菜单”方式,能进行交互,根据输入的字符串中每个字符出现的次数统计频度,对没有出现的字符一律不用编码。

2. 程序分析

2.1 存储结构

二叉树

template

class BiTree

{

public:

BiTree(); //构造函数,其前序序列由键盘输入

~BiTree(void); //析构函数

BiNode* Getroot(); //获得指向根结点的指针

protected:

BiNode *root; //指向根结点的头指针

};

//声明类BiTree及定义结构BiNode

Data:

二叉树是由一个根结点和两棵互不相交的左右子树构成

哈夫曼树类的数据域,继承节点类型为int的二叉树 class HuffmanTree:public BiTree

data:

HCode* HCodeTable;//编码表

int tSize; //编码表中的总字符数

二叉树的节点结构

template

struct BiNode //二叉树的结点结构 {

T data; //记录数据

T lchild; //左孩子

T rchild; //右孩子

T parent; //双亲

};

编码表的节点结构

struct HCode

{

char data; //编码表中的字符

char code[100]; //该字符对应的编码

};

待编码字符串由键盘输入,输入时用链表存储,链表节点为 struct Node

{

char character; //输入的字符

unsigned int count;//该字符的权值

bool used; //建立树的时候该字符是否使用过

Node* next; //保存下一个节点的地址

};

2.2 关键算法分析

1.初始化函数(void HuffmanTree::Init(string Input))

算法伪代码:

1.初始化链表的头结点

2.获得输入字符串的第一个字符,并将其插入到链表尾部,n=1(n记录的是链表

中字符的个数)

3.从字符串第2个字符开始,逐个取出字符串中的字符

3.1 将当前取出的字符与链表中已经存在的字符逐个比较,如果当前取出

的字符与链表中已经存在的某个字符相同,则链表中该字符的权值加1。

3.2 如果当前取出的字符与链表中已经存在的字符都不相同,则将其加入

到链表尾部,同时n++

4.tSize=n(tSize记录链表中字符总数,即哈夫曼树中叶子节点总数)

5.创建哈夫曼树

6.销毁链表

源代码:

void HuffmanTree::Init(string Input)

{

Node *front=new Node; //初始化链表的头结点

if(!front)

throw exception("堆空间用尽");

front->next=NULL;

front->character=NULL;

front->count=0;

Node *pfront=front;

char ch=Input[0]; //获得第一个字符

Node* New1=new Node;

if(!New1)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-35162-10.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...