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

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

?? 哈夫曼算法.c

?? 經典數據結構編程
?? C
字號:
#include<stdio.h> 
#include<malloc.h> 
#include<conio.h> 
#include<stdlib.h> 
#include<string.h> 

/*聲明兩種鏈表結構----start*/ 
struct node_a{  /*鏈表1-----作用:用來統計文件中字符的個數和種類(通過count)*/ 
 char data; 
 int count; 
 struct node_a *next; 
 }; 
typedef struct node_a node,*list; 
list head=NULL; 

struct nodeb{  /*鏈表2-----作用:用來建立用相應的編碼代替字符的新文件*/ 
 char data; 
 struct nodeb *next; 
}; 
typedef struct nodeb node_b,*list_b;  /*jiang bianma xieru wenjian*/ 
list_b head_b=NULL; 
/*聲明兩種鏈表結構----end*/ 

/*哈夫曼算法種相關的3種結構的聲明-----start*/ 
struct forest{   
 float weight; 
 int root; 
 }; 
struct alphabet{ 
 char symbol; 
 float probability; 
 int leaf; 
 char *bianma;       
 }; 
struct tree{ 
 int lchild; 
 int rchild; 
 int parent; 
 }; 
typedef struct tree *tree_ptr,tree_node; 
typedef struct forest *forest_ptr,forest_node; 
typedef struct alphabet *alphabet_ptr,alphabet_node; 
tree_ptr tree1; 
forest_ptr forest1; 
alphabet_ptr alphabet1; 
int lasttree,lastnode; 
int least,second; 
/*哈夫曼算法種相關的3種結構的聲明-----end*/ 

/**************stack difination start****************/ 
struct stacknode{ 
  char *bian_ma; 
  struct stacknode *next; 
  }; 
typedef struct stacknode stack_node; 
typedef stack_node *link; 
link top=NULL; 

void push(char *item){ 
 link p; 
 if(top!=NULL){ 
   p=(link)malloc(sizeof(stack_node)); 
   if(p==NULL){ 
    printf("Memory allocation error!"); 
    return; 
    } 
   p->bian_ma=item; 
   p->next=top; 
   top=p; 
  } 
  else{ 
    top=(link)malloc(sizeof(stack_node)); 
    if(!top){ 
     printf("Memory allocation error!"); 
     return; 
     } 
    top->bian_ma=item; 
    top->next=NULL; 
  } 
 } 

void pop(void){ 
  link p; 
  p=top; 
  top=top->next; 
  free(p); 
 } 

void makenull(void){ 
  while(top!=NULL) 
   pop(); 
} 

int empty(){ 
  if(top==NULL) 
  return 1; 
  else 
  return 0; 
  } 

char* tops(void){ 
   return (top->bian_ma); 
} 

void display_stack(link s){ /*顯示棧重的內容*/ 
 link ptr; 
 ptr=s; 
 while(ptr!=NULL){ 
  printf("%s",ptr->bian_ma); 
  ptr=ptr->next; 
  } 
 } 

  /***************************stack__difination is end************************/ 
void display(list h){ /*顯示鏈表1*/ 
list ptr; 
int i=1; 
ptr=h->next; 
while(ptr!=NULL){ 
 printf("%d,%c,%d\n",i,ptr->data,ptr->count); 
 i++; 
 ptr=ptr->next; 
 } 
} 
void display_b(list_b h){  /*顯示鏈表2*/ 
list_b ptr; 
int i=1; 
ptr=h->next; 
while(ptr!=NULL){ 
 printf("%d,%c\n",i,ptr->data); 
 i++; 
 ptr=ptr->next; 
 } 
} 

void insert(char item){  /*用于插入元素以建立鏈表1*/ 
 list temp,ptr; 
 int flag; 
 ptr=head->next; 
 if(ptr==NULL){ 
head->next=(list)malloc(sizeof(node)); 
   head->next->data=item; 
   head->next->count=1; 
   head->next->next=NULL; 
   } 
 else{ 
    while(ptr!=NULL){ 
     if(ptr->data==item){ 
     ptr->count=ptr->count+1; 
     flag=1; 
     } 
    ptr=ptr->next; 
        } 
   ptr=head; 
   if(flag==1) 
     return; 
   else{ 
     temp=ptr->next; 
     ptr->next=(list)malloc(sizeof(node)); 
     ptr->next->data=item; 
     ptr->next->count=1; 
     ptr->next->next=temp; 
   } 
 } 
} 

void insert_b(char item){  /*插入元素以建立鏈表2*/ 
  list_b ptr_b, temp_b; 
  ptr_b=head_b; 
  if(ptr_b->next==NULL){ 
    head_b->next=(list_b)malloc(sizeof(node_b)); 
    head_b->next->data=item; 
    head_b->next->next=NULL; 
    } 
  else{ 
    while(ptr_b->next!=NULL){ 
  ptr_b=ptr_b->next; 
  } 
    ptr_b->next=(list_b)malloc(sizeof(node_b)); 
    ptr_b->next->data=item; 
    ptr_b->next->next=NULL; 
    } 
} 

void search(void){ /*搜索文件并將文件中的數據分別存入作用不同的鏈表中*/ 
 FILE *fp; 
 list ptr; 
 char ch; 
 if((fp=fopen("test.txt","r"))==NULL) 
   printf("Reading error!\n"); 
 while(!feof(fp)){ 
   ch=getc(fp); 
   if(ferror(fp)){ 
     printf("error!\n"); 
     break; 
     } 
   if(ch==EOF) 
    break; 
   insert(ch);   /*插入元素進鏈表1*/ 
   insert_b(ch); /*插入元素進鏈表2*/ 
   } 
 printf("\n"); 
 fclose(fp); 
} 

void display_struct(int n){ /*顯示哈夫曼算法中的3個結構樹組 */ 
int i=0; 
printf("\n\n=======================================\n\n"); 
printf("FOREST_STRUCT_ARRY :\n\n\n"); 
for(i=0;i<=n;i++){ 
printf("%f,%d\n",forest1[i].weight,forest1[i].root); 
} 
getch(); 
printf("\n\nALPHABET_STRUCT_ARRY :\n\n\n"); 
for(i=0;i<=n;i++){ 
 printf("%f,%d,%c\n",alphabet1[i].probability,alphabet1[i].leaf,alphabet1[i].symbol); 
} 
getch(); 
printf("\n\nTREE_STRUCT_ARRY :\n\n\n"); 
for(i=0;i<=2*n-1;i++) 
printf("%d,%d,%d\n",tree1[i].lchild,tree1[i].rchild,tree1[i].parent); 
printf("\n\n======================================\n\n"); 
getch(); 
} 

int init_struct(void){  /*初始化哈夫曼算法中3種結構數組*/ 
list ptr; 
float count=.0; 
int i=1,n=0; 
ptr=head->next; 
while(ptr!=NULL){ 
 count=ptr->count+count; 
 n++; 
 ptr=ptr->next; 
 } 
ptr=head->next; 
forest1=(forest_ptr)malloc(sizeof(forest_node)*n+sizeof(forest_node)); 
alphabet1=(alphabet_ptr)malloc(sizeof(alphabet_node)*n+sizeof(alphabet_node)); 
tree1=(tree_ptr)malloc(sizeof(tree_node)*n*2-sizeof(tree_node)); 
forest1[0].weight=alphabet1[0].probability=0.0; 
forest1[0].root=alphabet1[0].leaf=0; 
alphabet1[0].symbol='0'; 
while(ptr!=NULL){ 
 forest1[i].weight=alphabet1[i].probability=ptr->count/count; 
 forest1[i].root=alphabet1[i].leaf=i; 
 alphabet1[i].symbol=ptr->data; 
 i++; 
 ptr=ptr->next; 
} 
for(i=0;i<=2*n-1;i++){ 
 tree1[i].lchild=0; 
 tree1[i].rchild=0; 
 tree1[i].parent=0; 
 } 
return n; 
} 

void creat(void){      /*創建正文文件test.txt*/ 
 FILE *fp,*out; 
 char ch; 
 if((fp=fopen("test.txt","r++"))==NULL) 
   printf("Creat error!\n"); 
 printf("Input the data:\n"); 
 ch=getch(); 
 putch(ch); 
 while(ch!='#'){ 
   putc(ch,fp); 
   ch=getch(); 
   putch(ch); 
   } 
   fclose(fp); 
 } 

void creat_bianma(int number){  /*根據哈夫曼算法建立文件中各種字符對應的編碼*/ 
 int i,j,n; 
 int p; 
 char *bm=malloc(sizeof(char)*number); 
 for(n=1;n<=number;n++){ 
    j=i=n; 
    makenull(); 
    p=tree1[i].parent; 
    while(tree1[p].parent!=0){ 
if(tree1[p].lchild==i) 
     push("0"); 
 else 
     push("1"); 
i=p; 
p=tree1[p].parent; 
      } 

    if(tree1[p].lchild==i) 
 push("0"); 
    else 
 push("1"); 
    strcpy(bm," "); /*目的:使創建編碼文件中的各編碼中間存在間隔*/ 
    while(!empty()){ 
strcat(bm,tops()); 
pop(); 
} 
     alphabet1[j].bianma=malloc(sizeof(char)*number); 
     strcpy(alphabet1[j].bianma,bm); 
     printf("\n%c:%s",alphabet1[j].symbol,alphabet1[j].bianma); /*打印出相應的編碼*/ 
     getch(); 
    } 
 } 


void write_new_file(int number){ /*根據相應的編碼重新建立編碼文件*/ 
  FILE *fp; 
  list_b ptr; 
  int i; 
  char *ch=malloc(sizeof(char)*number); 
  ptr=head_b->next; 
  if((fp=fopen("bianma.txt","w"))==NULL) 
    printf("Write in a new file error!"); 
  else{ 
    while(ptr!=NULL){ 
      for(i=1;i<=number;i++){ 
if(ptr->data==alphabet1[i].symbol){ 
   strcpy(ch,alphabet1[i].bianma); 
   fputs(ch,fp); 
   } 
} 
      ptr=ptr->next; 
    } 
  } 
  fclose(fp); 
} 


void main(void){ 
int i,num; 
char ch; 
void huffman(void); 
void lightones(); 
head=(list)malloc(sizeof(node)); 
head->next=NULL; 
head->data='\0'; 
head->count=0; 
head_b=(list_b)malloc(sizeof(node_b)); 
head_b->data='\0'; 
head_b->next=NULL; 
do{ 
  system("cls"); 
  creat(); 
  search(); 
  printf("\nlianbiao1:\n"); 
  display(head);/*顯示鏈表1*/ 
  getch(); 
  printf("\nlianbiao2:\n"); 
  display_b(head_b); 
  getch(); 
  num=init_struct(); 
  printf("\n"); 
  printf("The 3 init_struct of huffman?\n"); 
  display_struct(num);/*顯示初始化的哈夫曼書的相關3個結構數組*/ 
  lastnode=num; 
  lasttree=num; 
  huffman(); 
  printf("Now the 3 struct through huffman shuanfa\n"); 
  display_struct(num);/*顯示哈夫曼樹中相關的3種結構(經過哈夫曼算法處理)*/ 
  printf("\nThe bian_ma is:\n"); 
  creat_bianma(num); 
  write_new_file(num); 
  printf("\nDo you want to re_try(y/n)?"); 
  ch=getchar(); 
  }while(ch=='y'); 
  } 

/*哈夫曼算法-----defination_start*/ 
void lightones(void){ 
 int i; 
 if(forest1[1].weight<=forest1[2].weight){ 
    least=1; 
    second=2; 
    } 
 else{ 
    least=2; 
    second=1; 
    } 
 for(i=3;i<=lasttree;i++) 
   if(forest1[i].weight<forest1[least].weight){ 
second=least; 
least=i; 
} 
   else 
if(forest1[i].weight<forest1[second].weight) 
 second=i; 
} 

int creat_tree(int lefttree,int righttree){ 
  lastnode=lastnode+1; 
  tree1[lastnode].lchild=forest1[lefttree].root; 
  tree1[lastnode].rchild=forest1[righttree].root; 
  tree1[lastnode].parent=0; 
  tree1[forest1[lefttree].root].parent=lastnode; 
  tree1[forest1[righttree].root].parent=lastnode; 
  return(lastnode); 
} 

void huffman(void){ 
  int i,j; 
  int newroot; 
  while(lasttree>1){ 
    lightones(); 
    i=least; 
    j=second; 
    newroot=creat_tree(i,j); 
    forest1[i].weight=forest1[i].weight+forest1[j].weight; 
    forest1[i].root=newroot; 
    forest1[j]=forest1[lasttree]; 
    lasttree=lasttree-1; 
    } 
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美在线高清| 欧美成人a∨高清免费观看| 成人a级免费电影| 欧美自拍偷拍一区| 亚洲一区二区免费视频| 韩日精品视频一区| 国产三级欧美三级日产三级99 | 欧美一级片在线| 国产欧美日韩综合精品一区二区| 亚洲精品高清在线观看| 色八戒一区二区三区| 2020国产精品自拍| 国产成人亚洲精品青草天美| 欧美国产日韩在线观看| 99精品久久久久久| 亚洲午夜羞羞片| 日韩一区二区电影网| 国产精品一区二区久激情瑜伽| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 老司机精品视频在线| 精品日韩成人av| jizzjizzjizz欧美| 亚洲午夜激情av| 日韩欧美电影一区| 一区二区三区自拍| 5566中文字幕一区二区电影| 国产盗摄一区二区三区| 777欧美精品| 成熟亚洲日本毛茸茸凸凹| 亚洲人精品一区| 欧美一区二区三区在线电影| 国产福利91精品一区| 26uuu久久天堂性欧美| 99久久久久免费精品国产| 亚洲成人第一页| 日本道免费精品一区二区三区| 日本怡春院一区二区| 国产精品传媒入口麻豆| 国产成人午夜视频| 欧美高清在线精品一区| 欧美日韩一本到| 成人网男人的天堂| 久久精品久久精品| 一区二区三区欧美| 欧美一区二区三区免费在线看| 亚洲不卡av一区二区三区| 欧美制服丝袜第一页| 狠狠色狠狠色综合| 亚洲精品在线三区| 欧美性一二三区| 成人av电影免费观看| 亚洲精品乱码久久久久久日本蜜臀| 97久久精品人人做人人爽| 亚洲欧美色一区| 久久亚洲精品小早川怜子| 国产精品99久久久| 美腿丝袜亚洲一区| 精品国产一二三| 欧美无人高清视频在线观看| 99精品国产99久久久久久白柏| 亚洲日本在线看| 久久精品一区二区| 日韩三级av在线播放| 国产露脸91国语对白| 日韩黄色免费网站| 亚洲综合色丁香婷婷六月图片| 国产精品入口麻豆九色| 精品国产乱码久久久久久浪潮| 国产福利一区二区| 亚洲男女一区二区三区| 中文字幕第一区| 在线免费观看日韩欧美| 不卡的av中国片| 亚洲国产成人av网| 亚洲最新视频在线观看| 欧美电影免费观看高清完整版| 欧美另类高清zo欧美| 国产精品资源网| 亚洲精品国产成人久久av盗摄| 国产精品国产三级国产aⅴ中文| 久久精品一二三| 精品国产污网站| 精品国产乱码久久久久久影片| 成人一区二区三区视频| 国产成人在线网站| 国产成a人亚洲| 亚洲综合一区二区| 精品国产乱码久久久久久闺蜜 | 1024亚洲合集| 欧美精品 日韩| 欧美电影影音先锋| 日韩欧美一区二区不卡| 91在线观看地址| 久久av资源站| 精品一区二区三区影院在线午夜| 精品无码三级在线观看视频 | 夜夜亚洲天天久久| 一区二区三区在线视频免费 | 亚洲视频一区在线| 一区二区三区视频在线看| 亚洲一区二区三区三| 五月天久久比比资源色| 久久精品99国产精品日本| 国产最新精品精品你懂的| 亚洲午夜久久久久久久久电影院| 视频一区在线播放| 黄色资源网久久资源365| 亚洲成人激情社区| 久久99精品久久久久久国产越南 | 2017欧美狠狠色| 中文字幕一区二区三区四区不卡 | 国产自产视频一区二区三区| 成人性生交大片免费看中文 | 日韩欧美高清在线| 中文字幕+乱码+中文字幕一区| 亚洲人成在线播放网站岛国| 亚洲高清视频在线| 国产一区二区剧情av在线| 午夜久久电影网| 国产自产高清不卡| 美日韩一区二区| 99久久婷婷国产精品综合| 成人免费看黄yyy456| 欧美在线三级电影| 精品区一区二区| 伊人夜夜躁av伊人久久| 亚洲天堂免费看| 日韩伦理av电影| 一区在线观看视频| 麻豆专区一区二区三区四区五区| 国产成人午夜精品5599| 欧美少妇bbb| 欧美激情一二三区| 中文字幕 久热精品 视频在线| 午夜精品久久久久| 亚洲成av人片在线| av在线播放成人| 色素色在线综合| 欧洲亚洲国产日韩| 日韩美女主播在线视频一区二区三区 | 国产夜色精品一区二区av| 亚洲国产视频一区二区| 在线欧美小视频| 欧洲av在线精品| 久久久亚洲午夜电影| 国产日产欧美精品一区二区三区| 亚洲www啪成人一区二区麻豆| 日本成人超碰在线观看| 久久精品久久综合| 欧美精品在线视频| 亚洲综合成人在线| 强制捆绑调教一区二区| 在线观看视频一区二区欧美日韩| 在线观看亚洲精品视频| 91精品黄色片免费大全| 欧美成人精精品一区二区频| 日本一区二区三区电影| 免费av成人在线| 成人深夜在线观看| 色久综合一二码| 欧美成人一区二区三区在线观看| 亚洲国产人成综合网站| 久久激情综合网| 成人精品鲁一区一区二区| 色av综合在线| 精品久久一二三区| 久久精品国产免费| 日韩视频中午一区| 国产精品二三区| 日本三级亚洲精品| 盗摄精品av一区二区三区| 91久久久免费一区二区| 樱桃国产成人精品视频| 久久97超碰国产精品超碰| 欧美一区二区三区不卡| 国产精品私人影院| 日本最新不卡在线| 欧美一区二区三区爱爱| 日本欧美久久久久免费播放网| 欧美精品v国产精品v日韩精品| 欧美韩日一区二区三区| 首页国产欧美日韩丝袜| 欧美精品色综合| 蜜臀av性久久久久蜜臀aⅴ| 日韩三级中文字幕| 国产成人在线观看免费网站| 欧美视频三区在线播放| 中文字幕精品一区二区三区精品| 成人午夜精品在线| 精品国产一区二区亚洲人成毛片| 国产精品久久久久久久久搜平片 | 欧美tickling挠脚心丨vk| 免费成人美女在线观看.| 国产一区二区精品在线观看| 久久网站热最新地址| 亚洲成人7777| 91丨九色丨国产丨porny| 一区二区三区四区激情 | 日韩综合在线视频| 成人高清av在线|