Advertisement
dany27

Generikus Bináris Fa

May 6th, 2012
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.38 KB | None | 0 0
  1. #include <iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. template<class R> class fa;
  6. template<class T>
  7. class elem{
  8.     friend class fa<T>;
  9.     T adat;
  10.     int hany;
  11.     elem *left;
  12.     elem *right;
  13. public:
  14.     elem(){}
  15.     void preord(){
  16.     if(this!=NULL)
  17.         {
  18.         adat.kiir();
  19.         //cout<<adat;
  20.         this->left->preord();
  21.         this->right->preord();
  22.         }
  23.     }
  24.     void torol(){
  25.     if(this!=NULL)
  26.     {
  27.         if(this->left!=NULL)
  28.             this->left->torol();
  29.         if(this->right!=NULL)
  30.             this->right->torol();
  31.         delete this;
  32.     }
  33.  
  34.     }
  35. };
  36. template<class R>
  37. class fa{
  38.     elem<R> first;
  39.     public:
  40.     fa(){
  41.     first.left=NULL;
  42.     first.right=NULL;
  43.     first.hany=0;
  44.     }
  45.     void beszur(R& x)
  46.     {
  47.         int bale=2;
  48.         elem<R> *q=&first;
  49.         elem<R> *p=&first;
  50.  
  51.         if(q->hany!=0)
  52.         {
  53.             if(q->adat.compare(x)==1)
  54.             {
  55.                 p=q->right;
  56.                 bale=0;
  57.             }
  58.             else if(q->adat.compare(x)==2)
  59.             {
  60.                 p=q->left;
  61.                 bale=1;
  62.             }
  63.             if(bale==2)
  64.                 ++(q->hany);
  65.             else
  66.             {
  67.                 while(p!=NULL)
  68.                     if(p->adat.compare(x)==1)
  69.                     {
  70.                         q=p;
  71.                         p=p->right;
  72.                         bale=0;
  73.                     }
  74.                     else if(p->adat.compare(x)==2)
  75.                     {
  76.                         q=p;
  77.                         p=p->left;
  78.                         bale=1;
  79.                     }
  80.                     else
  81.                         break;
  82.  
  83.                 if(p==NULL)
  84.                 {
  85.                     if(bale)
  86.                     {
  87.                         q->left=new elem<R>;
  88.                         p=q->left;
  89.                     }
  90.                     else
  91.                     {
  92.                         q->right=new elem<R>;
  93.                         p=q->right;
  94.                     }
  95.                     p->adat=x;
  96.                     p->hany=1;
  97.                     p->left=NULL;
  98.                     p->right=NULL;
  99.                 }
  100.                 else
  101.                     ++(p->hany);
  102.             }
  103.         }
  104.         else
  105.         {
  106.             first.adat=x;
  107.             first.hany=1;
  108.         }
  109.     }
  110.     void preorder()
  111.     {
  112.         elem<R> *p=&first;
  113.         p->preord();
  114.     }
  115. };
  116.  
  117. class Serialize{
  118. public:
  119. virtual void write(ostream &os) const=0;
  120. virtual void read(istream &is)=0;
  121. virtual ~Serialize(){}
  122.  
  123. };
  124. template <class T>
  125. class PFa: public Serialize, public fa<T>
  126. {
  127.     public:
  128.     void write(ostream &os) const
  129.     {
  130.        
  131.         //ide jön majd a fajlba iras
  132.     }
  133.  
  134.     void read(istream &is)
  135.     {
  136.         //ide jön majd a vissza olvasas
  137.     }
  138.  
  139.     ~PFa()
  140.     {
  141.  
  142.     }
  143. };
  144.  
  145. class student{
  146.     string nev;
  147.     string neptun;
  148.     public:
  149.     student(){}
  150.     student(string nev, string neptun) :nev(nev), neptun(neptun){
  151.     }
  152.     int compare(student kivel)
  153.     {
  154.         if(neptun<kivel.neptun)
  155.             return 1;
  156.         else if(neptun>kivel.neptun)
  157.             return 2;
  158.         else return 0;
  159.     }
  160.  
  161.     student operator=(student ki)
  162.     {
  163.         nev=ki.nev;
  164.         neptun=ki.neptun;
  165.  
  166.         return ki;
  167.     }
  168.  
  169.     void kiir()
  170.     {
  171.         cout<<"Nev: "<<nev<<" Neptun: "<<neptun<<endl;
  172.     }
  173.     ~student(){}
  174. };
  175.  
  176. class szamok{
  177.     int szam;
  178.  
  179.     public:
  180.     szamok(){}
  181.     szamok(int be) :szam(be){}
  182.     int compare(szamok mivel){
  183.     if(szam<mivel.szam)
  184.         return 1;
  185.     else if(szam>mivel.szam)
  186.         return 2;
  187.     else return 0;
  188.     }
  189.     szamok operator=(szamok mi)
  190.     {
  191.         szam=mi.szam;
  192.  
  193.         return mi;
  194.     }
  195.     void kiir()
  196.     {
  197.         cout<<"Szam: "<<szam<<endl;
  198.     }
  199.     ~szamok(){}
  200.  
  201. };
  202.  
  203.  
  204. int main()
  205. {
  206.     //fa<student> y;
  207.     PFa<szamok> x;
  208.     ofstream f1;
  209.     f1.open("mentes.txt");
  210.  
  211.   /* y.beszur(*(new student("dsfdsf","KSDFGH")));
  212.    y.beszur(*(new student("dsfdsf","XFDFDF")));
  213.    y.beszur(*(new student("dsfdsf","CVDFDF")));*/
  214.    x.beszur(*(new szamok(32)));
  215.    x.beszur(*(new szamok(25)));
  216.    x.beszur(*(new szamok(45)));
  217.    x.beszur(*(new szamok(12)));
  218.   //y.beszur(*(new int(22)));
  219.     //y.preorder();
  220.     x.preorder();
  221.     x.write(f1);
  222.     f1.close();
  223.     return 0;
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement