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

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

?? 4.cpp

?? 本程序是一個對哈夫曼編碼問題的演示程序
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK    1
#define NULL  0
#define TURE  1
#define FALSE  0
#define EOF   (-1)
int S1=0;
int i;
int S2=0;
char ch[27];
typedef struct HT
{
	char ch;
	int num;
	int weight;
	int parent,lchild,rchild;

} HTNode,*HuffmanTree;//定義哈夫曼樹結點
typedef char* *Huffmancode;
//-------------——————--------------------功能函數列表-----------------------------------------//
int Select(HuffmanTree HT,int n);
int Initialization (HuffmanTree HT,int n);
int Encoding (HuffmanTree HT,int n);
int Decoding (HuffmanTree HT,int n);
int Print ();
int TreePrinting (HuffmanTree HT,int n);
//-----------——————---------------------主函數----------------————-------------------------//
int main ()
{
	int m,n=0;
	char ch; 
	HuffmanTree HT;//定義HT為哈夫曼樹
	printf("***********************歡迎使用本系統(開發人 厲啟鵬)*************************\n");
    printf("   A  初始化     B  編碼   C   譯碼   D   印碼文件   E   印哈夫曼樹   F   退出\n");
	while(1)
	{
       
		while(1)
		{
			fflush(stdin);
 		    printf("\n請選擇您需要的操作:");
            scanf("%c",&ch);
			fflush(stdin);
            if(ch>=65&&ch<=70) break;
		}
       switch(ch)
		{
			 case'A':
			     printf("請輸入字符個數:"); 
                 scanf("%d",&n);//輸入需要編碼的字符的個數
                 m=2*n-1;
				 HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));//為哈夫曼樹開辟存儲空間
				 Initialization (HT,n);
				 break;
             case'B':
				 Encoding(HT,n);
				 break;
			 case'C':
                 Decoding(HT,n);
				 break;
			 case'D':
                 Print ();
				 break;
			 case'E':
                 TreePrinting(HT,n);
				 break; 
			 case'F':

				 return 0;
			 default:  break;
		}
	}
}
//-----------——————---------------------主函數----------------————-------------------------//


int Initialization (HuffmanTree HT,int n)
{   //初始化哈夫曼樹函數
	int m,i;
	FILE *out1;
    //將字符存入該數組
	m=2*n-1;
    printf("請輸入空格的頻度:");
	scanf("%d",&HT[1].weight);
    HT[1].num=1;
	HT[1].ch=NULL;
	HT[1].parent=NULL;//將每個節點的指針均初始化為空
	HT[1].lchild=NULL;
	HT[1].rchild=NULL;
    for(i=2;i<=n;i++)
	{
		printf("請輸入第%d個字符:",i);
	    scanf("%s",&HT[i].ch);
		printf("請輸入該字符的頻度:");
        scanf("%d",&HT[i].weight);
		HT[i].num=i;
		HT[i].parent=NULL;//將每個節點的指針均初始化為空
		HT[i].lchild=NULL;
		HT[i].rchild=NULL;
	}
	for(i=n+1;i<=m;++i)
	{
		Select(HT,i-1);
		//在HT[1...n]中選擇parent為0,且weight最小的兩個節點,其序號分別是S1,S2
		HT[S1].parent=i,HT[S2].parent=i;//開始構造哈夫曼樹
		HT[i].lchild=S1,HT[i].rchild=S2;
		HT[i].weight=HT[S1].weight+HT[S2].weight;
		HT[i].parent=NULL;
		HT[i].num=i;
		HT[i].ch=' ';

	}
	//printf("%s   %s    %s     %s     %s",HT[i].num,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);
    if((out1=fopen("hfmTree.txt","w"))==NULL)//建立文件hfmTree.txt以存儲哈夫曼樹
	{
		printf("文件錯誤\n !");
	}
    fputs("fuhao     num       weight    parent    lchild    rchild    \n",out1);
	for(i=1;i<=m;i++)//將哈夫曼樹存入hfmTree.txt文件
	{
		
	    fprintf(out1,"%-10c%-10d%-10d%-10d%-10d%-10d\n",HT[i].ch,HT[i].num,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild);  	 
	}
	fclose(out1);
	printf("哈夫曼樹已構造完成,并已存入hfmTree.txt文件!\n");
	return OK;

}



int Encoding(HuffmanTree HT,int n)
{
	int i,start,c,f;
	char ch,infile[20];
    FILE *in,*out2,*out3;
    if(n==0)         //未建立哈夫曼樹  
	{  
        printf("請先建立哈夫曼樹!\n");  
        return NULL;  
	} 

	Huffmancode HC=(Huffmancode)malloc((n+1)*sizeof(char*));//分配n個字符編碼的頭指針向量
	char* cd=(char*)malloc(n*sizeof(char));//分配求編碼的的工作空間
	cd[n-1]='\0';//編碼結束符位置

	for(i=1;i<=n;++i)
	{//逐個逐個字符求哈夫曼編碼
		start=n-1;
		for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent)//從葉子到根逆向求編碼
		{	
	
			if(HT[f].lchild==c)  cd[--start]='0';
			else  cd[--start]='1';
		}
		HC[i]=(char*)malloc((n-start)*sizeof(char));//為第i個字符編碼分配空間
		strcpy(HC[i],&cd[start]);//從cd復制編碼(串)到HC
	}
	free(cd);//釋放工作空間
	for(i=1;i<=n;i++) printf("%s\n",HC[i]);
   if((out3=fopen("CodeFile.txt","w"))==NULL)//建立CodeFile.txt文件以存儲對正文的編碼
	{
		printf("文件錯誤!\n ");
	} 
	if((in=fopen("ToBeTran.txt","r"))==NULL)//打開需要編碼的文件ToBeTran.txt
	{
		printf("\n 打不開此ToBeTran.txt文件!");
		
	}
    ch=fgetc(in);
    while(ch!=EOF)//對正文中的逐個字符進行編碼
	{	    
		putchar(ch);
	    for(i=1;i<=n;++i)
		{
		    if(ch==HT[i].ch) 
			{
				fprintf(out3,"%s",HC[i]);//將編碼結果寫進CodeFile.txt文件				
			}
			else continue;
		}

		ch=fgetc(in);	
	}
    fclose(out3);//關閉文件
	printf("編碼已完成并存入CodeFile.txt文件!");
    return OK;

	
}
int Decoding(HuffmanTree HT,int n)
{
	int c,f;
	char infile[20],ch;
    FILE *in,*out;
    if(n==0)         //未建立哈夫曼樹  
	{  
        printf("請先建立哈夫曼樹!\n");  
        return NULL;  
	} 

    if((out=fopen("TextFile.txt","w"))==NULL)//建立文件以儲存編碼
	{
		printf("\n 建立文件失敗!");		
	}
    
	printf("請輸入需要譯碼的文件名(默認文件為CodeFile.txt):");
	scanf("%s",infile);
    if((in=fopen(infile,"r"))==NULL)
	{
		printf("\n請檢查您是否建樹或編碼!");
		return NULL;
	}
    ch=fgetc(in);
    c=2*n-1;
    f=c;
    while(ch!=EOF)//對正文中的逐個字符進行譯碼
	{
		if(ch=='0')
		{
			f=HT[c].lchild;
			c=f;
			if(HT[f].lchild==0 && HT[f].rchild==0)
			{
				fprintf(out,"%c",HT[f].ch);
				c=2*n-1;
				f=c;
			}
		}
		if(ch=='1')
		{
			f=HT[c].rchild;
			c=f;
			if(HT[f].lchild==0 && HT[f].rchild==0)
			{
				fprintf(out,"%c",HT[f].ch);
				c=2*n-1;
				f=c;
			}
		}
       ch=fgetc(in);
	
	}
    fclose(out);
	printf("譯碼已完成并存入TextFile.txt文件!");
	return OK;

}

int Print()
{
    char infile[20],ch,i=0;
    FILE *in,*out;
	printf("請輸入存放編碼的文件名(默認為CodeFile.txt):");
    scanf("%s",infile);
	if((in=fopen(infile,"r"))==NULL)
	{
		printf("\n 此文件不存在,請先建立!");
		return NULL;
	}
    if((out=fopen("CodePrin.txt","w"))==NULL)
	{
		printf("\n 建立文件失敗!");		
	}
	ch=fgetc(in);
	while(ch!=EOF)
	{
		++i;
		putchar(ch);
        fprintf(out,"%c",ch);
		if(i==50)
		{
			printf("\n");
		    fputs("\n",out);
			i=0;
		}
        ch=fgetc(in);
	}
	fclose(out);
	fclose(in);
	return OK;
}
int TreePrinting (HuffmanTree HT,int n)
{
	FILE *out;
	int m;
	m=2*n-1;
    if(n==0)         //未建立哈夫曼樹  
	{  
        printf("請先建立哈夫曼樹!\n");  
        return NULL;  
	} 
	if((out=fopen("TreePrint.txt","w"))==NULL)//建立文件hfmTree.txt以存儲哈夫曼樹
	{
		printf("文件錯誤\n !");
	}
	printf("fuhao     num       weight    parent    lchild    rchild    \n");
    fputs("fuhao     num       weight    parent    lchild    rchild    \n",out);
	for(i=1;i<=m;i++)//將哈夫曼樹存入hfmTree.txt文件
	{
		
	    fprintf(out,"%-10c%-10d%-10d%-10d%-10d%-10d\n",HT[i].ch,HT[i].num,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild); 
		printf("%-10c%-10d%-10d%-10d%-10d%-10d\n",HT[i].ch,HT[i].num,HT[i].weight,HT[i].parent,HT[i].lchild,HT[i].rchild); 
	}
	fclose(out);
	return OK;
}

int Select(HuffmanTree HT,int n)
{
	int i,j,min1,min2;
    min1=32767;
	min2=32767;
	for(i=1;i<=n;i++)
	{
		if(HT[i].weight<min1 && HT[i].parent==NULL)
		{
			min1=HT[i].weight;
			S1=i;
		}
	}
	for(j=1;j<=n;j++)
	{
		if(HT[j].weight<min2 && HT[j].parent==NULL && j!=S1)
		{
			min2=HT[j].weight;
			S2=j;
		}
	}
	return OK;
}
	


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情免费视频| 欧美一区二区二区| 亚洲国产精华液网站w| 欧美军同video69gay| 91香蕉视频mp4| 亚洲精品写真福利| 欧美日韩在线直播| 美女高潮久久久| 久久综合国产精品| 大桥未久av一区二区三区中文| 欧美国产综合一区二区| 91色视频在线| 性欧美大战久久久久久久久| 日韩精品一区二区三区中文精品| 精品中文av资源站在线观看| 日本一区二区电影| 在线观看一区日韩| 久久精品国产久精国产| 国产精品免费人成网站| 欧美在线视频全部完| 美女在线观看视频一区二区| 中文欧美字幕免费| 欧美丝袜丝交足nylons| 国产专区欧美精品| 亚洲女同ⅹxx女同tv| 日韩欧美另类在线| 91在线看国产| 久久国产婷婷国产香蕉| 国产精品国模大尺度视频| 欧美电影一区二区三区| 国产a视频精品免费观看| 亚洲午夜久久久久久久久电影院| 久久夜色精品一区| 欧美系列亚洲系列| 国产精品99久久久久久久vr | 精品欧美黑人一区二区三区| 成人精品在线视频观看| 日韩av一二三| 亚洲免费资源在线播放| 精品va天堂亚洲国产| 在线观看日韩av先锋影音电影院| 国产一区久久久| 五月激情六月综合| 国产精品久久久久久福利一牛影视 | 久久久亚洲综合| 欧美亚洲综合一区| 成人性生交大片免费看中文| 蜜桃免费网站一区二区三区| 一区二区三区四区激情| 中文字幕精品一区二区三区精品 | 国产欧美一区二区精品仙草咪| 26uuu久久综合| 欧美性猛片xxxx免费看久爱| 国产曰批免费观看久久久| 亚洲一区在线看| 国产精品高清亚洲| 久久综合九色综合欧美亚洲| 在线播放日韩导航| 欧美性三三影院| 91香蕉视频污| 99精品国产热久久91蜜凸| 国产精品中文字幕日韩精品 | 国产成人在线视频播放| 免费观看在线综合| 日韩专区中文字幕一区二区| 亚洲福利视频一区| 亚洲一区在线电影| 亚洲美女屁股眼交| 亚洲天堂成人在线观看| 国产精品三级久久久久三级| 久久色视频免费观看| 777a∨成人精品桃花网| 激情欧美一区二区| 免费成人在线影院| 毛片一区二区三区| 日本视频免费一区| 日本免费在线视频不卡一不卡二| 五月天视频一区| 香蕉久久一区二区不卡无毒影院| 亚洲一区二区在线观看视频| 亚洲黄色免费电影| 亚洲国产欧美日韩另类综合| 一区二区三区四区国产精品| 亚洲国产精品一区二区久久| 亚洲国产日韩a在线播放性色| 亚洲高清免费在线| 首页综合国产亚洲丝袜| 奇米在线7777在线精品| 久久se这里有精品| 激情综合五月婷婷| 国产成人精品三级麻豆| 岛国精品在线观看| 在线亚洲高清视频| 69堂成人精品免费视频| 精品国产免费人成在线观看| 久久精品一区蜜桃臀影院| 国产日韩欧美亚洲| 夜夜操天天操亚洲| 亚洲午夜视频在线观看| 亚洲国产美女搞黄色| 午夜精品免费在线| 国内偷窥港台综合视频在线播放| 国产精品原创巨作av| 99久久精品99国产精品| 欧美日韩高清一区| 精品电影一区二区| 亚洲人成在线播放网站岛国 | www.日韩大片| 欧美无砖砖区免费| 精品美女被调教视频大全网站| 久久久欧美精品sm网站| 亚洲靠逼com| 免费人成在线不卡| 不卡av在线免费观看| 欧美男男青年gay1069videost | 国产在线精品一区二区| 激情图片小说一区| 色综合久久久久| 日韩欧美自拍偷拍| 中文字幕日本不卡| 蜜臀av一级做a爰片久久| 成人性色生活片| 欧美一区日本一区韩国一区| 国产精品久久久久aaaa樱花| 天天免费综合色| 暴力调教一区二区三区| 91麻豆精品国产无毒不卡在线观看| 久久久国产午夜精品| 亚洲一区欧美一区| 国产成人免费在线观看| 欧美一区二区三区免费视频 | 日韩av一级电影| 99久久99久久免费精品蜜臀| 精品少妇一区二区三区日产乱码| 一区二区三区欧美亚洲| 国产精品 欧美精品| 91精品国产91综合久久蜜臀| 国产成人精品三级麻豆| 欧美在线不卡视频| xfplay精品久久| 日韩精品每日更新| 色综合网色综合| 国产网站一区二区| 欧美aaaaaa午夜精品| 色88888久久久久久影院按摩| 国产三级精品在线| 久久国产免费看| 欧美日韩免费观看一区二区三区| 国产精品麻豆网站| 国产美女精品一区二区三区| 日韩视频免费直播| 亚洲激情男女视频| 波多野结衣在线一区| 国产欧美日韩视频一区二区| 加勒比av一区二区| 日韩欧美一级二级| 国产成人免费视频网站| 日韩欧美在线综合网| 日韩精品成人一区二区在线| 欧美日韩一区高清| 亚洲自拍另类综合| 欧美亚洲国产怡红院影院| 亚洲美女屁股眼交3| 日本大香伊一区二区三区| 亚洲精品国产a| 欧美在线你懂的| 亚洲第一搞黄网站| 欧美日韩精品福利| 免费观看久久久4p| 亚洲精品一区二区三区福利| 91精品国产手机| 一区二区三区中文在线观看| 在线免费不卡视频| 婷婷成人激情在线网| 这里只有精品视频在线观看| 午夜精品福利视频网站| 欧美亚洲禁片免费| 日韩欧美中文字幕一区| 久久av中文字幕片| 欧美成人一区二区三区在线观看 | 91蜜桃在线观看| 亚洲精品视频一区二区| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 麻豆视频一区二区| 欧美丰满美乳xxx高潮www| 麻豆久久一区二区| 精品国产不卡一区二区三区| 久久99精品久久久久久动态图| 日韩一区二区免费高清| 免费观看在线综合色| 欧美tickling挠脚心丨vk| 久久99国内精品| 日本一区免费视频| 91在线一区二区三区| 一区视频在线播放| 欧美日韩成人综合| 捆绑变态av一区二区三区 | 88在线观看91蜜桃国自产| 美女国产一区二区三区| 久久久久国产精品麻豆ai换脸|