Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<sstream>
- #include<fstream>
- using namespace std;
- template<class R> class fa;
- template<class T>
- class elem{
- friend class fa<T>;
- T adat;
- int hany;
- elem *left;
- elem *right;
- public:
- elem(){}
- void preord(){
- if(this!=NULL)
- {
- adat.kiir();
- this->left->preord();
- this->right->preord();
- }
- }
- void preord_save(ostream &os) {
- if(this!=NULL)
- {
- os<<adat;
- this->left->preord_save(os);
- this->right->preord_save(os);
- }
- }
- void feltoltes(istream &is)
- {
- string line;
- while(!is.eof())
- {
- getline(is,line,'\n');
- fa<T>::fa.beszur(adat.convert(line));
- }
- }
- void torol(){
- if(this!=NULL)
- {
- if(this->left!=NULL)
- this->left->torol();
- if(this->right!=NULL)
- this->right->torol();
- delete this;
- }
- }
- };
- template<class R>
- class fa{
- elem<R> first;
- public:
- fa(){
- first.left=NULL;
- first.right=NULL;
- first.hany=0;
- }
- void beszur(R& x)
- {
- int bale=2;
- elem<R> *q=&first;
- elem<R> *p=&first;
- if(q->hany!=0)
- {
- if(q->adat.compare(x)==1)
- {
- p=q->right;
- bale=0;
- }
- else if(q->adat.compare(x)==2)
- {
- p=q->left;
- bale=1;
- }
- if(bale==2)
- ++(q->hany);
- else
- {
- while(p!=NULL)
- if(p->adat.compare(x)==1)
- {
- q=p;
- p=p->right;
- bale=0;
- }
- else if(p->adat.compare(x)==2)
- {
- q=p;
- p=p->left;
- bale=1;
- }
- else
- break;
- if(p==NULL)
- {
- if(bale)
- {
- q->left=new elem<R>;
- p=q->left;
- }
- else
- {
- q->right=new elem<R>;
- p=q->right;
- }
- p->adat=x;
- p->hany=1;
- p->left=NULL;
- p->right=NULL;
- }
- else
- ++(p->hany);
- }
- }
- else
- {
- first.adat=x;
- first.hany=1;
- }
- }
- void preorder()
- {
- elem<R> *p=&first;
- p->preord();
- }
- void preorder_save()
- {
- ofstream f1;
- f1.open("mentes.txt");
- elem<R> *p=&first;
- p->preord_save(f1);
- f1.close();
- }
- void feltolt()
- {
- ifstream f1;
- f1.open("mentes.txt");
- elem<R>::elem.feltoltes(f1);
- f1.close();
- }
- };
- class student{
- string nev;
- string neptun;
- public:
- student(){}
- student(string nev, string neptun) :nev(nev), neptun(neptun){
- }
- int compare(student kivel)
- {
- if(neptun<kivel.neptun)
- return 1;
- else if(neptun>kivel.neptun)
- return 2;
- else return 0;
- }
- student operator=(student ki)
- {
- nev=ki.nev;
- neptun=ki.neptun;
- return ki;
- }
- friend std::ostream& operator<<(std::ostream& os, student i) {
- return os <<i.nev<<" "<<i.neptun<<endl;
- }
- student& convert(string line)
- {
- string adat1, adat2;
- stringstream linestream(line);
- getline(linestream,adat1,'\t');
- getline(linestream,adat2,'\n');
- student vki(adat1,adat2);
- return vki;
- }
- void kiir()
- {
- cout<<"Nev: "<<nev<<" Neptun: "<<neptun<<endl;
- }
- ~student(){}
- };
- class szamok{
- int szam;
- public:
- szamok(){}
- szamok(int be) :szam(be){}
- int compare(szamok mivel){
- if(szam<mivel.szam)
- return 1;
- else if(szam>mivel.szam)
- return 2;
- else return 0;
- }
- szamok operator=(szamok mi)
- {
- szam=mi.szam;
- return mi;
- }
- friend std::ostream& operator<<(std::ostream& os, szamok i) {
- return os <<i.szam<<endl;
- }
- void kiir()
- {
- cout<<"Szam: "<<szam<<endl;
- }
- ~szamok(){}
- };
- int main()
- {
- fa<student> y;
- fa<student> x;
- ofstream f1;
- //f1.open("mentes.txt");
- y.beszur(*(new student("dsfdsf","KSDFGH")));
- y.beszur(*(new student("dsfdsf","XFDFDF")));
- y.beszur(*(new student("dsfdsf","CVDFDF")));
- /*x.beszur(*(new szamok(32)));
- x.beszur(*(new szamok(25)));
- x.beszur(*(new szamok(45)));
- x.beszur(*(new szamok(12)));*/
- y.preorder();
- //x.preorder();
- y.preorder_save();
- x.feltolt();
- x.preorder();
- //f1.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement