数据结构(C语言版)实验报告(哈夫曼树) 联系客服

发布时间 : 星期四 文章数据结构(C语言版)实验报告(哈夫曼树)更新完毕开始阅读efbf6f70c77da26924c5b042

void decode(){ //选择译码方式 int sel=0; for(;;){

if(!HT) {cout<<\对不起,哈夫曼树不存在!请先建立哈夫曼树。\ cout<<\ cout<<\ \要译码的文件来源\\t\\t\\t\\t\\t*\

cout<<\使用已有文件CodeFile.txt进行译码\\t\\t*\ cout<<\自行输入文件进行译码\\t\\t\\t\\t*\ cout<<\返回上层\\t\\t\\t\\t\\t*\

cout<<\ cout<<\请输入您的选择\ \ cin>>sel;

if(sel==3) break; switch(sel)

{case 1:openfileDeco();break; case 2:inputDeco();break;

default:cout<<\对不起,您输入的数据有误!请重新输入。\ } }

void inputDeco(){ //通过手动输入的方式进行译码 int m=2*n-1;

char *password=(char *)malloc(200*sizeof(char)); cout<<\ 请输入要译码的文件(以$结束)\

for(int i=1;i<200&&password[i-1]!='$';i++) cin>>password[i]; if(i==200) {

password=(char *)realloc(password,(200+80)*sizeof(char)); for(;i<280&&password[i]!='$';i++) cin>>password[i]; }

cout<<\译码结果为(#代表空格)\ //outstuf.close();

outstuf.open(\ for(i=1;password[i]!='$';){ char record[20];

for(int j=0,q=i;password[q]!='$';j++,q++){

if(password[q]=='0') {record[j]='0';m=HT[m].lchild;} else {record[j]='1';m=HT[m].rchild;}

if(HT[m].rchild==0) {record[j+1]='\\0';break;} }

if(HT[m].rchild!=0) {cout<

for(int p=1;p<=n;p++){ if(!strcmp(record,HC[p])) {outstuf<

}

i=i+strlen(record); m=2*n-1; }

cout<

void openfileDeco(){ //通过打开文件CodeFile.txt的方式进行译码 int m=2*n-1;

cout<<\ CodeFile.txt文件内容如下:\ ifstream infile(\ if(!infile){

cerr<<\ exit(1); }

char *password=(char *)malloc(200*sizeof(char)); for(int i=1;infile.eof()==0&&i!=200;i++){ infile>>password[i]; cout<

password=(char *)realloc(password,(200+80)*sizeof(char)); for(;infile.eof()==0&&i!=280;i++){

infile>>password[i]; cout<

password[++i]='$'; cout<

cout<<\译码结果为(#代表空格)\ //outstuf.close();

outstuf.open(\ for(i=1;password[i]!='$';){

char record[20];

for(int j=0,q=i;password[q]!='$';j++,q++){

if(password[q]=='0') {record[j]='0';m=HT[m].lchild;} else {record[j]='1';m=HT[m].rchild;}

if(HT[m].rchild==0) {record[j+1]='\\0';break;} }

if(HT[m].rchild!=0) {cout<

for(int p=1;p<=n;p++){

if(!strcmp(record,HC[p])) { outstuf<

i=i+strlen(record); m=2*n-1; }

cout<

void dispHT( HuffmanTree nodeRoot, int level ) {//以缩进方式输出哈夫曼树

if(HT==NULL) return; if(nodeRoot->rchild) {

dispHT(HT+nodeRoot->rchild,level+1); }

for(int i=0;iweight<weight<lchild!=0 ) {

dispHT(HT+nodeRoot->lchild,level+1); } }

int main(){ int sel=0;

cout<<\欢迎使用哈夫曼编码/译码器<-\ for(;;){

cout<<\ cout<<\构建哈夫曼树\\t\\t\\t\\t\\t*\ cout<<\输出哈夫曼树\\t\\t\\t\\t\\t*\ cout<<\编码\\t\\t\\t\\t\\t\\t*\ cout<<\译码\\t\\t\\t\\t\\t\\t*\ cout<<\退出\\t\\t\\t\\t\\t\\t*\

cout<<\ cout<<\请输入您的选择(1-5)\ \ cin>>sel;

if(sel==5) break; switch(sel)

{case 1:initHuffmanTree();break; case 3:encoding();break;

case 2:{if(HC==NULL) cout<<\对不起,哈夫曼树不存在!请先建立哈夫曼树。\ else {outstuf.open(\ dispHT(HT+2*n-1,1);outstuf.close();}break;}

case 4:decode();break;

default:cout<<\对不起,您输入的数据有误!请重新输入。\ } } outstuf.close(); cout<<\感谢使用本系统!--------------------------------\ return 0; }