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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? huffman.cpp

?? huffman 編譯碼器的實現(xiàn)
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
#define MAXVALUE 10000
typedef struct{
	int weight;
	int flag;
	int parent;
	char ch;
	int lchild;
	int rchild;
}HafNode;
typedef struct{
	int bit[MAX];
	int start;
	int weight;
	char ch;
}Code;
typedef struct{
	char bit[MAX];
	char ch;
	int weight;
}Coding;
 /*---------------生成哈夫曼樹的函數(shù)---------------*/
void CreatHfmTree(int weight[],char ch[],int n,HafNode haffTree[]){
	int i,j,m1,m2,x1,x2;
	for (i=0;i<2*n-1;i++){
		if(i<n){
			haffTree[i].weight=weight[i];
			haffTree[i].ch=ch[i];
		}
		else
			haffTree[i].weight=0;
		haffTree[i].parent=-1;
		haffTree[i].flag=0;
		haffTree[i].lchild=-1;
		haffTree[i].rchild=-1;
	}
	for (i=0;i<n-1;i++)
	{
		m1=m2=MAXVALUE;
		x1=x2=0;
		for (j=0;j<n+i;j++){
			if (haffTree[j].weight<m1&&haffTree[j].flag==0){
				m2=m1;x2=x1;m1=haffTree[j].weight;x1=j;
			}
			else if(haffTree[j].weight<m2 && haffTree[j].flag==0)
			{
				m2=haffTree[j].weight;x2=j;
			}
		}
		haffTree[x1].parent= n + i;
		haffTree[x2].parent = n + i;
		haffTree[x1].flag = 1;
		haffTree[x2].flag = 1;
		haffTree[n+i].weight = haffTree[x1].weight + haffTree[x2].weight;
		haffTree[n+i].lchild = x1;
		haffTree[n+i].rchild = x2;
	}
	FILE *fp;
	fp=fopen("huffman.txt","w+");
	printf("%d\n",n);
	fprintf(fp,"%d\n",n);
	for (i=0;i<n;i++) 
		fprintf(fp,"%c %d %d %d\n",haffTree[i].ch,haffTree[i].parent,haffTree[i].lchild,haffTree[i].rchild);
	for (i=n;i<2*n-1;i++)
		fprintf(fp,"%d %d %d\n",haffTree[i].parent,haffTree[i].lchild,haffTree[i].rchild); 
	fclose(fp);
}
/*-----------------哈夫曼編碼函數(shù)-------------------*/
void HaffmanCode (HafNode haffTree[],int n,Code haffCode[]){
	Code *cd=( Code *) malloc (sizeof (Code));
	int i,j,child,parent; 
	for (i=0; i<n; i++){
		cd->start=n-1;
		cd->weight=haffTree[i].weight;
		cd->ch=haffTree[i].ch;
		child=i;
		parent=haffTree[child].parent;
		while (parent !=-1){
			if (haffTree[parent].lchild==child)
				cd->bit[cd->start]=0;
			else
				cd->bit[cd->start]=1;
			cd->start--;
			child =parent;
			parent=haffTree[child].parent;
		}
		for (j=cd->start+1; j<n; j++)
			haffCode[i].bit[j]=cd->bit[j];
		haffCode [i].start = cd->start+1;
		haffCode [i].weight=cd->weight;
		haffCode [i].ch=cd->ch;
	}
} 
/*-------------------初始化操作--------------------*/
void InitHfmTree(int weight[],char ch[]){
	FILE *fp;
	int i,j,n;
	char ch1,wj[15];
	printf("現(xiàn)在進(jìn)行初始化操作。。。\n請選擇:\nA.鍵盤輸入 B.文件輸入\n");
	scanf("%c",&ch1);
	if (ch1=='A'){
		printf("請輸入字符集大小n:\n");
		scanf("%d",&n);
	}
	if (ch1=='B'){
		printf("請輸入文件名:\n");
		scanf("%s",wj);
		fp=fopen(wj,"r"); 
		fscanf(fp,"%d",&n);
	} 
	HafNode *myHaffTree=(HafNode *)malloc(sizeof (HafNode)*(2*n+1));
	Code *myHaffCode =(Code *)malloc (sizeof (Code)*n);
	for (i=0;i<n;i++){
		if (ch1=='A'){
			printf("請輸入字符和權(quán)值:\n");
			scanf("%s %d",&ch[i],&weight[i]);
		}
		if (ch1=='B')
			fscanf(fp,"%s %d",&ch[i],&weight[i]);
	}
	if (ch1=='B')
		fclose(fp);
	CreatHfmTree(weight,ch,n,myHaffTree);
	HaffmanCode(myHaffTree,n,myHaffCode);
	fp=fopen("hfmtree.txt","w+"); 
	for (i=0;i<n;i++){
		printf("%c %d ",myHaffCode[i].ch,myHaffCode[i].weight);
		fprintf(fp,"%c %d ",myHaffCode[i].ch,myHaffCode[i].weight);
		for ( j=myHaffCode[i].start; j<n; j++){ 
			printf("%d",myHaffCode[i].bit[j]);
			fprintf(fp,"%d",myHaffCode[i].bit[j]);
		}
		fprintf(fp,"\n");
		printf("\n");
	}
	fclose(fp);
	printf("初始化成功!\n");
}
 /*-----------------文件編碼過程-----------------*/
void FileCoding(){
	FILE *fp,*fp1,*fp2;
	char zf[500];
	fp=fopen("hfmtree.txt","r");
	Coding ch[100];
	char c;
	int i=0;
	while (feof(fp)==0){ 
		fscanf(fp,"%s %d %s",&ch[i].ch,&ch[i].weight,&ch[i].bit);
		i++;
	}
	fclose(fp); 
	printf("現(xiàn)在進(jìn)行編碼操作。。。\n請選擇:\nA.鍵盤輸入 B.文件輸入\n");
	scanf("%s",&c);
	if (c=='A'){
		printf("請輸入字符串:\n");scanf("%s",zf);
	} 
	char ch1[20],ch2[20];
	int j;
	if (c=='B'){
		printf("請輸入正文的文件名:\n");
		scanf("%s",&ch1);
		fp1=fopen(ch1,"r");
	}
	printf("請輸入保存結(jié)果的文件名:\n");
	scanf("%s",&ch2); 
	fp2=fopen(ch2,"w+");
	if (c=='A'){
		int len,k;
		len=strlen(zf);
		for (k=0;k<len;k++)
			for (j=0;j<i;j++)
				if (ch[j].ch==zf[k]){
					fprintf(fp2,"%s",ch[j].bit);
					printf("%s",ch[j].bit);
				}
				printf("\n"); 
	}
	if (c=='B'){
		while(feof(fp1)==0){ 
			fscanf(fp1,"%c",&c);
			for (j=0;j<i;j++)
				if (ch[j].ch==c){
					fprintf(fp2,"%s",ch[j].bit);
					printf("%s",ch[j].bit);
				}
		}
		fprintf(fp2,"\n"); 
		printf("\n");
		fclose(fp1);
	} 
	fclose(fp2);
	printf("編碼過程完成!同時已將結(jié)果存入%s中.\n\n",ch2);
}
/*----------------------譯碼操作---------------------*/
void DeCoding(){ 
	FILE *fp,*fp1; 
	fp=fopen("huffman.txt","r");
	int i,n;
	fscanf(fp,"%d",&n);
	HafNode *myHaffTree=(HafNode *)malloc(sizeof (HafNode)*(2*n+1));
	for (i=0;i<n;i++)
		fscanf(fp,"%s %d %d %d\n",&myHaffTree[i].ch,&myHaffTree[i].parent,&myHaffTree[i].lchild,&myHaffTree[i].rchild);
	for (i=n;i<2*n-1;i++)
		fscanf(fp,"%d %d %d\n",&myHaffTree[i].parent,&myHaffTree[i].lchild,&myHaffTree[i].rchild);
	fclose(fp);
	printf("請輸入譯碼文件的文件名:\n");
	char ch1[20],ch2[20];
	scanf("%s",ch1);
	printf("請輸入結(jié)果文件的文件名:\n");
	scanf("%s",ch2); 
	fp=fopen(ch1,"r");
	fp1=fopen(ch2,"w+");
	char ch;
	i=2*n-2;
	while (!feof(fp)){
		fscanf(fp,"%c",&ch); 
		if (ch=='0') //若編碼為0,則找此結(jié)點的左孩子;
			i=myHaffTree[i].lchild;
		if (ch=='1') //若編碼為1,則找此結(jié)點的右孩子; 
			i=myHaffTree[i].rchild; 
		if (i<n){
			printf("%c",myHaffTree[i].ch);
			fprintf(fp1,"%c",myHaffTree[i].ch);
			i=2*n-2;
		}
	}
	printf("\n");
	fprintf(fp1,"\n");
	fclose(fp);
	fclose(fp1);
	printf("譯碼過程完成!已將結(jié)果存入%s中.\n\n",ch2);
}
/*------------------打印代碼文件-----------------*/
void PrintCodeFile() {
	FILE *fp1,*fp2;
	printf("請輸入輸入文件的文件名:\n");
	char ch1[20],ch2[20];
	scanf("%s",ch1);
	printf("請輸入結(jié)果保存的文件名:\n");
	scanf("%s",ch2);
	fp1=fopen(ch1,"r");
	fp2=fopen(ch2,"w+");
	int count=0;
	char ch;
	while (!feof(fp1)){
		fscanf(fp1,"%c",&ch); 
		printf("%c",ch);
		fprintf(fp2,"%c",ch);
		count++;
		if (count==50){
			printf("\n");
			fprintf(fp2,"\n");
			count=0;
		}
	}
	printf("\n");
	fprintf(fp2,"\n");
	fclose(fp1);
	fclose(fp2);
	printf("打印代碼過程完成!已將結(jié)果存入%s中.\n\n",ch2);
}
/*-------------------打印哈夫曼樹結(jié)點-----------------*/
void PrintTreeCode(HafNode *huf,int n,int p,FILE *fp){
	int i;
	if (n==-1)
		return;
	PrintTreeCode(huf,huf[n].rchild,p+1,fp);
	for (i=0;i<p;i++){
		printf(" ");
		fprintf(fp," ");
	}
	if (p>=0&&huf[n].rchild==-1){
		printf("---");
		printf("%c\n",huf[n].ch); //如果此結(jié)點為葉子結(jié)點,則將此結(jié)點輸出;
		fprintf(fp,"---%c\n",huf[n].ch);
	}
	else {
		printf("@\n");            //如果此結(jié)點為非葉子結(jié)點,則輸出"@";
		fprintf(fp,"@\n");
	}
	PrintTreeCode(huf,huf[n].lchild,p+1,fp);
}
/*-----------------打印哈夫曼樹的操作----------------*/
void PrintTree(){ 
	FILE *fp;
	fp=fopen("huffman.txt","r");
	int i,n;
	fscanf(fp,"%d",&n);
	HafNode *myHaffTree=(HafNode *)malloc(sizeof (HafNode)*(2*n+1));
	for (i=0;i<n;i++)
		fscanf(fp,"%s %d %d %d\n",&myHaffTree[i].ch,&myHaffTree[i].parent,&myHaffTree[i].lchild,&myHaffTree[i].rchild);
	for (i=n;i<2*n-1;i++)
		fscanf(fp,"%d %d %d\n",&myHaffTree[i].parent,&myHaffTree[i].lchild,&myHaffTree[i].rchild);
	fclose(fp);
	printf("請輸入保存結(jié)果的文件名:\n");
	char ch1[20];
	scanf("%s",ch1);
	fp=fopen(ch1,"w+");
	PrintTreeCode(myHaffTree,2*n-2,0,fp);
	fclose(fp);
	printf("打印哈夫曼樹過程完成!同時已將結(jié)果存入%s中.\n\n",ch1); 
}
/*-------------------------打印表單----------------------*/
void Sheet(){
	printf("*******************************************************************************\n");
	printf("***** ******************** 歡迎使用哈夫曼編/譯碼器 ********************* *****\n");
	printf("***** ******************** ************************ ********************* *****\n");
	printf("***** C.編碼    D.譯碼   T.印哈夫曼樹   P.印代碼文件   E.退出 *****\n");
	printf("*******************************************************************************\n");
}
int main(){
	int n=4;
	int weight[100];
	char ch[100],cha;
	Sheet();
	InitHfmTree(weight,ch);
	while (1){
		printf("請輸入要執(zhí)行的操作:\nC.編碼   D.譯碼   T.印哈夫曼樹   P.印代碼文件   E.退出\n");
		printf("請輸入要執(zhí)行的操作:\n");
		scanf("%s",&cha);
		if (cha=='E')
			break; 
		switch (cha){
		case 'C':FileCoding();break; //執(zhí)行編碼操作
		case 'D':DeCoding();break; //執(zhí)行譯碼操作
		case 'T':PrintTree();break; //打印哈夫曼樹
		case 'P':PrintCodeFile();break; //打印代碼文件
		}
	}
	return 0; 
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成a人片亚洲日本久久| 亚洲电影第三页| 成人黄色小视频| 综合久久久久久| 91最新地址在线播放| 亚洲天堂a在线| 欧美中文字幕一二三区视频| 亚洲综合区在线| 8x福利精品第一导航| 久久99久久99| 国产精品区一区二区三区| 99国产一区二区三精品乱码| 亚洲品质自拍视频| 欧美精品自拍偷拍| 国产中文字幕一区| 中文字幕日韩精品一区| 欧洲精品在线观看| 免费精品视频在线| 国产精品福利在线播放| 欧美性猛交xxxxxxxx| 七七婷婷婷婷精品国产| 国产日韩欧美一区二区三区乱码 | 欧美日韩久久一区二区| 日本一不卡视频| 国产午夜亚洲精品羞羞网站| 91麻豆国产福利精品| 人禽交欧美网站| 中文字幕在线观看一区| 欧美一卡2卡3卡4卡| 成人激情图片网| 午夜视频在线观看一区| 国产日韩欧美精品在线| 91精品国产手机| av爱爱亚洲一区| 久久国产尿小便嘘嘘| 亚洲精品欧美激情| 精品成人免费观看| 一本高清dvd不卡在线观看 | 亚洲6080在线| 国产精品三级视频| 日韩午夜三级在线| 色综合天天性综合| 国产一区二区伦理片| 日日欢夜夜爽一区| 亚洲天堂av一区| 日本一区二区三区在线不卡| 正在播放亚洲一区| 色天天综合久久久久综合片| 国产精品一区二区黑丝| 男女男精品网站| 天堂久久一区二区三区| 日韩伦理免费电影| 中文字幕第一区第二区| 精品美女在线观看| 欧美一卡在线观看| 欧美肥妇bbw| 欧美视频一区在线| 一本大道久久a久久综合婷婷| 国产成人免费视频一区| 久久99国产精品久久99果冻传媒| 亚瑟在线精品视频| 亚洲午夜久久久久中文字幕久| 国产精品视频第一区| 久久久不卡网国产精品一区| 日韩一区二区免费在线观看| 欧美日本一区二区三区| 一本久道中文字幕精品亚洲嫩| 99久久精品免费看| av不卡在线观看| 成人高清伦理免费影院在线观看| 国产成人午夜99999| 国产精品一卡二卡在线观看| 精品一区二区在线免费观看| 九一久久久久久| 免费成人av在线播放| 日韩电影在线免费| 日本午夜精品一区二区三区电影| 污片在线观看一区二区| 天天av天天翘天天综合网| 亚洲成人动漫一区| 日韩高清国产一区在线| 老司机精品视频一区二区三区| 美女一区二区三区| 国产剧情一区二区三区| 成人免费看片app下载| av在线不卡免费看| 色综合中文字幕| 欧美图区在线视频| 91精品国产色综合久久久蜜香臀| 91麻豆精品国产91久久久久| 精品欧美乱码久久久久久| 久久蜜桃av一区精品变态类天堂 | 亚洲福中文字幕伊人影院| 日韩在线卡一卡二| 日本亚洲免费观看| 国产精品一区二区你懂的| 成人av在线一区二区| 欧日韩精品视频| 欧美精选一区二区| wwwwww.欧美系列| 成人免费小视频| 亚洲123区在线观看| 精品一区二区免费在线观看| 丁香婷婷深情五月亚洲| 色婷婷久久久综合中文字幕| 欧美精品亚洲一区二区在线播放| 欧美成人福利视频| 国产精品国模大尺度视频| 亚洲国产人成综合网站| 免费观看在线色综合| 成人免费视频一区二区| 欧美亚洲国产一区二区三区va| 欧美一级视频精品观看| 国产精品进线69影院| 天天综合网 天天综合色| 国产一区二区三区蝌蚪| 色一情一伦一子一伦一区| 日韩午夜电影av| 亚洲天天做日日做天天谢日日欢| 免费视频最近日韩| 色偷偷一区二区三区| 日韩欧美成人激情| 亚洲视频在线观看三级| 久久精品国产久精国产爱| 91丨porny丨在线| 精品sm捆绑视频| 一二三区精品视频| 国产成人精品午夜视频免费| 欧美日韩中文国产| 中文字幕国产精品一区二区| 日本亚洲免费观看| 在线免费观看日韩欧美| 国产欧美精品一区二区色综合| 午夜欧美在线一二页| a级精品国产片在线观看| 日韩你懂的在线观看| 亚洲国产中文字幕| 成人精品高清在线| 26uuu亚洲综合色欧美| 午夜av一区二区三区| 91丨九色丨蝌蚪丨老版| 国产三级精品在线| 免费美女久久99| 欧美日韩大陆在线| 亚洲免费观看在线观看| 国产成人精品亚洲午夜麻豆| 日韩精品一区二区三区四区视频 | 国产精品午夜春色av| 麻豆高清免费国产一区| 制服丝袜成人动漫| 亚洲国产一区在线观看| 91免费视频网址| 国产精品三级久久久久三级| 国产一区二区影院| 欧美精品一区二| 久久 天天综合| 日韩欧美一二三四区| 青青草国产精品97视觉盛宴| 欧美日韩成人激情| 亚洲18女电影在线观看| 欧美日韩精品二区第二页| 亚洲欧美另类小说视频| 色偷偷一区二区三区| 亚洲精品国产精华液| 91福利资源站| 亚洲国产乱码最新视频| 欧美日韩激情一区二区三区| 亚洲国产日韩一级| 欧美日本一区二区三区| 日韩电影免费在线| 制服.丝袜.亚洲.另类.中文| 日本不卡视频一二三区| 91精品国产高清一区二区三区| 三级不卡在线观看| 欧美一区二区在线视频| 男人的天堂亚洲一区| 欧美变态tickling挠脚心| 久久9热精品视频| 久久久精品tv| 97精品久久久久中文字幕 | 欧美日韩三级视频| 日本欧美一区二区三区| 欧美tk—视频vk| 国产suv精品一区二区6| 成人免费在线视频观看| 欧美写真视频网站| 免费人成在线不卡| 国产欧美一二三区| 日本精品一区二区三区高清| 日韩在线a电影| 精品国产99国产精品| 成人不卡免费av| 亚洲一区二区视频在线| 欧美一级电影网站| 国产精品一区二区在线看| 亚洲柠檬福利资源导航| 欧美日本一区二区| 国产不卡高清在线观看视频| 亚洲人成网站在线| 欧美一区二区三区在线视频|