第九章第14题(赶出来的作业) POWERBY KTL

原创 2006年05月30日 22:03:00

//第九章第14题;
//假设十个符号为ABCDEFGHIJ,权值为8,21,37,24,6,18,23,41,56,14;
//输入权值:8回车;
//输入数据:A(不用回车);
//输入十个权值和数据后,输出为:A 11001 ;B 1011 ;C 101 ;D 100 ;E 01001 ;(E权值最小编码最长)
//F 0011;G 000 ;H 111
//I 10 ;(I权值最大,编码最短)J 0001;
//由于不知道编码是否正确,因此不能保证本程序的正确性,但是从编码输出来看,
//满足了权值最大,编码最长,权值最小,编码最短的条件;
#include "stdio.h"
#include "conio.h"

typedef char datatype;

#define n 10 //叶子数;
#define m 2*n-1 //结点总数;

typedef struct
{
 char bits[n];
 int start;
 datatype data;
}codetype;//编码数组的数据结构;

codetype code[n];

typedef struct
{
 float weight;
 datatype data;
 int lchild,rchild,parent;
}hufmtree;
hufmtree tree[m]; //哈夫曼树数据结构;

void printHuffman(hufmtree tree[])
{
 for(int i=0;i<m;i++)
 {
  printf("%c   %f/n",tree[i].data,tree[i].weight);
 }
} //打印哈夫曼树的函数;

void printHuffmancode(codetype code[])
{
 for(int i=0;i<n;i++)
 {
  printf("%c/n",code[i].data);
  for(int j=n-1;j>=code[i].start;j--)
  {
   printf("%c",code[i].bits[j]);
  }
  printf("/n");
 }
} //打印哈夫曼树编码的函数

void humffman(hufmtree tree[])
{
 printf("开始建立哈夫曼树.../n");
 int i,j;
 int p1,p2;
 char ch;
 float small1,small2,f;
 for(i=0;i<m;i++)
 {
  tree[i].parent=0;
  tree[i].lchild=0;
  tree[i].rchild=0;
  tree[i].weight=0.0;
  tree[i].data='0';
 }
 for(i=0;i<n;i++)
 {
  printf("输入权值:");
  scanf("%f",&f);
  tree[i].weight=f;
  printf("输入数据:");
  ch=getche();
  printf("/n");
  tree[i].data=ch;
 }
 printHuffman(tree);
 printf("创建ing.../n");
 for(i=n;i<m;i++)
 {
  p1=p2=0;
  small1=small2=999999.0;
  for(j=0;j<=i-1;j++)
   if(tree[j].parent==0)
    if(tree[j].weight<small1)
    {
     small2=small1;
     small1=tree[j].weight;
     p2=p1;
     p1=j;
    }
    else if(tree[j].weight<small2)
    {
     small2=tree[j].weight;
     p2=j;
    }
    tree[p1].parent=i;
    tree[p2].parent=i;
    tree[i].lchild=p1;
    tree[i].rchild=p2;
    tree[i].weight=tree[p1].weight+tree[p2].weight;
    }
 printHuffman(tree);
 printf("创建完毕.../n");
} //创建哈夫曼树;

void huffmancode(codetype code[],hufmtree tree[])
{
 printf("编码开始.../n");
 int i,c,p;
 codetype cd;
 for(i=0;i<n;i++)
 {
  cd.start=n;
  c=i;
  p=tree[c].parent;
  cd.data=tree[c].data;
  while(p!=0)
  {
   cd.start--;
   if(tree[p].lchild==c)
    cd.bits[cd.start]='0';
   else
    cd.bits[cd.start]='1';
   c=p;
   p=tree[c].parent;
  }
  code[i]=cd;
 }
 printHuffmancode(code);
 printf("编码完成.../n");
} //创建哈夫曼树编码函数;

int main()
{
 humffman(tree);
 huffmancode(code,tree);
 return 0;
} //main函数主要调用了两个主要的哈夫曼树创建与编码函数,其中tree和code是全局变量的数组;

深入理解计算机系统(第二版) 家庭作业 第九章

9.11 A.虚拟地址0x027c 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 0 0 ...
  • zhanyu1990
  • zhanyu1990
  • 2014年01月19日 13:26
  • 2618

ACCP S1 C#第十四章 第十五章 上机练习

上机1,2using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys...
  • baidu_36074048
  • baidu_36074048
  • 2016年11月29日 16:54
  • 1194

JAVA语言程序设计(基础篇)第九章答案

习题9.1 public class SimpleRectangle { double width; double height; SimpleRectangle(){ width = 1;...
  • zhenkeshawn
  • zhenkeshawn
  • 2017年03月06日 23:48
  • 1971

韩顺平_php从入门到精通_视频教程_第14讲_盒子模型经典应用②_作业布置_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/ 盒子模型——理解 我们可以把盒子模型转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也具有这些属性...
  • wenximalong
  • wenximalong
  • 2012年11月14日 21:15
  • 2916

汇编语言 第九章 作业

  • 2012年03月15日 17:47
  • 288KB
  • 下载

第14 题:题目:输入一个已经按升序排序过的数组和一个数字

第14 题:题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入...
  • qjt_uestc
  • qjt_uestc
  • 2011年07月26日 10:24
  • 816

个人作业 C primer plus 第4章 -第九章 9.9 答案

4.2 #include #include int main (void) { char name[20]; int weidth; printf("please en...
  • qq_36324796
  • qq_36324796
  • 2018年01月07日 11:16
  • 19

java第九次作业:第九章例题3个

作业1: 例题9.1 制作圆类,根据圆的半径求出周长及面积 package com.swift; //抽象的方法构成类,把属性和方法进行封装 public class Circle { //...
  • swift2010
  • swift2010
  • 2018年01月01日 00:40
  • 17

机试算法讲解: 第14题 实现一个简单计算器

/* 问题:简单的计算器,读入只含 +,-,*,/的非负整数计算式,计算表达式的值 输入: 若干测试用例,每个测试用例占1行,每行...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2015年07月31日 00:04
  • 427

leetcode 第14题 最长前缀

14 最长前缀 我的 思路 是 先从前面两个串中找到一个待修正的共同前缀,然后再剩余的串中来调整该前缀,这样的时间复杂度为o(n)class Solution { public: strin...
  • cylj102908
  • cylj102908
  • 2016年08月09日 21:50
  • 175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第九章第14题(赶出来的作业) POWERBY KTL
举报原因:
原因补充:

(最多只允许输入30个字)