
lifo
By: a guest on
May 7th, 2012 | syntax:
C++ | size: 2.46 KB | hits: 26 | expires: Never
///////////////////////// LIFO osztály //////////////////////////////
#include <iostream>
using namespace std;
template<class T>
class LIFO{
struct ListaElem{
T adat;
ListaElem* kov;
};
ListaElem* elso;
public:
LIFO(){elso= new ListaElem; elso->kov=NULL;}
class Iterator;
Iterator begin(){
return(Iterator(*this));
}
Iterator end(){
return(Iterator());
}
class Iterator{
ListaElem *akt;
public:
Iterator():akt(0){};
Iterator(const LIFO& l):akt(l.elso){ //elejére állítja
if(akt->kov == NULL) akt=NULL;
}
Iterator& operator++(){ // pre
if(akt){
akt=akt->kov;
if(akt->kov==NULL)
akt=NULL;
}
return (*this);
}
Iterator operator++(int){
Iterator tmp = *this;
operator++();
return(tmp);
}
bool operator!=(const Iterator& i) const{
return(akt != i.akt);
}
T& operator*(){
if(akt)
return(akt->adat);
else
throw("Hibas listakezeles");
}
T* operator->(){
if(akt)
return(&akt->adat);
else
throw("Hibas listakezeles");
}
};
T& top(){
return elso->adat;
}
void push(T dat){
int db=0;
ListaElem* p = new ListaElem();
p->adat = dat;
p->kov = elso;
elso = p;
}
void pop(int i){
if(i<=listameret()){
while(i>0){
ListaElem* p = elso;
elso = p->kov;
delete p;
i--;
}
kiir_lifo();
}
else{
cout<<"Hibas meret adas"<<endl;
}
}
void pop2(){
ListaElem* p = elso;
elso = p->kov;
delete p;
kiir_lifo();
}
void kiir_lifo(){
Iterator i;
for(i = begin(); i!=end() ; i++){
cout<< *i <<endl;
}
}
T listameret(){
Iterator i;
int db=0;
for(i=begin(); i!=end(); i++){
db+=1;
}
return db;
}
void torol(){ //Lista elemeit törli
ListaElem *p;
while( elso->kov){
p = elso;
elso = p->kov;
delete p;
}
}
//Perzisztencia
void ListaMent(ostream& os){
Iterator i;
int db = 0;
for(i = begin(); i!=end(); i++){
db++;
}
os<<db<<endl;
for(i=begin(); i!=end(); i++){
os<<*i<<endl;
}
}
void ListaBetolt(istream& is){
torol();
int db = 0;
is>>db;
for(int i=0; i<db;i++){
T temp;
is>>temp;
push(temp);
}
}
void ListaBetolt2(istream& iss){
torol();
int db = 0;
iss>>db;
for(int i=0; i<db;i++){
T temp=new char();
iss>>temp;
push(temp);
}
}
~LIFO(){
torol();
delete elso;
}
};