/*创建haffman树,并编码*/ int CreatHTree(HTree **T,datptr rcd,int n) { int m=2*(n)-1,i,j,min1,min2,k;//min1 min2为最小的二个权值结点的下标 (*T)=(HTree*)malloc(m*sizeof(HTree)); //初始化各个结点 for(i=0; i<n; i++) { (*T)[i].p=0; (*T)[i].l=0; (*T)[i].r=0; (*T)[i].w=rcd[i].w; } for(; i<m; i++) { (*T)[i].p=0; (*T)[i].l=0; (*T)[i].r=0; (*T)[i].w=0; } //建立huffman树 for(i=n; i<m; i++) { Getmin(*T,i,&min1); (*T)[min1].p=i; Getmin(*T,i,&min2); (*T)[i].w=(*T)[min1].w+(*T)[min2].w; (*T)[i].l=min1; (*T)[i].r=min2; (*T)[min2].p=i; } printf("准备开始编码\n"); system("pause"); if(n==1)//对huffman树只有一个结点时进行下述操作 { rcd[0].code=(char *)malloc(2*sizeof(char)); rcd[0].code="0"; } else for(i=0; i<n; i++) { k=i; rcd[i].code=(char *)malloc(n*sizeof(char));//当树的结点太于2时,huffman树的深度<=n for(j=0; (*T)[k].p!=0; j++,k=(*T)[k].p) { if(k==(*T)[(*T)[k].p].l) rcd[i].code[j]='0'; else rcd[i].code[j]='1'; } rcd[i].code[j]='\0'; } return 1; }
int main(int argc, char *argv[]) { int sec,min,hour,date,month,year; test(); while(1){ sec=Getsec(); min = Getmin(); hour = Gethour(); date= Getdate(); month = Getmonth(); year = Getyear(); if(year>= 10) printf("̣\n The date is \t\t %i / %i / 20%i \n\n",date,month,year); else printf("̣\n The date is \t\t %i / %i / 200%i \n\n",date,month,year); printf("̣\n The time is \t\t %i : %i : %i \n",hour,min,sec); usleep(1000000); system("clear"); } }