Don't like ads? PRO users don't see any ads ;-)
Guest

lifo

By: a guest on May 7th, 2012  |  syntax: C++  |  size: 2.46 KB  |  hits: 26  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ///////////////////////// LIFO osztály //////////////////////////////
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. template<class T>
  6. class LIFO{
  7.         struct ListaElem{
  8.                 T adat;
  9.                 ListaElem* kov;
  10.  
  11.         };
  12.         ListaElem* elso;
  13.  
  14. public:
  15.         LIFO(){elso= new ListaElem; elso->kov=NULL;}
  16.         class Iterator;
  17.         Iterator begin(){
  18.                 return(Iterator(*this));
  19.         }
  20.         Iterator end(){
  21.                 return(Iterator());
  22.         }
  23.         class Iterator{
  24.                 ListaElem *akt;
  25.         public:
  26.                 Iterator():akt(0){};
  27.                 Iterator(const LIFO& l):akt(l.elso){    //elejére állítja
  28.                         if(akt->kov == NULL) akt=NULL;
  29.                 }
  30.                 Iterator& operator++(){                                 // pre
  31.                         if(akt){
  32.                                 akt=akt->kov;
  33.                                 if(akt->kov==NULL)
  34.                                         akt=NULL;
  35.                         }
  36.                         return (*this);
  37.                 }
  38.                 Iterator operator++(int){
  39.                         Iterator tmp = *this;
  40.                         operator++();
  41.                         return(tmp);
  42.                 }
  43.                 bool operator!=(const Iterator& i) const{
  44.                         return(akt != i.akt);
  45.                 }
  46.                 T& operator*(){
  47.                         if(akt)
  48.                                 return(akt->adat);
  49.                         else
  50.                                 throw("Hibas listakezeles");
  51.                 }
  52.                 T* operator->(){
  53.                         if(akt)
  54.                                 return(&akt->adat);
  55.                         else
  56.                                 throw("Hibas listakezeles");
  57.                 }
  58.         };
  59.         T& top(){
  60.                 return elso->adat;
  61.         }
  62.  
  63.         void push(T dat){
  64.                 int db=0;
  65.                 ListaElem* p = new ListaElem();
  66.                 p->adat = dat;
  67.                 p->kov = elso;
  68.                 elso = p;
  69.         }
  70.         void pop(int i){
  71.                 if(i<=listameret()){
  72.                         while(i>0){
  73.                                 ListaElem* p = elso;
  74.                                 elso = p->kov;
  75.                                 delete p;
  76.                                 i--;
  77.                         }
  78.                         kiir_lifo();
  79.                 }
  80.                 else{
  81.                         cout<<"Hibas meret adas"<<endl;
  82.                 }
  83.         }
  84.         void pop2(){
  85.                         ListaElem* p = elso;
  86.                         elso = p->kov;
  87.                         delete p;
  88.                         kiir_lifo();
  89.         }
  90.         void kiir_lifo(){
  91.                 Iterator i;
  92.                 for(i = begin(); i!=end() ; i++){
  93.                         cout<< *i <<endl;      
  94.                 }
  95.         }
  96.  
  97.         T listameret(){
  98.                 Iterator i;
  99.                 int db=0;
  100.                 for(i=begin(); i!=end(); i++){
  101.                         db+=1;
  102.                 }
  103.                 return db;
  104.         }
  105.    void torol(){                                        //Lista elemeit törli
  106.                 ListaElem *p;
  107.                 while( elso->kov){
  108.                         p = elso;
  109.                         elso = p->kov;
  110.                         delete p;
  111.                 }
  112.         }
  113. //Perzisztencia
  114.         void ListaMent(ostream& os){
  115.                 Iterator i;
  116.                 int db = 0;
  117.                 for(i = begin(); i!=end(); i++){
  118.                         db++;
  119.                 }
  120.                 os<<db<<endl;
  121.                 for(i=begin(); i!=end(); i++){
  122.                         os<<*i<<endl;
  123.                 }
  124.         }
  125.         void ListaBetolt(istream& is){
  126.                 torol();
  127.                 int db = 0;
  128.                 is>>db;
  129.                 for(int i=0; i<db;i++){
  130.                         T temp;
  131.                         is>>temp;
  132.                         push(temp);
  133.                 }
  134.         }
  135.         void ListaBetolt2(istream& iss){
  136.                 torol();
  137.                 int db = 0;
  138.                 iss>>db;
  139.                 for(int i=0; i<db;i++){
  140.                         T temp=new char();
  141.                         iss>>temp;
  142.                         push(temp);
  143.                 }
  144.         }
  145.         ~LIFO(){
  146.                 torol();
  147.                 delete elso;
  148.         }
  149. };