/*创建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;
}
Ejemplo n.º 2
0
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");
	}

}