1 Ocak 2016 Cuma

Veri Yapıları 4 // C++##BinaryTree Sıkıştırma Algoritması

https://yadi.sk/d/dMR4NTPotGVyh
------
https://yadi.sk/d/T8XbeQFstGVyj
-----
https://yadi.sk/d/JCsAVQfEtGVyq
----
https://yadi.sk/d/cASmL63stGVyo
------



Header Dosyaları +
/**
* @file BINARYTREE_HPP
* @description BinaryTree header dosyası binary agac için gerekli dugum tutulur ve agac üzerindeki gerekli işlemler yapılır
* @course Bilgisayar Mühendisliği A grubu 2.öğretim
* @assignment 4.ödev
* @date 1.1.2016
* @author Ahmet YENEN   - yenenahmet@hotmail.com
*/

#ifndef BINARYTREE_HPP
#define BINARYTREE_HPP

#include
#include
using namespace std;

#include "Dugum.hpp"

struct Node{
Dugum* eleman;
Node *left;
Node *right;
Node(Dugum* yeni,Node *L=NULL,Node *R=NULL)
{
eleman=yeni;
left=L;
right=R;
}
};

class BinaryTree{
private:
Node *root;

void SearchAndInsert(Node *&sub_root,Dugum *yeni)
{
if(sub_root == NULL)
{
sub_root = new Node(yeni);
}
else if(yeni->tekrarlanma <= sub_root->eleman->tekrarlanma)
return SearchAndInsert(sub_root->left,yeni);
else if(yeni->tekrarlanma > sub_root->eleman->tekrarlanma)
return SearchAndInsert(sub_root->right,yeni);
}
bool SearchAndRemove(Node *&sub_root,Dugum *veri)
{
if(sub_root == NULL || sub_root->eleman->karakter == veri->karakter)
return RemoveNode(sub_root);
else if(veri->tekrarlanma < sub_root->eleman->tekrarlanma)
return SearchAndRemove(sub_root->left,veri);
else
return SearchAndRemove(sub_root->right,veri);
}
Dugum* SearchAndRemoveMin(Node *&sub_root)
{
if(sub_root->left == NULL)
{
Dugum* dondur = sub_root->eleman;
RemoveNode(sub_root);
return dondur;
}
return SearchAndRemoveMin(sub_root->left);
}
bool RemoveNode(Node *&sub_root)
{
if(sub_root == NULL) return false;
Node *del = sub_root;
if(sub_root->right == NULL) sub_root = sub_root->left;
else if(sub_root->left == NULL)sub_root = sub_root->right;
else{
del = sub_root->left;
Node *parent = sub_root;
while(del->right != NULL){
parent=del;
del=del->right;
}
sub_root->eleman = del->eleman;
if(parent == sub_root) sub_root->left = del->left;
else parent->right = del->left;
}
delete del;
return true;
}
void makeEmpty(Node *&sub_root)
{
if(sub_root != NULL)
{
makeEmpty(sub_root->left);
makeEmpty(sub_root->right);
delete sub_root;
sub_root = NULL;
}
}
bool find(Node *sub_root,Dugum *veri)
{
if(sub_root == NULL) return false;
else if(veri->tekrarlanma < sub_root->eleman->tekrarlanma)
return find(sub_root->left,veri);
else if(veri->tekrarlanma > sub_root->eleman->tekrarlanma)
return find(sub_root->right,veri);
else
return true;
}
void print(ostream &ekran,Node *sub_root)
{
if(sub_root != NULL)
{
print(ekran,sub_root->left);
ekran<eleman<<"";

print(ekran,sub_root->right);
}
}
int count(Node *sub_root)
{
if(sub_root == NULL) return 0;
return 1+count(sub_root->left)+count(sub_root->right);
}

public:
BinaryTree()
{
root=NULL;
}
~BinaryTree()
{
makeEmpty();
}
bool isEmpty() const
{
return root==NULL;
}
void Insert(Dugum *yeni)
{
SearchAndInsert(root,yeni);
}
void Remove(Dugum *veri)
{
SearchAndRemove(root,veri);
}
void makeEmpty()
{
makeEmpty(root);
}
bool find(Dugum *veri)
{
return find(root,veri);
}
void print(ostream &ekran)
{
print(ekran,root);
}
int count()
{
return count(root);
}
Dugum* RemoveMin()
{
return SearchAndRemoveMin(root);
}
// << Operatör overloading
friend ostream& operator<<(ostream &ekran,BinaryTree *tree)
{
tree->print(ekran);
return ekran;
}
};
#endif
-----------------------------------------------------------
/**
* @file DUGUM_HPP
* @description DUGUM header dosyası dugum için gerekli elemlar ve dosya yönlendirici tutulur
* @course Bilgisayar Mühendisliği A grubu 2.öğretim
* @assignment 4.ödev
* @date 1.1.2016
* @author Ahmet YENEN   - yenenahmet@hotmail.com
*/
#ifndef DUGUM_HPP
#define DUGUM_HPP
#include
#include
using namespace std;

class Dugum
{
public:
Dugum *left;
Dugum *right;
int tekrarlanma;
char karakter;
Dugum(const char ch,int tkr,Dugum *L=NULL,Dugum *R=NULL);
friend ostream& operator<<(ostream &ekran,Dugum *dugum);
};
#endif
-------------------------------------------------------------------------------
/**
* @file HUFFMANTREE_HPP
* @description HUFFMANTREE header dosyası
* @course Bilgisayar Mühendisliği A grubu 2.öğretim
* @assignment 4.ödev
* @date 1.1.2016
* @author Ahmet YENEN   - yenenahmet@hotmail.com
*/
#ifndef HUFFMANTREE_HPP
#define HUFFMANTREE_HPP

#include
#include
using namespace std;

#include "Dugum.hpp"
#include "BinaryTree.hpp"

class HuffmanTree
{
private:
Dugum* root;
public:

HuffmanTree();
~HuffmanTree();
void AgacOlustur(ifstream &);
void KoduYaz();

void KoduYaz(Dugum *&,string);
   void tabloKullan();
   void skstrilmisDosyayaz();
void Print();
};
#endif
---------------------------------------------------------------
Kaynak Dosyalar+

/**
* @file Dugum
* @description Dugum Kaynak dosyası
* @course Bilgisayar Mühendisliği A grubu 2.öğretim
* @assignment 4.ödev
* @date 1.1.2016
* @author Ahmet YENEN   - yenenahmet@hotmail.com
*/
#include "Dugum.hpp"

Dugum::Dugum(const char ch,int tkr,Dugum *L,Dugum *R)
{
karakter=ch;
tekrarlanma = tkr;
left=L;
right=R;
}
ostream& operator<<(ostream &ekran,Dugum *dugum){
ekran<karakter<<" "<tekrarlanma<<" ";
return ekran;
}
---------------------------------------
/**
* @file HuffmanTree
* @description HuffmanTree Kaynak dosyası dosyadan okuma işelemi binary ağaçtan gelen verileri uygun yerlere işleme bit.data ve tablo işlemeri gerçekleştirlir
* @course Bilgisayar Mühendisliği A grubu 2.öğretim
* @assignment 4.ödev
* @date 1.1.2016
* @author Ahmet YENEN   - yenenahmet@hotmail.com
*/
#include "HuffmanTree.hpp"
#include
#include "iostream"
#include "string.h"
#include
#include
#include
#include
///ofstream txtYaz("Tablo.txt,ios::out");
HuffmanTree::HuffmanTree()
{

}
HuffmanTree::~HuffmanTree()
{
}
void HuffmanTree::AgacOlustur(ifstream &fs)
{
int freq[256];   // Türkçe karakterler alınmıyor.

for(int i=0;i<256 i="" p=""> freq[i]=0;

while(!fs.eof())
{
char ch;
fs.get(ch);
if(!fs.eof())
{
unsigned int key = ch;
freq[key]++;
}
}

BinaryTree *ikiliAramaAgaci = new BinaryTree();
for(int i=0;i<256 i="" p=""> {
if(freq[i] > 0)
{
Dugum *yeni = new Dugum((char)i,freq[i]);
ikiliAramaAgaci->Insert(yeni);
}
}

while(ikiliAramaAgaci->count()>1)
{
Dugum *T1 = ikiliAramaAgaci->RemoveMin();
Dugum *T2 = ikiliAramaAgaci->RemoveMin();

Dugum *T3 = new Dugum(0,T1->tekrarlanma+T2->tekrarlanma,T1,T2);

ikiliAramaAgaci->Insert(T3);
}
root = ikiliAramaAgaci->RemoveMin();
delete ikiliAramaAgaci;
KoduYaz();
}
void HuffmanTree::KoduYaz()
{
string binary = "";
KoduYaz(root,binary);
}

void HuffmanTree::KoduYaz(Dugum *&sub_root,string binary)
{

    ofstream dosya;
    dosya.open("Tablo.txt",ios::app);
if(sub_root==NULL)
return;
if(sub_root->karakter!=0)
{
if(sub_root->karakter == ' '){// boşluk gelirse @ işareti yap
dosya<<"@"<<" "< // fprintf(pfile,"@ : %k",binary);

}
if(sub_root->karakter == '\n'){//satir sonu gelirse > işareti yap
dosya<<">"<<" "< // fprintf(pfile,"> : %s",binary);
}

else{// geri kalanalrı döndür..
dosya<karakter<<" "< // fprintf(pfile,"  : %s",binary);
}
//txtYaz<karakter<<" : "< }


if(sub_root->left != NULL)
{
KoduYaz(sub_root->left,binary+"0");
}
if(sub_root->right != NULL)
{
KoduYaz(sub_root->right,binary+"1");
}
dosya.close();

///////////////
}
void HuffmanTree::tabloKullan(){
char S1;
string B1;
ofstream bityaz;
    bityaz.open("bit.data",ios::out | ios::binary);
ifstream oku;
    oku.open("deneme.txt");
 
while(!oku.eof())
{
ifstream dosya;
dosya.open("Tablo.txt");
char ch;
oku.get(ch);
    while(!dosya.eof()){
    dosya>>S1>>B1;
        if(S1 == ' '){cout<

}   
if(ch == S1){
bityaz< }
}
dosya.close();
}
bityaz.close();
   oku.close();
cout<<"bit.data oluşturuldu..."<}

void HuffmanTree::skstrilmisDosyayaz(){
string temp = "";
ifstream okuma;
okuma.open("deneme.txt");
while(!okuma.eof()){
char oku;
okuma.get(oku);
cout< }
okuma.close();


}
------------------------------------------------------------------
/**
* @file main
* @description main dosyası
* @course Bilgisayar Mühendisliği A grubu 2.öğretim
* @assignment 4.ödev
* @date 1.1.2016
* @author Ahmet YENEN   - yenenahmet@hotmail.com
*/
#include "HuffmanTree.hpp"
#include
int main()
{
setlocale(LC_ALL,"Turkish");
int secim;
cout<<"**********************"< cout<<"1- Dosyayı Sıkıştır"< cout<<"2- Sıkıştırılmış dosyayı ekrana yaz"< cout<<"***********************"< cin>>secim;
if(secim == 1){
ifstream fs("deneme.txt");
if(fs.is_open())
{

HuffmanTree *huffmanAgac = new HuffmanTree();
huffmanAgac->AgacOlustur(fs);
delete huffmanAgac;
cout<<"Tablo Çıkarıldı.."< fs.close();

}
else
{
cout<<"Dosya açılamıyor."< }
HuffmanTree *huffmanAgac = new HuffmanTree();
      huffmanAgac->tabloKullan();
      delete huffmanAgac;
     }
     else if(secim == 2 ){
          HuffmanTree *huffmanAgac = new HuffmanTree();
                 huffmanAgac->skstrilmisDosyayaz();
                 delete huffmanAgac;
}
else{
cout<<"yanlis secim"< }
}
---------------------------------------------------


+Deneme.txt dosyası+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at sem sit amet mauris pellentesque volutpat.
Nunc sem turpis, mattis auctor pulvinar quis, convallis id nisl. Sed rhoncus malesuada facilisis. Sed tincidunt
leo sed sagittis gravida. Maecenas et mauris ac justo sollicitudin dignissim ut sit amet magna.

Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at sem sit amet mauris pellentesque volutpat.
Nunc sem turpis, mattis auctor pulvinar quis, convallis id nisl. Sed rhoncus malesuada facilisis. Sed tincidunt
leo sed sagittis gravida. Maecenas et mauris ac justo sollicitudin dignissim ut sit amet magna.

Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at sem sit amet mauris pellentesque volutpat.
Nunc sem turpis, mattis auctor pulvinar quis, convallis id nisl. Sed rhoncus malesuada facilisis. Sed tincidunt
leo sed sagittis gravida. Maecenas et mauris ac justo sollicitudin dignissim ut sit amet magna.

Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero. Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at sem sit amet mauris pellentesque volutpat.
Nunc sem turpis, mattis auctor pulvinar quis, convallis id nisl. Sed rhoncus malesuada facilisis. Sed tincidunt
leo sed sagittis gravida. Maecenas et mauris ac justo sollicitudin dignissim ut sit amet magna.

Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at sem sit amet mauris pellentesque volutpat.
Nunc sem turpis, mattis auctor pulvinar quis, convallis id nisl. Sed rhoncus malesuada facilisis. Sed tincidunt
leo sed sagittis gravida. Maecenas et mauris ac justo sollicitudin dignissim ut sit amet magna.

Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero. Pellentesque tristique in augue eu aliquam. Aliquam ac tellus lorem. Pellentesque placerat egestas elit, ut dapibus
magna fringilla et. Nulla feugiat velit eleifend, pretium diam a, bibendum purus. Etiam sit amet tempor neque.
Phasellus elit tortor, tincidunt sed est a, fringilla volutpat arcu. Donec tempor in lacus nec mattis.
Morbi id porttitor erat. Donec ac eros mattis, dignissim diam quis, varius libero.

Hiç yorum yok:

Yorum Gönder