数据结构课设-赫夫曼树(3)

2019-03-09 15:32

课程设计说明书 No 11

printf(\ else printf(\ i = parent; } printf(\ } return 0; } (4)查找权值最小的两个结点的函数 选择二叉树的根结点,使达最小构造次优二叉树的算法,首先标价所有结点,依次编号,判断结点的权值的大小,将所判断的结点赋值给一个变量,然运用比较算法,选择权值较小的一个结点,赋值给的变量不变,另一个变量释放其所赋的值。应用循环语句进行新的赋值,继续比较,直到所有结点比较完毕。s1 、s2所有值就是全职最小的两个结点。依此算法比较完全部的结点由此构成一颗赫夫曼树。算法如下: void Select(HuffmanTree HT, int n, int &s1, int &s2) { unsigned int weight; int i; s1=0; s2=0; weight=100; for(i=1;i<=n;i++) { if(HT[i].parent==0) { if(HT[i].weight>weight) continue; else { weight=HT[i].weight; s1=i; } } } HT[s1].parent=s1;//暂时改写 HT[s1].parent的值 沈 阳 大 学 课程设计说明书 No 12

weight=100; for(i=1;i<=n;i++) { if(HT[i].parent==0) { if(HT[i].weight>weight) continue; else { weight=HT[i].weight; s2=i; } } } } 2.5设计程序 #include #include #define MAXINT 2147483647 #define MAXNUM 50 #define MAXNODE 100 struct HtNode { int ww; int parent,llink,rlink; }; struct HtTree { int root; struct HtNode ht[MAXNODE]; }; typedef struct HtTree *PHtTree; PHtTree huffman(int m, int *w) { PHtTree pht; int i, j, x1, x2, m1, m2; pht = (PHtTree)malloc(sizeof(struct HtTree)); if (pht == NULL) { printf(\ of space!! \\n\ return pht; } for (i = 0; i < 2*m-1; i++) { pht->ht[i].llink = -1; 沈 阳 大 学 课程设计说明书 No 13

pht->ht[i].rlink = -1; pht->ht[i].parent = -1; if (i < m) pht->ht[i].ww = w[i]; else pht->ht[i].ww = -1; } for ( i = 0; i < m-1; i++) { m1 =MAXINT; m2 =MAXINT; x1 =-1; x2 =-1; for (j = 0; j< m+i; j++) if(pht->ht[j].ww < m1 && pht->ht[j].parent == -1) { m2 = m1; x2 = x1; m1 = pht->ht[j].ww; x1 = j; } else if (pht->ht[j].ww < m2 && pht->ht[j].parent == -1) { m2 = pht->ht[j].ww; x2 = j; } pht->ht[x1].parent = m+i; pht->ht[x2].parent = m+i; pht->ht[m+i].ww = m1+m2; pht->ht[m+i].llink = x1; pht->ht[m+i].rlink = x2; pht->root = m+i; } return pht; } int main() { int m = 0, j = 0, i = 0, parent = 0; int* w; PHtTree pht; printf(\ \ scanf(\ if (m < 1) { printf(\ is not reasonable!\\n\ return 1; } w = (int *)malloc(sizeof(int)*m); if (w == NULL) { 沈 阳 大 学 课程设计说明书 No 14

printf(\ return 1; } printf(\ input the %d numbers:\\n\ for (j = 0; j < m; j++) scanf(\ w+j); pht = huffman(m, w); for (j = 0; j < m; j++) { printf(\ Reverse code of the %d node is:\ j+1); i = j; while (pht->ht[i].parent != -1) { parent = pht->ht[i].parent; if (pht->ht[parent].llink == i) printf(\ else printf(\ i = parent; } printf(\ } return 0; } 3 课程设计运行结果与分析 程序运行结果,初始操作界面如图4所示。 图4 初始操作界面 沈 阳 大 学 课程设计说明书 No 15 输入字符6,显示操作界面如图5所示。 图5 输入操作界面 对应输入其权值并输出其结果,操作界面如图6所示。 图6 输入权值操作界面 沈 阳 大 学


数据结构课设-赫夫曼树(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:公司软件的研发部门架构和岗位职责(哦)(1).

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: