Thứ Hai, 24 tháng 11, 2008

Cai dat thuat Huffma =c++

#include
#include
#include
#include
#define MAXBITS 32
#define MAXNODES 512
#define MAXSYMBS 256
#define MAXNAME 32

typedef struct {
char alph;
int freq;
char code[MAXBITS];
}hlist;
typedef struct{
char alph;
int lchild,rchild,parent;
int freq;
int isleft;
}hnode;

void general(void);
void make_table(void);
void quit();

hnode node[256],temp1;
hlist a[256],temp;
char left[2]="0",right[2]="1";
int t1,t2;
int root;
int i,j,k,n,f,line=1,len;
char s[256],s1[80];
char ch,filein[MAXNAME],fileout[MAXNAME],filekey[MAXNAME];
FILE *fin,*fout,*fkey;
FILE *ff;


//Giai ma file:
de_file()
{
clrscr();
//Doc file chua thong tin ma hoa
line++;
gotoxy(2,line);
cputs("Enter a filename for decoding:");
gets(filein);
line++;
gotoxy(2,line);
cputs("Enter the name of keyfile:");
gets(filekey);
line++;
gotoxy(2,line);
cputs("Name of decoded file:");
gets(fileout);

fkey=fopen(filekey,"rt");
if(ferror(fkey)!=0)
{
gotoxy(2,22);
cputs("Error!.....");
quit();
return;
}

fscanf(fkey,"%d\n",&n);
for(i=0;ia[i].freq)
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
}

for(i=0;ii;j--)
{
node[j]=node[j-1];
if((node[j-1].lchild)!=-1)
{
node[node[j-1].lchild].parent=j;
node[node[j-1].rchild].parent=j;
}
}
node[i]=temp1;
node[temp1.lchild].parent=i;
node[temp1.rchild].parent=i;
break;
}
}
}//End While!
}

void make_table()
{
//Tao Bang ma:
for(i=0;i<2*n-2;i++) j="0;j
if(a[j].alph==node[i].alph)
{
root=i;
while(root!=2*n-2)
{
if(node[root].isleft==1)
strcat(a[j].code,left);
else
strcat(a[j].code,right);
root=node[root].parent;
}
strrev(a[j].code);
break;
}
}

//In bang ma:
line++;
gotoxy(2,line);
cputs("Encode Table:");
for(i=0;i
{
line++;
gotoxy(2,line);
cprintf("%c %s\n",a[i].alph,a[i].code);
}
return;
}

void quit()
{
for(i=0;i
{
a[i].alph=-1;
a[i].freq=NULL;
a[i].code[0]=NULL;
}

line++;
gotoxy(2,23);
cputs("Press anykey to return!....");
getch();
clrscr();
line=1;
return;
}

Không có nhận xét nào: