[描写人物语言的词语]善言 八字打开 超超玄著 单刀直入 对答如流 讽一劝百 高谈阔论 高谈雄辩 喙长三尺 开门见山 开宗明义 口若悬河 伶牙俐齿 能言巧辩 能说会道 片言折狱 谈言微中 脱口而出 微...+阅读
一、问题描述: 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编/译码系统。
二、基本要求:
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:输出哈夫曼树(TreePrinting),将已在内存中的哈夫曼树以直观的方式(树或凹人表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
三、测试数据:] 用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“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 1 5 32 20 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、哈夫曼编码采用一个字符串数组存储。
2、用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用户键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“Q”为止。
3、在程序的一次执行过程中,第一次执行I、D或C命令之后,哈夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。 #include#include#include#includeint 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;ic); while(getchar()!='\n') continue; puts("请输入该字符的权值:"); scanf("%d",&p->w); while(getchar()!='\n') continue; p->plink=NULL; p->rlink=NULL; p->llink=NULL; num[i]=p; } for(i=0;inum[j]->w) { tmp=num[i]; num[i]=num[j]; num[j]=tmp; } } } /*******************************开始建立树***********************/ num[n]=NULL; //结束标志 k=n; while(num[1]!=NULL) { p=(struct node *)malloc(sizeof(struct node)); p1=num[0]; p2=num[1]; p->llink=p1; p->rlink=p2; p->plink=NULL; p1->plink=p; p2->plink=p; p->w=p1->w+p2->w; for(i=1;iw) { tmp=num[i]; num[i]=num[j]; num[j]=tmp; } } } } root=num[0]; /*建立完毕*/ /*写入文件,前序*/ if((fp=fopen("c:\\hfmtree.wxl","wb"))==NULL) { puts("文件打开错误!"); getchar(); exit(0); } setcode(root); go(root); fclose(fp); } void setcode(struct node *p) { if(p->llink==NULL&p->rlink==NULL) { tmpcode[t]='\0'; strcpy(p->code,tmpcode); } else { tmpcode[t++]='0'; setcode(p->llink); t--; tmpcode[t++]='1'; setcode(p->rlink); t--; } } void go(struct node *p) { if(p->llink==NULL&p->rlink==NULL) { fputc('(',fp); fputc(p->c,fp); fputs(p->code,fp); fputc(')',fp); } else { go(p->llink); go(p->rlink); } } void code(void) { FILE *fp1,*fp2,*fp3; char ch1,ch2,c; if((fp1=fopen("c:\\hfmtree.wxl","rb"))==NULL) { puts("文件打开错误!"); getchar(); exit(0); } if((fp2=fopen("c:\\tobetrans.txt","wb"))==NULL) { puts...
延伸阅读:
哪有描写人物语言的词语!口若悬河 对答如流 滔滔不绝 谈笑风生 高谈阔论 豪言壮语 夸夸其谈 花言巧语 忐忑不安 心惊肉跳 心神不定 心猿意马 心慌意乱 七上八下 心急如焚 发奋图强 废寝忘食 闻鸡起...
描写人的语言的词语○ 更仆难数:原意是儒行很多,一下子说不完,一件一件说就需要很长时间,即使中间换了人也未必能说完。后形容人或事物很多,数也数不过来。 ○ 口燥唇干:燥:干。口腔和嘴唇都干了。形...
数据结构课程设计是什么一个软件系统框架应建立在数据之上,而不是建立在操作之上。一个含抽象数据类型的软件模块应包含定义、表示、实现三个部分。对每一个数据结构而言,必定存在与它密切相关的一组...
数据结构课程设计文本编辑器#include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0#define OVERFLOW -1//#define EOF -1#define STACK_INIT_SIZE 10#define STACKINCREMENT 1000#define MAXQ...
数据结构课程设计:用链表建立一个学生信息系统要求:1学生信息包#include typedef strct Lnode { int xh;//学号; float xm;//姓名 int ln;//年龄 float xb;//学号 Lnode *next;//下一个结点的指针 }Bnoad; Bnoad *Shuru() { Bnoad *L,*S,*P;//S...
数据结构课程设计二叉排序树的实现用顺序和二叉链表作存储结构/*以下是用c++ 实现的二叉排序树的源代码*/ #includetypedef struct TreeNode { int key; struct TreeNode *left; struct TreeNode *right; }treeNode; class BiSortTree {...
数据结构课程设计数据结构报数出列游戏源代码这是我们数据结构的很简单的单链表处理, 我建议你自己好好做做 将来工作链表是重要数据结构之一,使用的地方非常多 一定要自己做做 既然如此,给你代码: 另外codeblock不好用,建议你使用netbeans,代码...
图的遍历的实现数据结构课程设计Queue.h-----------------------------------------#include#includeconst int maxSize=50;class Queue{ public:Queue(){}; ~Queue() {}; virtual bool EnQueue(const int&...
猴子吃桃子问题数据结构课程设计//数组解法#includevoid main(){ int i,tao[10]; tao[9]=1;//tao[9]代表第10天剩的桃子数 for(i=8;i>=0;i--){ tao[i]=2*(tao[i+1]+1); } printf("共摘了%d个桃子!\n",tao[0]);}//...