El Guru Programador
Usuario DESCONOCIDO | Registrate Gratis | Usuarios Registrados
Cola y Pila
Autor [alien_gongora] Calificacion
/*Este es el msimo c?digo de Pila y Cola
que sub? anteriormente Pila con Apuntadores SE, Pila con lisla SE(Composici?n), Cola con apuntadores SE, cola con lis SE(Composicion).*/

// escribir a:
// [email protected]


#ifndef CNodoSEH
#define CNodoSEH
//---------------------------------------------------------------------------
template
class CNodoSE
{
private:
T info;
CNodoSE* siguiente;
public:
CNodoSE(T, CNodoSE*);
CNodoSE* GetSiguiente();
void SetSiguiente(CNodoSE*);
T GetDato(){return info;};
void SetDato(T);
};

template
void CNodoSE::SetDato(T Valor)
{
info = Valor;
}

template
void CNodoSE::SetSiguiente(CNodoSE* Siguiente)
{
this->siguiente = Siguiente;
}

template
CNodoSE* CNodoSE::GetSiguiente()
{
return this->siguiente;
}

template
CNodoSE::CNodoSE(T Valor, CNodoSE* Siguiente = NULL)
{
info = Valor;
this->siguiente = Siguiente;
}

#endif


#ifndef CColaH
#define CColaH
#include "CListaSE.h"
//---------------------------------------------------------------------------
template
class CCola
{
private:
CListaSE Lista;
public:
CCola()
{
//Nada.
}
T Frente();
T Fondo();
void Adicionar(T);
T Eliminar();
bool Es_Vacia();
};

template
bool CCola::Es_Vacia()
{
return Lista.Vacia();
}
template
T CCola::Frente()
{
if(!Es_Vacaia())
{
return Lista.Obetener(1);
}
else
throw Exception("Cola Vacia");
}
template
T CCola::Fondo()
{
if(!Es_Vacia())
{
return Lista.Obtener(Lista.Longitud());
}
else
throw Exception("Cola Vacia")
}
template
void CCola::Adicionar(T valor)
{
if(!Es_Vacia())
{
return Lista.Adicionar(valor);
}
else
{
return Lista.Insertar(valor,1);
}
}
template
T CCola::Eliminar()
{
if(!Es_Vacia())
{
T Aux=Lista.Obtener(1)
Lista.Eliminar(1);
return Aux;
}
else
throw Exception("Cola Vacia");
}

#endif


#ifndef CColaASEH
#define CColaASEH
#include "CNodoSE.h"
//---------------------------------------------------------------------------
template
class CColaASE
{
private:
CNodoSE* ptr_frente;
CNodoSE*ptr_fondo;
public:
CColaASE()
{
ptr_frente=NULL;
ptr_fondo=NULL;
}
void Adicionar(T);
T Extraer();
T Frente();
T Fondo();
bool Es_Vacia();
int Longitud();
};

template
bool CColaASE::Es_Vacia()
{
return ptr_frente==NULL;
}
template
int CColaASE::Longitud()
{
CNodoSE* cursor=ptr_frente;
int i=1;
while(cursor->GetSiguiente()!=NULL)
{
cursor=cursor->GetSiguiente();
i++
}
return i;
}
template
T CColaASE::Extraer()
{
CNodoSE* cursor=ptr_frente;
if(Longitud()==1)
{
T Aux=cursor->GetDato();
ptr_frente->SetSiguiente(NULL);
ptr_fondo->SetSiguiente(NULL);
delete [] cursor;
return Aux;
}
if(!Es_Vacia())
{
T Aux=cursor->GetDato();
ptr_frente=ptr_frente->GetSiguiente();
cursor->SetSiguiente(NULL);
delete [] cursor;
return Aux;
}
else
throw Exception("Cola Vacia")
}
template
T CColaASE::Fondo()
{
if(!Es_Vacia())
{
T Aux=ptr_fondo->GetDat0();
return Aux;
}
else
throw Exception("Cola Vacia");
}
template
T CColaASE::Frente()
{
if(!ES_Vacia())
{
T Aux=ptr_frente->GetDato();
return Aux;
}
else
throw Exception("Cola Vacia");
}
template
void CColaASE::Adicionar(T valor)
{
CNodoSE* nodo=new CNodoSE(valor);
if(Es_Vacia()) // if((ptr_frente==NULL) && (ptr_fondo==NULL))
{
nodo->SetSiguiente(ptr_frente);
ptr_fondo=nodo
ptr_frente=nodo
}
else
{
ptr_fondo->SetSiguiente(nodo);
ptr_fondo=nodo;
}

}

#endif


#ifndef CListaSEH
#define CListaSEH
#include "CNodoSE.h"
//---------------------------------------------------------------------------
template
class CListaSE
{
private:
CNodoSE* ptr_cabeza;
public:
CListaSE();
void Adicionar( T);
void Insertar( T, int);
T Obtener( int);
void Eliminar( int);
int Longitud();
bool Vacia();

};

template
CListaSE::CListaSE()
{
ptr_cabeza = NULL;
}

template
void CListaSE::Adicionar(T valor)
{
CNodoSE* nodo = new CNodoSE(valor);
if (Vacia())
ptr_cabeza = nodo;
else
{
CNodoSE* cursor= ptr_cabeza;
while(cursor->GetSiguiente()!=NULL)
cursor = cursor->GetSiguiente();
cursor->SetSiguiente(nodo);
}
}

template
void CListaSE::Insertar( T valor, int pos)
{
if ((pos > 0) &&(pos <= Longitud()))
{
CNodoSE* nodo = new CNodoSE(valor);
if (pos == 1)
{
nodo->SetSiguiente(ptr_cabeza);
ptr_cabeza = nodo;
}
else
{
CNodoSE* cursor = ptr_cabeza;
int cont = 1;
while(cont < pos-1)
{
cursor = cursor->GetSiguiente();
cont++;
}
nodo->SetSiguiente(cursor->GetSiguiente());
cursor->SetSiguiente(nodo);
}
}
else
throw Exception("Posicion fuera de rango");
}

template
T CListaSE::Obtener( int pos )
{
CNodoSE* cursor = ptr_cabeza;;
int i = 1;
if ((pos > 0) && (pos <= Longitud()))
{
while (i < pos)
{
cursor = cursor->GetSiguiente();
i++;
}
return cursor->GetDato();
}
else
throw Exception("Posicion fuera de rango");
}

template
void CListaSE::Eliminar( int pos)
{

if ((pos > 0) && (pos <= Longitud()))
{
CNodoSE* temp;
CNodoSE* cursor = ptr_cabeza;
if (pos == 1)
{
ptr_cabeza = cursor->GetSiguiente();
cursor->SetSiguiente(NULL);
delete[] cursor;
}
else
{
int i=1;
while(i {
cursor = cursor->GetSiguiente();
i++;
}
temp = cursor->GetSiguiente();
cursor->SetSiguiente(temp->GetSiguiente());
delete[] temp;
}
}
else
throw Exception("Posicion fuera de rango");
}

template
int CListaSE::Longitud()
{
int cant=0;
CNodoSE* cursor=ptr_cabeza;
while (cursor!=NULL)
{
cant++;
cursor = cursor->GetSiguiente();
}
return cant;
}

template
bool CListaSE::Vacia()
{
return ptr_cabeza == NULL;
}

#endif



#ifndef CPilaH
#define CPilaH
#include "CListaSE.h"
//---------------------------------------------------------------------------
template
class CPila
{
private:
CListaSE Lista_Pila;
public:
CPila()
{
//Nada.
}
void Push(T);//PONER, ENTAR DATO.
T Pop();//SACAR DATO.
T Top();//TOPE.
bool ES_Vacia();
};
template
bool CPila::ES_Vacia()
{
return Lista_Pila.Vacia();
}
template
void CPila::Push(T valor)
{
if(!Es_vacia())
{
Lista_Pila.Adicionar(valor);
}
else
Lista_Pila.Insertar(valor,1)
}
template
T CPila::Pop()
{
if(!Es_Vacia())
{
T Aux=Lista_Pila.Obtener(Lista_Pila.Longitud());
Lista_Pila.Eliminar(Lista_Pila.Longitud());
return Aux;
}
else
throw Exception("Pila Vacia")
}
template
T CPila::Top()
{
if(!Es_Vacia())
{
return Lista_Pila.Obtener(Lista_Pila.Longitud());
}
else
throw Exception("Pila Vacia")
}

#endif


#ifndef CPilaASEH
#define CPilaASEH
#include "CNodoSE.h"
//---------------------------------------------------------------------------
template
class CPilaASE
{
private:
CNodoSE* ptr_Alien; //es lo mismo ptr_cabeza o ptr_fondo.
public:
CPilaASE()
{
ptr_Alien=NULL;
}
int Longitud();//Recoriido de cursor por los nodos.
T Obtener();//En una Pila solo hace falta obtener el ?ltimo elemento
void Push(T); //que es por donde se saca, entonces se obtiene en la ?ltima Posi??n //Obtener(Longitud())//
T Pop(); //Saca elementos de una Pila y lo elimina (Push los pone, los adiciona al final)
T Top(); //Devuelve el elemento en la ?ltima posici?n de la Pila.
bool Es_Vacia(); //Si est? vacia o no.
};

template
bool CPilaASE::Es_Vacia()
{
return ptr_Alien==NULL;
}
template
int CPilaASE::Longitud()
{
int Cont_Pos;
CNodoSE* cursor=ptr_Alien;
while(cursor!=NULL)
{
cursor=cursor->GetSiguiente();
Cont_Pos++;
}
return Cont_Pos;
}
template
T CPilaASE::Obtener()
{
if(!Es_Vacia())
{
CNodoSE* cursor=ptr_Alien;
int i=1;
while(cursor->GetSiguiente()!=NULL)
{
cursor=cursor->GetSiguiente();
i++
}
return cursor->Getdato();
}
else
throw Exception("Pila Vacia");
}
template
T CPilaASE::Pop()
{
CNodoSE* cursor=ptr_Alien;
if(Longitud()==1)
{
T Aux=cursor->GetDato;
ptr_Alien=cursor->GetSiguiente();
cursor->SetSiguiente(NULL);
delete [] cursor;
return Aux;
}
if (!Es_Vacia())//if(!Es_Vacia()) Si no est? vacia---Si tiene algo.
{
int i=1;
while(i {
cursor=cursor->GetSiguiente();
i++
}
CNodoSE* Temp;
Temp=cursor->GetSiguiente();
T Aux=Temp->GetDato;
cursor->SetSiguiente(NULL);
delete [] Temp;
return Aux;
}
else
throw Exception("Pila Vacia");
}
template
void CPilaASE::Push(T valor)
{
CNodoSE* nodo=new CNodoSE(valor);
if(Es_Vacia)
{
//Ponerlo como primer nodo de la pila.
nodo->SetSiguiente(ptr_Alien);
ptr_Alien=nodo;
}
else
CNodoSE* cursor=ptr_Alien;
while(cursor->GetSiguiente()!=NULL)
{
cursor=cursor->GetSiguiente();
}
cursor->SetSiguiente(nodo);
}
template
T CPilaASE::Top()
{
if(!Es_Vacia())
{
return Obtener(Longitud());
}
else
throw Exception("Pila Vacia");
}
#endif


//Espero que no contenga errores.
?
Terminos de Uso

1 - Copiar o Descargarse este contenido implica aceptar los terminos aqui detallados.

2 - Usted puede utilizar este contenido en sus propios programas y puede compilarlo en un programa y modificarlo a su gusto.

3 - Usted NO PUEDE redistribuir este contenido tal como se presenta aqui sin el permiso del autor original del mismo.

4 - Usted seguir? cualquier restricci?n adicional del copyright que el autor pudo haber puesto en la descripci?n del contenido.

?

Contactos myStudio Network