亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hfmfunc.cpp

?? 實現霍夫曼編碼系統。包含文件hfmfunc.cpp、main.cpp、huffman.h
?? CPP
字號:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include"huffman.h"
void Select(HuffmanTree HT,int n,int &s1,int &s2)
{
	int i,t;
	for(i=1;i<=n&&HT[i].parent;i++);
		s1=i;
	for(i=i+1;i<=n&&HT[i].parent;i++);
		s2=i;
	for(i=i+1;i<=n;i++)
	{
		if(HT[s1].weight>HT[s2].weight)t=s1;
		else t=s2;
		if(HT[i].parent==0&&HT[i].weight<HT[t].weight)
		{
			t=i;
            if(HT[s1].weight>HT[s2].weight)s1=t;
			else s2=t;
		}
	}
	if(HT[s1].lchild!=0&&HT[s2].lchild==0||s1>s2)
	{//若s1為非葉子結點而s2是葉子結點或者s1>s2則調換s1和s2的次序
		t=s1;
		s1=s2;
		s2=t;
	}
}
Status HfmCoding(Huffman &Hfm)
{
      int i,s1,s2,n,start,c,f;
	  char *cd;
	  n=Hfm.length;
	  for(i=n+1;i<=2*n-1;++i)
	  {//s1為左孩子而s2為右孩子
		  s1=s2=0;
		  Select(Hfm.HT,i-1,s1,s2);
		  Hfm.HT[s1].parent=i;
		  Hfm.HT[s2].parent=i;
		  Hfm.HT[i].lchild=s1;
          Hfm.HT[i].rchild=s2;
		  Hfm.HT[i].weight=Hfm.HT[s1].weight+Hfm.HT[s2].weight;
	  }
	  Hfm.HC=(HuffmanCode)malloc((n+1)*sizeof(char *));
	  cd=(char *)malloc(n*sizeof(char));
	  cd[n-1]='\0';
	  for(i=1;i<=n;++i)
	  {
		  start=n-1;
		  for(c=i,f=Hfm.HT[i].parent;f!=0;c=f,f=Hfm.HT[f].parent)
			  if(Hfm.HT[f].lchild==c)cd[--start]='0';
			  else cd[--start]='1';
			  Hfm.HC[i]=(char *)malloc((n-start)*sizeof(char));
			  strcpy(Hfm.HC[i],&cd[start]);
			  //TEXT:printf("%s\n",Hfm.HC[i]);
	  }
	  free(cd);
	  return OK;
}
Huffman InputHuffman(Huffman Hfm)
{
	int i,n,m;
	printf("\n請輸入字符長度\n");
	fflush(stdin);
	scanf("%d",&n);
	while(n<1)
	{
		printf("\n請輸入字符長度\n");
		fflush(stdin);
		scanf("%d",&n);
	}
	getchar();
	m=2*n-1;
	Hfm.HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//0號單元未用
	Hfm.CH=(char *)malloc((n+1)*sizeof(char));//0號單元不用
    for(i=1;i<=n;++i)
	{
		fflush(stdin);
		printf("\n請輸入第%d個字符\n",i);
		scanf("%c",&Hfm.CH[i]);
		printf("\n請輸入第%d個字符對應的權值\n",i);
		scanf("%d",&Hfm.HT[i].weight);
		Hfm.HT[i].parent=0;
		Hfm.HT[i].lchild=0;
		Hfm.HT[i].rchild=0;
	}
	for(;i<=m;++i)
	{
		Hfm.HT[i].parent=0;
		Hfm.HT[i].lchild=0;
		Hfm.HT[i].rchild=0;
		Hfm.HT[i].weight=0;
	}
	Hfm.length=n;
	return Hfm;


}
Status InitHuffman(Huffman &Hfm)
{
	int i,n;
	FILE *fp;
	fp=fopen("hfmTree.txt","r+");
	if(fp==NULL)
	{
		Hfm=InputHuffman(Hfm);
		fp=fopen("hfmTree.txt","w+");
		fprintf(fp,"%d\n",Hfm.length);//將葉子結點的長度存入文件
		for(i=1;i<=Hfm.length;i++)
		{
			//fputc(Hfm.CH[i],fp);//將字符寫入文件
			//putw(Hfm.HT[i].weight,fp);//將對應的權值寫入文件
			fprintf(fp,"%c%d",Hfm.CH[i],Hfm.HT[i].weight);//將字符和對應的權值寫入文件
		}
		rewind(fp);
	}
	else
	{
		printf("\n赫夫曼樹已存在\n");
		fscanf(fp,"%d",&n);//接收葉子結點的長度
		Hfm.CH=(char *)malloc((n+1)*sizeof(char));//0號單元不用,存儲字符
		Hfm.HT=(HuffmanTree)malloc((2*n)*sizeof(HTNode));//0號單元未用,建樹
		fgetc(fp);
		for(i=1;i<=n;i++)
		{
			//Hfm.CH[i]=fgetc(fp);
            //Hfm.HT[i].weight=getw(fp);
			fscanf(fp,"%c%d",&Hfm.CH[i],&Hfm.HT[i].weight);
		}
		for(i=1;i<=n;++i)
		{
			Hfm.HT[i].parent=0;
			Hfm.HT[i].lchild=0;
			Hfm.HT[i].rchild=0;
		}
		for(;i<=2*n-1;++i)
		{
			Hfm.HT[i].parent=0;
			Hfm.HT[i].lchild=0;
			Hfm.HT[i].rchild=0;
			Hfm.HT[i].weight=0;
		}
		Hfm.length=n;
	}
	fclose(fp);
	HfmCoding(Hfm);//進行編碼
	return OK;
}

void Encoding(Huffman Hfm)
{
	FILE *fp1,*fp2;
	int j,i=0;
	char ch[MAX];
	fp1=fopen("ToBeRan.txt","r+");
	if(fp1==NULL)
	{//從鍵盤讀入字符串
		fflush(stdin);
		printf("請輸入要編碼的語句\n");
		gets(ch);
		printf("\n");
	}
	else
	{
		printf("\n要編碼的文件已存在\n");
		fgets(ch,MAX,fp1);
		fclose(fp1);
	}

	//TEXT printf("%s",ch);
	
	fp2=fopen("CodeFile.txt","w+");
	while(ch[i]!='\0')
	{
		for(j=1;j<=Hfm.length;j++)
			if(ch[i]==Hfm.CH[j])
			{
				printf("%s",Hfm.HC[j]);
				fprintf(fp2,"%s",Hfm.HC[j]);
				break;
			}
			i++;
	}
	rewind(fp2);
	fclose(fp2);
	
}

void Decoding(Huffman Hfm)
{
	FILE *fp1,*fp2;
	char cd[MAXNUM];
	int i,j=0;
	fp1=fopen("CodeFile.txt","r+");
	if(fp1==NULL)
	{
		printf("\n請輸入赫夫曼碼進行譯碼:");
		scanf("%s",cd);
	}
	else
	{
		printf("\n要譯碼的文件已存在\n");
		fgets(cd,MAXNUM,fp1);
		fclose(fp1);
	}
	fp2=fopen("TextFile.txt","w+");
	while(cd[j]!='\0')
	{
		i=2*Hfm.length-1;//i為根節點
		while(Hfm.HT[i].lchild||Hfm.HT[i].rchild)
		{
			//printf("%c",cd[j]);
			if(cd[j]=='0')i=Hfm.HT[i].lchild;
			else if(cd[j]=='1')i=Hfm.HT[i].rchild;
			j++;
			//printf("%c",cd[j]);
		}

		printf("%c",Hfm.CH[i]);
		fprintf(fp2,"%c",Hfm.CH[i]);
	}
	fclose(fp2);
}
void Print()
{
	FILE *fp1,*fp2;
	char cd;
	int n=0;
	if((fp1=fopen("CodeFile.txt","r+"))==NULL)
	{
		printf("\nThe file cannot open!\n");
		return;
	}
	fp2=fopen("CodePrin.txt","w+");
	cd=fgetc(fp1);
	while(cd!=EOF)
	{
		printf("%c",cd);
		fprintf(fp2,"%c",cd);
		n++;
		if(n%50==0)
		{
			printf("\n");
			fprintf(fp2,"\n",cd);
		}
		cd=fgetc(fp1);
	}
	fclose(fp1);
	fclose(fp2);

}
Status PreOrderTraverse(Huffman Hfm,int n)
{
	if(n)
	{
		if(Hfm.HT[n].lchild||Hfm.HT[n].rchild)printf("*");//不存在字符,用*代替
		else printf("%c",Hfm.CH[n]);
		if(PreOrderTraverse(Hfm,Hfm.HT[n].lchild))
			if(PreOrderTraverse(Hfm,Hfm.HT[n].rchild))
				return OK;
		return ERROR;
	}
	else return OK;
}
void TreePrint(Huffman Hfm)
{
	int i,n;
	n=Hfm.length;
	printf("\n該赫夫曼樹的編碼規則\n");
	//printf("%s",Hfm.HC[1]);
	for(i=1;i<=n;i++)
	{
		printf("\n");
		printf("字符:%c ",Hfm.CH[i]);
		printf("權值:%d ",Hfm.HT[i].weight);
		printf("對應的編碼:%s ",Hfm.HC[i]);
		//puts(Hfm.HC[i]);
	}
	printf("\n打印赫夫曼樹(先根)\n");
	PreOrderTraverse(Hfm,2*Hfm.length-1);//先根遍歷樹

	
}
void menu()
{
	printf("\n************************************************************\n");
	printf("\n歡迎使用赫夫曼編/譯碼器\n");
	printf("\nI.初始化  E.編碼  D.譯碼  P.印代碼文件  T.印赫夫曼樹  Q.退出\n");
	printf("\n************************************************************\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99国产精品久久| 亚洲青青青在线视频| 日韩av一区二区三区四区| 欧美日韩中文字幕一区二区| 亚洲制服丝袜一区| 欧美日韩综合在线| 久久国产福利国产秒拍| 国产亚洲一区二区在线观看| 风间由美一区二区三区在线观看 | 亚洲一区二区视频在线观看| 在线看国产一区| 首页亚洲欧美制服丝腿| 欧美电影免费提供在线观看| 国产精品一二三四| 亚洲欧美另类久久久精品 | 欧美日韩精品一区二区三区| 免费av网站大全久久| 国产日产欧美一区二区视频| 91视频91自| 狂野欧美性猛交blacked| 国产拍揄自揄精品视频麻豆| 91成人在线观看喷潮| 久久99精品久久久久婷婷| 国产精品免费人成网站| 欧美色窝79yyyycom| 精品一区二区在线播放| 亚洲欧美日韩一区二区| 日韩免费成人网| 91天堂素人约啪| 另类小说一区二区三区| 亚洲色图在线播放| 精品欧美黑人一区二区三区| eeuss鲁片一区二区三区在线看| 日韩精品国产欧美| 国产精品情趣视频| 日韩欧美亚洲国产精品字幕久久久| 成人在线一区二区三区| 丝袜美腿亚洲色图| 亚洲国产精品成人久久综合一区 | 波多野结衣一区二区三区 | 欧美成人福利视频| 91最新地址在线播放| 老司机免费视频一区二区| 亚洲裸体在线观看| 久久久精品蜜桃| 欧美人狂配大交3d怪物一区| 99视频国产精品| 国产在线精品一区二区三区不卡 | 成人中文字幕在线| 美女视频黄免费的久久 | 91麻豆精品久久久久蜜臀| 99久久久国产精品免费蜜臀| 国产精品一卡二| 麻豆成人91精品二区三区| 亚洲国产精品影院| 亚洲欧美激情在线| 日本一区二区久久| 国产丝袜在线精品| 日韩精品一区二区在线观看| 欧美日韩中文精品| 在线看一区二区| 日本韩国欧美一区| 972aa.com艺术欧美| 成人激情免费电影网址| 国产福利一区二区三区| 极品瑜伽女神91| 久久99热这里只有精品| 免费成人结看片| 日韩av一区二区在线影视| 午夜久久电影网| 亚洲成va人在线观看| 亚洲成人综合在线| 婷婷丁香激情综合| 午夜激情一区二区三区| 日韩精品色哟哟| 免费在线看成人av| 美女久久久精品| 久久精品国产在热久久| 久久激情五月激情| 国产伦精品一区二区三区视频青涩 | 国产经典欧美精品| 国产成人午夜视频| 成人精品一区二区三区四区| 成人性生交大合| 91丨国产丨九色丨pron| 一本大道久久a久久精二百| 色香蕉久久蜜桃| 欧美另类高清zo欧美| 欧美一级高清大全免费观看| 欧美mv日韩mv国产网站| 国产亚洲美州欧州综合国| 国产欧美日本一区视频| 亚洲天堂av老司机| 亚洲成人福利片| 美腿丝袜在线亚洲一区| 国产福利一区二区三区| 色哟哟国产精品免费观看| 欧美日韩一区中文字幕| 日韩免费在线观看| 中文字幕久久午夜不卡| 亚洲久本草在线中文字幕| 五月天欧美精品| 精品一区二区三区在线视频| av在线这里只有精品| 欧美日韩一区在线| 久久亚洲免费视频| 亚洲色图.com| 日韩**一区毛片| 懂色中文一区二区在线播放| 在线亚洲欧美专区二区| 日韩美女一区二区三区四区| 国产精品色婷婷久久58| 天天影视涩香欲综合网| 韩国欧美国产1区| 色综合久久久久综合| 日韩精品中午字幕| 亚洲欧美一区二区三区极速播放| 亚洲成人中文在线| 国产成人aaaa| 欧美麻豆精品久久久久久| 国产情人综合久久777777| 亚洲国产一二三| 成人黄色777网| 欧美一区二区三区视频| 国产精品不卡一区| 久草热8精品视频在线观看| 色综合久久99| 久久女同性恋中文字幕| 亚洲成在线观看| 99久久伊人网影院| 久久天天做天天爱综合色| 亚洲国产欧美日韩另类综合| 国产精品123| 欧美成人猛片aaaaaaa| 亚洲一区二区在线观看视频| 成人动漫视频在线| 精品国一区二区三区| 亚洲成人在线观看视频| 97精品久久久久中文字幕| 2017欧美狠狠色| 美女在线一区二区| 欧美日韩国产一级片| 亚洲三级理论片| 成人晚上爱看视频| 久久人人爽爽爽人久久久| 午夜私人影院久久久久| 在线亚洲一区观看| 国产精品国产三级国产| 国产91精品久久久久久久网曝门 | 91麻豆免费视频| 欧美经典一区二区| 国产在线观看免费一区| 精品欧美一区二区三区精品久久 | 欧美在线视频日韩| 亚洲欧美偷拍三级| 91片在线免费观看| 国产精品不卡在线| 99这里都是精品| 综合中文字幕亚洲| 99久久综合狠狠综合久久| 国产精品久久久久久久久免费相片 | 久久婷婷国产综合精品青草| 久久99九九99精品| 欧美电视剧在线看免费| 久久狠狠亚洲综合| 精品国产乱码久久久久久久| 久久国产成人午夜av影院| 精品国免费一区二区三区| 精品中文av资源站在线观看| wwwwxxxxx欧美| 国产精品一区二区视频| 国产免费观看久久| 成人国产精品视频| 亚洲欧洲日韩综合一区二区| 99精品视频中文字幕| 亚洲精品美腿丝袜| 欧美区一区二区三区| 人禽交欧美网站| 欧美r级电影在线观看| 国产成人在线视频网址| 亚洲国产精品激情在线观看 | 极品瑜伽女神91| 国产午夜精品久久| 一本在线高清不卡dvd| 亚洲国产综合91精品麻豆| 日韩欧美一级精品久久| 国产精品白丝av| 亚洲人成人一区二区在线观看 | 国产精品久久久久久亚洲毛片| 91亚洲精品久久久蜜桃| 亚洲高清免费一级二级三级| 欧美一区二区三区性视频| 精品一区二区在线观看| 国产精品美女久久福利网站 | 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲黄色av一区| 日韩免费视频线观看| 成人高清视频在线观看| 夜夜操天天操亚洲| 26uuu色噜噜精品一区|