miércoles, 21 de septiembre de 2011

Ruta de ida y vuelta





PilaString.h

#pragma once

class PilaString
{
private:
int size;
int cab;//Cabecera de la pila
public:
bool llena;
bool hasElements;

struct structPila
{
wchar_t *dato;
int tam;//Tamaño de cada elemento
} *pila;

public:
PilaString(int); //Constructor
bool push(System::String^ dato);
System::String^ pop ();
System::String^ top ();
int length();
System::String^ getPila ();
};




PilaString.cpp


#include "StdAfx.h"
#include "PilaString.h"

PilaString::PilaString(int tam)
{
size = tam;
cab = -1; //Cabecera apunta a -1, entonces no hay elementos en la pila
pila = new structPila[size];

llena = false;
hasElements = false;
}

//Inserta un elemento en la pila
bool PilaString::push(System::String^ dato)
{
if(llena)
return false;
else
{
cab++;
pila[cab].tam = dato->Length;
pila[cab].dato = new wchar_t[pila[cab].tam];

//Convertimos el string en un arreglo de caracteres!
for(int i=0;i<pila[cab].tam;i++)
pila[cab].dato[i] = dato[i];

hasElements = true;

if(cab == size-1)
llena = true;

return true;
}
}

//Extrae el elemento de la cabecera de la pila
System::String^ PilaString::pop()
{
if(hasElements)
{
System::String^ cadena = top();
cab--;

llena = false;

if(cab<0)
hasElements = false;

return cadena;
}
else
return "La pila está vacía";

}

//Muestra el elemento de la cabecera de la pila
System::String^ PilaString::top()
{
if(hasElements)
{
System::String^ cadena;

//Convertimos el arreglo de caracteres en un string !
for(int i=0;i<pila[cab].tam ;i++)
cadena += pila[cab].dato[i];

return cadena;
}
else
return "La pila está vacía";

}

int PilaString::length()
{
return cab+1;
}

System::String^ PilaString::getPila()
{
System::String^ pilaGeted = "";

for(int i=cab;i>=0;i--)
{
for(int j=0;j<pila[i].tam ;j++)
pilaGeted += pila[i].dato[j];

pilaGeted+="\r\n";//Salto de línea;
}

return pilaGeted;
}


Descargar la solución completa de Pilas

No hay comentarios:

Publicar un comentario