| Jorge Luis Valdes(UCI)-(PILA) |
|
|
|
| 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.
|
|
|
|
|