2011-2012 学年第一学期 数据结构课内实验报告 哈夫曼树 专业:电子信息工程 姓名: 邓宏才 学号: U 201113233 指导老师: 刘应状 实验题目 1 、 实验目的: a
随机生成数据并统计 b
创建哈夫曼树; c
哈夫曼编码 d
哈夫曼译码; 2 、 实验内容: a
随机生成数据并统计 b
创建哈夫曼树; c
哈夫曼编码 d
哈夫曼译码; 3 、 数据结构及算法思想: 创建哈夫曼树的描述: 数据结构:数据的逻辑结构是树状结构;采用静态的三叉链表存放; 算法思想:1
先把三叉链表中1-N个元素进行初始化,存放叶子节点,他们都没有孩子和双亲
再初始化后 n-1个非叶子节点元素
从当前森林中(在森林中树的根节点的双亲为 0)选择两棵根的权值最小的树;删除合并是将选到的两棵树的根权和存入数组当前最前面的空闲元素中,并置入相应的双亲与孩子的位置
重复上述步骤直到森林中只含有一棵二叉树为止; 哈夫曼树编码的描述: 数据结构:数据的逻辑结构是树状结构;采用静态的三叉链表存放; 算法思想:1
申请存储哈夫曼编码串的头指针数组,申请一个字符型指针,用来存放临时的编码串;2
从叶子节点开始向上倒退,若其为它双亲节点的左孩子则编码标 0 ,否则标 1 ;直到根节点为止,最后把临时存储编码复制到对应的指针数组所指向的内存中;3
重复上述步骤,直到所有的叶子节点都被编码完; 哈夫曼树译码的描述: 数据结构:数据的逻辑结构是树状结构;采用静态的三叉链表存放; 算法思想:1
从根结点开始向下递推,若其编码当前的数值为 0 ,则到该节点的左孩子, 否则转到其右孩子; 重复上述步骤直到该编码中全部访问完,则树中对应的叶子节点则为所求2
依据上述步骤,对编码数组中所有编码全部进行译码; 4 、 模块划分: 1
选择两个权值最小的结点; 2