تبلیغات
دانلود سورس پروژه های مختلف برنامه نویسی، آموزش برنامه نویسی - الگوریتم فشرده سازی و کدگذاری هافمن (Huffman)
دانلود سورس پروژه های مختلف برنامه نویسی، آموزش برنامه نویسی
دانلود رایگان سورس پروژه
سایت برنامه نویسی تک کدر takcoder.ir


آموزش برنامه نویسی با استفاده از نوین ترین روش و ارائه پروژه های نمونه و مجموعه عظیم سورس کدهای آماده برای شما دوستان

مدیر سایت : Yahya Taherzadeh
نویسندگان
نظرسنجی
زبان برنامه نویسی مورد علاقه شما؟






به در خواست یکی از دوستان الگوریتم پیچیده و کارآمد کد گذاری هافمن به زبان سی پلاس پلاس رو میزارم که برای درس طراحی الگورتم نوشته بودم.
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>

struct treenode{
       int data;
       int num;
       treenode *next;
       treenode *right;
       treenode *left;
}*start=NULL,*end=NULL,*p;

struct code{
       char bcode[12];
       int ch;
}coding[256];

struct tree{
        int data;
        int num;
        }atree[512];

int o=0;

int search(int i);
void insert(int i);
void insertm(struct treenode *l);
void sort();
void create();
void binary(struct treenode *n,char byte[],int i);
int searchc(int i);
void write();
void read();
void tree(struct treenode *n,int i);
int numnode=0;
int numchar=0;
char filename[25];

void main()
{
 //clrscr();
 FILE *fp1,*fp2;

 cout<<"\n Enter The Location And Name Of The Source File To Compress : ";
 cin>>filename;
 fp1=fopen(filename,"r+b");
 if (fp1==NULL)
    {
       cout<<"\n Error In Open File...";
       getch();
       exit(1);
    }
  int i=getc(fp1);
  while (i!=-1)
  {
   numchar++;
   if (search(i)==-1)
      insert(i);
   i=getc(fp1);
  }
  fclose(fp1);
  sort();
  create();
  char byte[20]={0};
  binary(start,byte,0);
  tree(start,1);
  write();
  cout<<"\n\nComplete Succssfuly Coding To Code.txt\n";
  read();
  cout<<"Complete Succssfuly Encoding To Decode.txt";
  getch();
}
//*************************search******************************
int search(int i)
{
 struct treenode *h;
 h=start;
 while(h)
 {
  if (h->data==i)
  {
   h->num=h->num+1;
   return 0;
  }
  h=h->next;
 }
 return -1;
}
//**************************insert******************************
void insert(int i)
{
 p=new treenode;
 p->data=i;
 p->num=1;
 p->right=p->left=p->next=NULL;
 if (start==NULL)
 {
     start=p;
     end=p;
 }
 else
 {
     end->next=p;
     end=p;
 } }
//******************************Sort*******************
void sort()
{
 struct treenode *h1,*h2,*n2,*right,*left;
 int d,n;
 n2=start;
 while(n2)
 { h1=start;
   h2=start->next;
  while(h2)
  {
    if (h1->num > h2->num)
    {
      d=h1->data;
      n=h1->num;
      right=h1->right;
      left=h1->left;
      h1->data=h2->data;
      h1->num=h2->num;
      h1->right=h2->right;
      h1->left=h2->left;
      h2->data=d;
      h2->num=n;
      h2->right=right;
      h2->left=left;
    }
     h1=h2;
     h2=h2->next;
    }
     n2=n2->next;
 } }
//****************Create*******************************
void create()
{
  struct treenode *h;
  while (start->next)
  {
   int i1,i2;
   p=new treenode;
   p->left=start;
   p->right=start->next;
   p->num=start->num+start->next->num;
   p->data=-1;
   p->next=NULL;
   h=start;
   start=start->next->next;
   h->next->next=NULL;
   h->next=NULL;
   insertm(p);
   sort();
  }}
//********************Insertm****************************
void insertm(struct treenode *l)
{
 if (start==NULL)
 {
     start=l;
     end=l;
 }
 else
 {
     end->next=l;
     end=l;
 } }
//********************Binary****************************
void binary(struct treenode *n,char byte[],int i)
{
 if (n->data==-1)
    {
      char b1[20]={0},b2[20]={0};
      strcpy(b1,byte);
      strcpy(b2,byte);
      b1[i]='1';
      binary(n->right,b1,i+1);
      b2[i]='0';
      binary(n->left,b2,i+1);
     }
   else
     {
       cout<<"Char :"<<(char)n->data<<" Byte : "<<byte<<"\n";
       strcpy(coding[o].bcode,byte);
       coding[o++].ch=n->data;
     }
}
//*********************Coding*******************************
void write()
{
  FILE *fp1,*fp2;
  fp1=fopen(filename,"r+b");
  fp2=fopen("Code.txt","w+b");
  //**************************************************************
  int i=1;
  while (i<=numnode)
  {
    fprintf(fp2,"%d",atree[i].data);
    i++;
  }
  //*****************************************************************
 i=getc(fp1);
 int j=0,place=1;
 unsigned char bytebuf=0;
 while (i!=-1)
  {
   j=searchc(i);
   int y=0;
   while (coding[j].bcode[y]) {
      if (coding[j].bcode[y]=='1')
          bytebuf |= place;

      if (place==128)
      {
     putc(bytebuf,fp2);
     place=1;
     bytebuf=0;
       }
       else
     place<<=1;
       y++;
      }
   i=getc(fp1);
  }
  if (place<=128 && place !=1) putc(bytebuf,fp2);
  fclose(fp1);
  fclose(fp2);
}
//********************searchcode***************************
int searchc(int i)
{
  int j=0;
  while (j<o)
      if (coding[j].ch==i)
           return j;
      else
           j++;
}
//**********************Encode*****************************
void read()
{
 FILE *fp1,*fp2;
 fp1=fopen("Decode.txt","w+b");
 fp2=fopen("Code.txt","r+b");
 //************************************************
 int i=1,a;
  while (i<=numnode)
  {
    fscanf(fp2,"%d",&a);
    i++;
  }
 //************************************************
 i=getc(fp2);
 int j=0,place=1;
 struct treenode *n;
 unsigned char bytebuf=0;
 while (i!=-1)
 {
   n=start;
   while (n->data==-1)
    {
      int x=(place & i)?1:0;
      if (x==1)
    n=n->right;
      else
    n=n->left;
      if (place==128)
     {i=getc(fp2);
      place=1; }
      else
      place<<=1;
     }
   if (j++<numchar)
     putc(n->data,fp1);
  }
  fclose(fp1);
  fclose(fp2);
}
//*********************************************************
void tree(struct treenode *n,int i)
{
 atree[i].data=n->data;
 atree[i].num=n->num;
 numnode=i;
 if (n->left!=NULL)
    tree(n->left,2*i);
 if (n->right!=NULL)
    tree(n->right,2*i+1);
}





نوع مطلب : آموزش، پروژه های رایگان، سی| سی پلاس پلاس، طراحی الگوریتم، ساختمان داده، پروژه های تکمیل شده، 
برچسب ها : الگوریتم هافمن، سورس هافمن، کد c++ هافمن، کد هافمن، huffman code، huffman، huffman c++،
لینک های مرتبط :
Yahya Taherzadeh
چهارشنبه 20 آذر 1392
پنجشنبه 12 مهر 1397 08:29 ب.ظ
I'm gone to tell my little brother, that he should also pay a
visit this blog on regular basis to get updated from most up-to-date news update.
سه شنبه 17 مرداد 1396 09:23 ق.ظ
This information is invaluable. How can I find out more?
دوشنبه 16 مرداد 1396 06:41 ب.ظ
I'm curious to find out what blog system you have been utilizing?

I'm having some minor security issues with my latest site and I would like to find something more secure.
Do you have any recommendations?
دوشنبه 16 مرداد 1396 04:54 ق.ظ
I all the time used to study piece of writing in news papers but now as I am
a user of internet thus from now I am using net for content, thanks to web.
شنبه 14 مرداد 1396 05:31 ب.ظ
I was recommended this web site by my cousin. I am not
positive whether or not this submit is written by means of him as nobody else
recognize such particular about my difficulty.
You are incredible! Thank you!
شنبه 14 مرداد 1396 12:18 ب.ظ
Hiya! Quick question that's entirely off topic. Do
you know how to make your site mobile friendly? My blog looks weird
when browsing from my iphone 4. I'm trying to find
a theme or plugin that might be able to correct this issue.
If you have any recommendations, please share. With thanks!
شنبه 14 مرداد 1396 08:31 ق.ظ
What's up, I wish for to subscribe for this blog to take latest updates,
thus where can i do it please help.
جمعه 6 مرداد 1396 08:39 ب.ظ
Thank you for sharing your thoughts. I really appreciate your efforts and I am
waiting for your next post thanks once again.
چهارشنبه 13 اردیبهشت 1396 02:54 ب.ظ
Do you mind if I quote a couple of your articles as long as I
provide credit and sources back to your website?
My blog site is in the very same niche as yours and my users
would genuinely benefit from a lot of the information you provide here.
Please let me know if this okay with you. Thanks a lot!
جمعه 1 اردیبهشت 1396 04:40 ق.ظ
Good day! Would you mind if I share your blog with my zynga group?
There's a lot of folks that I think would really enjoy your content.
Please let me know. Cheers
دوشنبه 28 فروردین 1396 12:21 ق.ظ
You should take part in a contest for one of the finest websites on the net.

I'm going to recommend this website!
جمعه 25 فروردین 1396 07:49 ب.ظ
I really like looking through a post that can make men and women think.
Also, thanks for permitting me to comment!
یکشنبه 20 فروردین 1396 12:25 ب.ظ
I'm very happy to discover this site. I want to to thank you for ones time just for this fantastic
read!! I definitely savored every bit of it and i also have you
book marked to see new information on your site.
جمعه 10 دی 1395 09:19 ق.ظ
5تا ارور داره...میشه کمکم کنین که رفعش کنم؟!
جمعه 10 دی 1395 09:17 ق.ظ
سلام، خیلی ممنون مطالبتون واقعا مفیده!
پنجشنبه 25 آذر 1395 03:51 ب.ظ
سلام ....
خیلی عالی بود و ممنون از شما
خیلی ممنون میشم اگه سی شارپشم بزارید
چهارشنبه 26 آذر 1393 01:03 ب.ظ
خیلی خیلی ممنونم
اولین باری بود که یه قطعه کد رو از اینترنت گرفتم و إرور نداد!!!!!!!!!!!!!!!
Yahya Taherzadehسلام و عرض ادب
خواهش میکنم. این کدها قبلا تست شده و اکثرا نوشته خودم هستن
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر




صفحات جانبی
آمار وبلاگ
تاییدیه پرداخت
تبلیغات
به سایت تک کدر خوش آمدید