El Guru Programador
Usuario DESCONOCIDO | Registrate Gratis | Usuarios Registrados
Jorge Luis Valdes(UCI)-(PILA)
Autor [jlvaldes] Calificacion
Este es la implementacion de una pila con apuntadores. No esta completa, pero espero les sirva.......

//---------------------------------------------------------------------------

#ifndef Unit3H
#define Unit3H
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>

// Declaracion de la clase NodoDE
template<class T>
class NodoDE
{
private:
T dato;
NodoDE<T>*siguiente;
NodoDE<T>*anterior;
public:
inline NodoDE(T, NodoDE<T>*, NodoDE<T>*);
inline NodoDE();
inline NodoDE(T );
inline NodoDE(const NodoDE<T>&);
__property T PDato ={read=dato,write=dato};
__property NodoDE<T>* PSiguiente = {read = siguiente,write = siguiente};
__property NodoDE<T>* PAnterior = {read = anterior,write = anterior};



};

//-----------------------------------------------------------------------------
template<class T>
NodoDE<T>::NodoDE(T Dato, NodoDE<T>*nodo=NULL,NodoDE<T>*anodo=NULL)
{
dato=Dato;
siguiente=nodo;
anterior=anodo;
};
//-----------------------------------------------------------------------------
template<class T>
NodoDE<T>::NodoDE()
{
dato=NULL;
siguiente=NULL;
anterior=NULL;
}




template<class T>
NodoDE<T>::NodoDE(T p_dato)
{
dato=p_dato;
siguiente=NULL;
anterior=NULL;
}
//------------------------------------------------------------------------------
template<class T>
NodoDE<T>::NodoDE(const NodoDE<T>& nodo)
{
dato=new T(nodo.dato);
*siguiente=*(nodo.siguiente);
*anterior=*(nodo.anterior);
}
//---------------------------------------------------------------------------
#endif







//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
#include "Unit3.h"



//----EJERCICIO 5 GUIA PII------------------------------------------------------
template<class T>
class Pila_Abstracta
{
public:
virtual void Push(T)=0;
virtual T Pop()=0;
virtual T Top()const=0;
virtual bool IsEmpty()const=0;
};

//----CLASE PILA CON APUNTADOR--------------------------------------------------
template<class T>
class Pila: public Pila_Abstracta<T>
{
private:
NodoDE<T>*tope;
public:
Pila( NodoDE<T>* ntope);
Pila(const Pila &);
Pila();
void Push(T);
T Top()const;
T Pop();
bool IsEmpty()const;

/*EJERCICIO 5 GUIA*/
bool Esta_en_Pila(T);
};


//-----IMPLEMENTACION DE LOS METODOS DE LA CLASE PILA-------------------------

template<class T>
Pila<T>::Pila()
{
tope=NULL;
}



template<class T>
Pila<T>::Pila(const Pila &npila)
{
tope=npila.tope;
}



template<class T>
Pila<T>::Pila(NodoDE<T>* ntope)
{

tope=ntope;

}




template<class T>
void Pila<T>::Push(T x)
{
NodoDE<T>*nodo=new NodoDE<T>(x);
if(tope==NULL)
tope=nodo;
else
{
tope->PSiguiente=nodo;
nodo->PAnterior=tope;
tope=nodo;
}
}


//-----------------------------------------------------------------------------
template<class T>
T Pila<T>::Top()const
{
if(!IsEmpty())
return tope->PDato;
else
throw "ERROR";
}
//------------------------------------------------------------------------------
template<class T>
T Pila<T>::Pop()
{
if(!IsEmpty())
{
T a=tope->PDato;
tope=tope->PAnterior;
delete[]tope->PSiguiente;;
return a;
}
}




template<class T>
bool Pila<T>::IsEmpty()const
{
return (tope==NULL);
}




template<class T>
bool Pila<T>::Esta_en_Pila(T dato)
{
if(tope==NULL)
return false;
else
{
NodoDE<T>*aux=tope;
while(aux->PDato!=dato)
{
aux=aux->PAnterior;
}

if(aux->PAnterior==NULL)
return false;
else
return true;
}
}

//-------Declaracion de la clase Pila con listas simplemente enlazadas----------

/*template<class Tipo>
class PilaSE: public ListaSE<Tipo>
{
public:
PilaSE():ListaSE<Tipo>(){};
PilaSE(const PilaSE<Tipo>&p):ListaSE<Tipo>(){};
void Push(Tipo x)
{
if(Vacia())
Adicionar(x);
else
Insertar(x,1);
}


Tipo Top()const
{
if(!IsEmpty())
return Obtener(1);
else
throw Error("Pila vacia");
}



Tipo Pop()const
{
if(!IsEmpty())
{
if(longitud==1)
{
Tipo a=Obtener(1);
Eliminar(1);
return a;
}
else
{
Tipo a=Obtener(1);
Eliminar(1);
return a;
}
}
else
throw Error("Pila vacia");
}
bool IsEmpty()const{return Vacia();}
};

*/
//---------------------------------------------------------------------------
#endif

 
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