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

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

?? haffman.txt

?? 數據結構課程設計:哈夫曼編碼、譯碼器(對文章進行編碼 再譯碼
?? TXT
字號:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 10000    //定義字符串最大長度
#define N 128        //定義葉子節點個數


typedef struct node              //定義哈夫曼樹節點結構體
{
int weight;
struct node *LChild,*RChild,*Parent; //分別指向該節點的左孩子,右孩子,和雙親節點
struct node *next;                    //指向建立的哈夫曼樹的下一個節點
}HFMNode,*HFMTree;


typedef struct                   //定義哈夫曼編碼的結構體
{
char ch;                      //存儲對應的字符
char code[N+1];                //存儲對應字符的編碼
int start;                     //存儲編碼的起始位置
}CodeNode;

int n;               //存儲真正葉子節點個數


void clearscreen()
{
system("cls");
}


void Open(char s[])               //打開存放字符或編碼的文件,將其存入字符串數組中
{
char name[10];
FILE *fp;
int i=0;
printf("請輸入要打開的文件名:");
gets(name);                               //要打開的文件名
if((fp=fopen(name,"rt"))==NULL)
   {
    printf("打開失敗!\n");             //若打開失敗,則直接退出
    exit(1);
   }
s[i++]=fgetc(fp);
while(s[i-1]!=EOF)
   s[i++]=fgetc(fp);
s[i]='\0';                           //存取字符串結束
fclose(fp);
}


void Save(char s[])                        //保存字符或編碼到文件中
{
char name[10];
FILE *fp;
printf("請輸入要保存的文件名:");
gets(name);
if((fp=fopen(name,"wt"))==NULL)
   {
    printf("存儲失敗!");
    exit(1);
   }
fputs(s,fp);
printf("\n保存成功,文件名為:%s。\n",name);
printf("\n按回車鍵繼續...");
getchar();
fclose(fp);

}



void SearchStr(char s[],char str[],int count[]) 
{
//查找字符串中字符的個數和每個字符出現的次數
int i,j,k=0;
for(i=0;i<N;i++)    //初始化每個字符出現的次數
   count[i]=0;
for(i=0;s[i];i++)
   {
    for(j=0;j<k;j++)            //在str[]中查找是否有該字符
     if(str[j]==s[i])
      {
       count[j]++;
       break;
      }
    if(j==k)                     //在str[]中無該字符,將其存入最后一個單元
     {
      str[k]=s[i];
      count[k++]++;
     }
   }
str[k]='\0';                  //將字符串結尾置\0
n=k;                            //將實際的字符個數作為葉子節點個數存入n
}

void SelectMin(HFMTree HT,int k,HFMTree *HT1,HFMTree *HT2)
{
//查找哈夫曼鏈表中兩個權值最小的節點
int i,min;
HFMTree p;
min=32767;
for(i=0,p=HT;i<k;i++,p=p->next)
   if(p->weight<min&&p->Parent==0)
    {
     min=p->weight;
     *HT1=p;
    }
min=32767;
for(i=0,p=HT;i<k;i++,p=p->next)
   if(p->weight<min&&p->Parent==0&&p!=*HT1) //令第二個最小的節點不等于第一個節點
    {
     min=p->weight;
     *HT2=p;
    }

}


void CreatHFMTree(HFMTree *HT,int count[])
{
//創建哈夫曼樹
int i;
HFMTree p,HT1,HT2;   //HT1,HT2分別存放權值最小和次小的節點的位置
p=*HT=(HFMTree)malloc(sizeof(HFMNode));
p->next=p->LChild=p->RChild=p->Parent=NULL; //初始化哈夫曼鏈表且有2n-1個節點
for(i=1;i<2*n-1;i++)
   {
    p->next=(HFMTree)malloc(sizeof(HFMNode));
    p=p->next;
    p->next=p->LChild=p->RChild=p->Parent=NULL;
   }

for(i=0,p=*HT;i<n;i++)                //將各個字符出現的次數作為權值
{                               //存入哈夫曼鏈表的前n個單元中
    p->weight=count[i];
    p=p->next;
   }

for(i=n;i<2*n-1;i++)                 //將后n-1個節點賦權值,建樹
   {
    SelectMin(*HT,i,&HT1,&HT2); //每次從前i個節點中選取權值最小的兩個節點
    HT1->Parent=HT2->Parent=p;    
    p->LChild=HT1;
    p->RChild=HT2;
    p->weight=HT1->weight+HT2->weight; //將兩個節點的權值相加存入最后一個節點中
    p=p->next;                            //p指向下一個沒有存儲權值的節點
   }

}


void HFMCode(HFMTree HT,CodeNode HC[],char str[])
{
//從每個葉子節點開始,利用哈夫曼樹對每個字符進行編碼,最終建立一個哈夫曼表
int i;
HFMTree q,p=HT;
for(i=0;i<n;i++)             //將字符存入哈夫曼編碼結構體數組的字符單元中
   {
    HC[i].ch=str[i];
    HC[i].code[n-1]='\0'; //初始化編碼的最后一位
   }
for(i=0;i<n;i++)
   {
    HC[i].start=n-1;
    for(q=p;q->Parent;q=q->Parent)   //判斷q所指向的節點,左孩子置0,右孩子置1
     if(q==q->Parent->LChild)
      HC[i].code[--HC[i].start]='0';
     else HC[i].code[--HC[i].start]='1';
    p=p->next;                   //判斷下一個葉子節點
   }


}


void TotalCoding(char s[],CodeNode HC[],char code[])
{
//利用哈夫曼編碼表對整個字符串進行編碼
int i,j;
code[0]='\0';            //編碼數組初始化
for(i=0;s[i];i++)                 //將每個字符在哈夫曼編碼表中對應的編碼存入存放總編碼的數組中
   for(j=0;j<n;j++)
   if(s[i]==HC[j].ch)
    strcpy(code+strlen(code),HC[j].code+HC[j].start);
}

void DeCoding(char code[],HFMTree HT,char str[],char s[])
{
//對哈夫曼編碼進行解碼,放入字符串s中
int i,j,k=0;
HFMTree root,p,q;
for(root=HT;root->Parent;root=root->Parent); //用root指向哈夫曼樹的根結點
for(i=0,p=root;code[i];i++)            //從根結點開始按編碼順序訪問樹
{                                      
    if(code[i]=='0')
     p=p->LChild;
    else p=p->RChild;
    if(p->LChild==NULL&&p->RChild==NULL) //到根節點時將該節點對應的字符輸出
     {
      for(j=0,q=HT;q!=p;q=q->next,j++);
       s[k++]=str[j];
      p=root;                  //回溯到根結點
     } 
   }
s[k]='\0';                //解碼完畢,在字符串最后一個單元存入'\0'
}


void Coding(char s[],char str[],char code[],int count[],HFMTree *HT,CodeNode HC[])
{
clearscreen();
printf("\n打開存放字符串的文件...\n\n");
Open(s);                    //打開源碼文件
SearchStr(s,str,count); //查找字符串中不同的字符及其出現的次數
CreatHFMTree(HT,count); //用每個字符出現的次數作為葉子節點的權值建立哈夫曼樹
HFMCode(*HT,HC,str);      //利用哈夫曼樹對每個葉子節點進行編碼,存入編碼表中
TotalCoding(s,HC,code); //利用編碼表對字符串進行最終編碼
printf("\n讀入的字符串為:\n");
puts(s);
printf("\n最終的哈夫曼編碼是:\n");
puts(code);
printf("\n保存編碼,");
Save(code);                 //保存最終的哈夫曼編碼
}


void TransCode(char code[],char str[],char ss[],HFMTree *HT,CodeNode HC[])
{
clearscreen();
printf("\n打開編碼的文件...\n\n");
Open(code);                           //打開編碼文件
DeCoding(code,*HT,str,ss); //將編碼進行解碼存入字符串數組ss[]中
printf("\n得到的最終字符串為:\n");
puts(ss);
printf("\n保存譯碼,");
Save(ss);                        //保存譯碼后的字符串
}

void main()
{
//主函數
char s[M],ss[M];         //定義字符串數組,s[]存放將要編碼的字符串,ss[]存解碼后的字符串
char str[N];             //存放輸入的字符串中n個不同的字符
int count[N];            //存放n個不同字符對應的在原字符串中出現的次數
char code[M];            //存放最終編碼完成后的編碼
char choice;
HFMTree HT;              //定義一個哈夫曼樹的鏈表
CodeNode HC[N];          //定義一個哈夫曼編碼表的數組,存放每個字符對應的哈夫曼編碼
do
{
   clearscreen();
   printf("\n\n");
   printf("                       ************哈夫曼樹************\n");
   printf("                       **                            **\n");
   printf("                       **        1.編碼。            **\n");
   printf("                       **        2.譯碼。            **\n");
   printf("                       **        0.退出。            **\n");
   printf("                       **                            **\n");
   printf("                       **                            **\n");
   printf("                       **                            **\n");
   printf("                       ** 請輸入相應操作的序號(0-2) **\n");
   printf("                       ********************************\n");
   scanf("%c",&choice);
   getchar();
   switch(choice)
   {
    case '1': Coding(s,str,code,count,&HT,HC);break; //對字符串進行編碼
    case '2': TransCode(code,str,ss,&HT,HC);break; //對編碼進行解碼
    case '0': break;
    default : printf(" 輸入錯誤!請重新輸入!\n");
   }
}while(choice!='0');

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩国产在线一| 亚洲综合丁香婷婷六月香| 成人综合婷婷国产精品久久 | 欧美日韩高清一区| 国产精品1区2区| 亚洲6080在线| 亚洲图片激情小说| 亚洲精品在线网站| 欧美人xxxx| 一本色道a无线码一区v| 国产精品一卡二卡在线观看| 午夜成人免费电影| 亚洲蜜臀av乱码久久精品蜜桃| 精品国产伦一区二区三区观看体验| 日本国产一区二区| 福利电影一区二区三区| 看片网站欧美日韩| 亚洲bt欧美bt精品777| 亚洲男人电影天堂| 亚洲国产经典视频| 久久综合九色综合欧美98| 欧美二区三区91| 91黄色激情网站| jizzjizzjizz欧美| 国产精品乡下勾搭老头1| 裸体健美xxxx欧美裸体表演| 亚洲欧美怡红院| 久久九九影视网| 欧美不卡一区二区三区| 91精品国产高清一区二区三区 | 久久婷婷久久一区二区三区| 欧美一级国产精品| 欧美日本在线看| 欧美日韩中文国产| 欧美性生活久久| 色美美综合视频| 91美女在线看| 色婷婷久久久久swag精品| caoporn国产精品| 99国产精品久久久久久久久久久| 国产99一区视频免费| 大美女一区二区三区| 国产成人av电影在线播放| 国产成人av资源| 丁香激情综合国产| 成人国产精品免费观看动漫| 不卡视频一二三四| 99re这里都是精品| 久久午夜羞羞影院免费观看| 一本大道久久a久久综合| jlzzjlzz国产精品久久| aaa欧美日韩| 91黄视频在线观看| 在线观看日韩电影| 欧美高清视频在线高清观看mv色露露十八 | 精品视频色一区| 欧美日韩国产首页在线观看| 日韩一区二区三区在线视频| 欧美mv日韩mv| 欧美国产综合一区二区| 中文字幕日韩av资源站| 有坂深雪av一区二区精品| 亚洲国产aⅴ天堂久久| 日韩在线播放一区二区| 黑人巨大精品欧美黑白配亚洲| 国产91精品一区二区麻豆网站| 久久综合色天天久久综合图片| 2021中文字幕一区亚洲| 国产精品免费人成网站| av成人老司机| 国产传媒欧美日韩成人| 91啪亚洲精品| 精品视频在线看| 久久亚洲捆绑美女| 综合欧美亚洲日本| 日韩精品亚洲一区二区三区免费| 国产一区二区三区在线观看精品| 91天堂素人约啪| 日韩一区二区三区高清免费看看| 中文字幕免费观看一区| 午夜不卡在线视频| 国产福利一区二区三区视频在线| 一本久久精品一区二区| 欧美成人精品1314www| 亚洲欧美在线视频观看| 秋霞午夜鲁丝一区二区老狼| www.日韩av| 日韩欧美一级在线播放| 亚洲欧美日韩精品久久久久| 麻豆国产精品一区二区三区| 91猫先生在线| 久久品道一品道久久精品| 一区二区三区免费| 国产精品白丝jk黑袜喷水| 欧美视频三区在线播放| 国产精品欧美久久久久无广告 | 美女视频免费一区| av激情综合网| 日韩欧美国产一区二区三区| 中文字幕在线一区二区三区| 久久精品国内一区二区三区| 欧美在线不卡一区| 国产精品午夜在线观看| 久久99久久99| 精品视频999| 日韩美女啊v在线免费观看| 久久精品久久精品| 欧美日韩不卡在线| 亚洲欧美一区二区在线观看| 国产在线视频一区二区三区| 91精品国产综合久久精品麻豆| 亚洲欧美另类久久久精品2019| 国产精品1区2区3区在线观看| 日韩一区二区在线看| 亚洲国产另类精品专区| 91原创在线视频| 国产精品色噜噜| 国产成人一区在线| 亚洲精品一区二区三区四区高清 | 欧美麻豆精品久久久久久| 亚洲视频在线一区| 丁香激情综合国产| 久久久精品综合| 久久99九九99精品| 日韩精品一区二区三区视频| 日韩成人一区二区| 欧美日韩精品三区| 亚洲福利一区二区三区| 在线观看日韩国产| 亚洲永久精品大片| 色爱区综合激月婷婷| 亚洲欧美二区三区| 在线一区二区三区四区五区| 亚洲四区在线观看| 91麻豆产精品久久久久久| 亚洲欧美日韩精品久久久久| 99视频精品全部免费在线| 国产精品久久看| 成人高清免费观看| 久久天天做天天爱综合色| 国产一区二区三区免费| 久久精品一区八戒影视| 懂色av一区二区三区免费观看| 日本一区二区三区免费乱视频| 成人h动漫精品| ...xxx性欧美| 欧洲另类一二三四区| 午夜精品久久久久久久蜜桃app| 在线成人午夜影院| 免费观看30秒视频久久| 精品国产123| 国产成人在线视频网址| 国产精品国产成人国产三级| 一本大道久久a久久精二百| 午夜影院在线观看欧美| 日韩一区二区三区四区| 国产一区二区不卡| 国产精品福利影院| 欧美少妇bbb| 精品无人区卡一卡二卡三乱码免费卡 | 美女在线视频一区| 久久久亚洲精华液精华液精华液| 成人免费看黄yyy456| 亚洲精品va在线观看| 91精品国产乱| 国产成人av网站| 国产美女精品在线| 亚洲三级免费电影| 91 com成人网| 国产成人啪免费观看软件| 亚洲日本欧美天堂| 欧美美女喷水视频| 国产传媒一区在线| 亚洲成在人线在线播放| 精品国产成人在线影院| 99久久久精品| 青青草一区二区三区| 国产精品久久久久影院色老大| 欧美日韩一区二区三区高清| 国产一区 二区 三区一级| 一区二区三区四区中文字幕| 日韩午夜av一区| 91在线播放网址| 九九**精品视频免费播放| 1024成人网| 精品久久国产字幕高潮| 色综合天天综合在线视频| 蓝色福利精品导航| 亚洲精品欧美二区三区中文字幕| 精品日韩在线观看| 欧洲色大大久久| 高清成人在线观看| 免费观看久久久4p| 亚洲一区二区av在线| 国产免费久久精品| 日韩欧美一区二区视频| 日本电影欧美片| 国产iv一区二区三区| 美国毛片一区二区三区| 亚洲激情男女视频|