- ·上一篇:word如何打入数学表达式,表达式,打入,数学
- ·下一篇:word如何打印一页两面,两面,打印
如何利用word画哈夫曼树,利用
1.数据结构中哈夫曼树的应用(C语言)
#include 其实,word最不擅长的就是画图,画一个东西很费事的。 不如你就查找一下现成的剪贴画,或者去网上搜索合适的图片插入进来。既好看又简单。 对补充的补充: 好大的火气!我还是指导一下你: 1. 自选图形——线条——曲线,勾出树干形状。注意:要横着画,以便填充。 2. 右键点击图形,编辑顶点,调整形状。 3. 右键点击图形——设置自选图形格式——填充——颜色,点开颜色下拉框,填充效果,选择木纹一类的图案,确定。 然后再把线条设置为无。树干就做成了。 4. 写字问题:拉个文本框,输入字后右键点击,把填充和线条都设为“无”,叠放次序为“置为顶层”。 以后的树叶也如此办理,实在不懂的就hi我,我不会朝你冒火的。 。 作业吧,运行可用,自己再试试。 //huffman_h.h 哈夫曼树的头文件#include"iostream.h"#include "stdio.h"#include "stdlib.h"#include "string.h" typedef char ElemType; typedef struct{ ElemType elem; unsigned int weight; unsigned int parent,lchild,rchild,tag; }HTNode,*HuffmanTree; typedef char** HuffmanCode; typedef int Status; typedef struct weight { char elem; unsigned int m_weight; }Weight; // 保存符号信息; void Select(HuffmanTree HT,int n,int &s1,int &s2) { int i; s1=s2=0; for(i=1;i<=n;i++){ if(HT[i].weight "); getchar(); for (i=n+1; i<=m; i++) { // 建哈夫曼树 // 在HT[1..i-1]中选择parent为0且weight最小的两个结点, // 其序号分别为s1和s2。 Select(HT, i-1, s1, s2); HT[s1].parent = i; HT[s2].parent = i; HT[i].lchild = s1; HT[i].rchild = s2; HT[i].weight = HT[s1].weight + HT[s2].weight; printf("\nselect: s1=%d s2=%d\n", s1, s2); printf(" 结点 weight parent lchild rchild"); for (j=1; j<=i; j++) printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight, HT[j].parent,HT[j].lchild, HT[j].rchild); printf(" 按任意键,继续 。 "); getchar(); }//for //------无栈非递归遍历哈夫曼树,求哈夫曼编码 HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); cd = (char *)malloc((n+1)*sizeof(char)); // 分配求编码的工作空间 p = m; cdlen = 0; for (i=1; i<=m; ++i) // 遍历哈夫曼树时用作结点状态标志 HT[i].tag = 0; while (p) { if (HT[p].tag==0) { // 向左 HT[p].tag = 1; if (HT[p].lchild != 0) { p = HT[p].lchild; cd[cdlen++] ='0'; } else if (HT[p].rchild == 0) { // 登记叶子结点的字符的编码 HC[p] = (char *)malloc((cdlen+1) * sizeof(char)); cd[cdlen] ='\0'; strcpy(HC[p], cd); // 复制编码(串) } } else if (HT[p].tag==1) { // 向右 HT[p].tag = 2; if (HT[p].rchild != 0) { p = HT[p].rchild; cd[cdlen++] ='1'; } } else { // HT[p].weight==2,退回退到父结点,编码长度减1 HT[p].tag = 0; p = HT[p].parent; --cdlen; }//else }//while } // HuffmanCoding/* //--- 从叶子到根逆向求每个字符的哈夫曼编码 --- cd = (char *)malloc(n*sizeof(char)); // 分配求编码的工作空间 cd[n-1] = '\0'; // 编码结束符。 for (i=1; i<=n; ++i) { // 逐个字符求哈夫曼编码 start = n-1; // 编码结束符位置 for (c=i, f=HT[i].parent; f!=0; c=f, f=HT[f].parent) // 从叶子到根逆向求编码 if (HT[f].lchild==c) cd[--start] = '0'; else cd[--start] = '1'; HC[i] = (char *)malloc((n-start)*sizeof(char)); // 为第i个字符编码分配空间 strcpy(HC[i], &cd[start]); // 从cd复制编码(串)到HC } free(cd); // 释放工作空间*/ void OutputHuffmanCode(HuffmanTree HT,HuffmanCode HC,int n) { int i; printf("\nnumber---element---weight---huffman code\n"); for(i=1;i<=n;i++) printf(" %d %c %d %s\n",i,HT[i].elem,HT[i].weight,HC[i]); } //主函数//huffman.cpp#include"huffman_h.h" void main() { HuffmanTree HT; HuffmanCode HC; Weight *w; char c; // the symbolizes; int i,n; // the number of elements; int wei; // the weight of a element; printf("请输入构建哈夫曼树的结点数:" ); cin>>n; //cout<2.如何用WORD画大树图
3.哈夫曼树的建立
