毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

赫夫曼编译码器-数据结构课程设计

更新时间:2007-10-20:  来源:毕业论文
赫夫曼编译码器-数据结构课程设计|数据结构课程设计[问题描述]
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。
[基本要求]
一个完整的系统应具有以下功能:
(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
(2)E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
(3)D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
(4)P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。
(5)T:印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
[测试数据]
(1)利用下面这道题中的数据调试程序。
某系统在通信联络中只可能出现八种字符,其概率分别为0.25,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计哈夫曼编码。
(2)用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”。
字符 空格  A   B   C   D   E   F   G   H   I   J   K   L   M
频度 186   64  13  22  32 103  21  15  47  57  1   5   32  20
字符  N    O   P   Q   R   S   T   U   V   W   X   Y   Z
频度  57   63  15  1   48  51  80  23  8   18  1   16  1

[实现提示]
(1) 编码结果以文本方式存储在文件CodeFile中。
(2) 用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
(3) 在程序的一次执行过程中,第一次执行I,D或C命令之后,哈夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。

下面是对这个问题写的一个程序,但是其中有很多难以理解的地方,请大家多多指教啊.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
    int n;
   struct node{
       int w;
      int flag;
      char c;
      struct node *plink,*llink,*rlink;
      char code[50];

      }*num[100],*root;
   FILE *fp;
   char tmpcode[50];
   int t=0;

void main(void)
{
    int i;
   void settree(void);   //建立树
   void code(void);     //对文件编码
   void decode(void);   // 译码
   void disp(void)  ;
     root=(struct node*)malloc(sizeof(struct node));
   puts("*******************哈夫曼编/译码器演示******************************");

   while(1){
start:

   puts("1. 初始化      2. 编码       3. 译码      4.显示编码表    5. 退出");
   while(scanf("%d",&i)!=1)
   {
      while(getchar()!='\n')
      continue;
       puts("输入错误!");
      puts("请重新输入!");
      puts("1. 初始化      2. 编码       3. 译码    4.显示编码表   5. 退出");
    }
   switch (i)
   {
       case 1:
          settree();
         break;
       case 2:
          code();
         break;
      case 3:
          decode();
          break;
      case 4:
           disp();
          break;
      case 5:
           exit(0);
      default:
          puts("输入错误!");
         puts("请重新输入!");
         goto start;
   }
    }
}
void settree(void)
{
     int i,j,k;
     struct node *p1,*p2,*tmp,*p;
     void go(struct node *);
     void setcode(struct node *);//建立每一个字符的编码
     void printtree(struct node *);
     puts("输入字符集的大小:");
     scanf("%d",&n);
     while(getchar()!='\n')
     continue;

     for(i=0;i<n;i++)
     {
         p=(struct node *)malloc(sizeof(struct node));
         puts("请输入一个字符");

[1] [2] [3] [4] 下一页

赫夫曼编译码器-数据结构课程设计下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©lwfree.cn 六维论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。