Cita de: erest0r en 13 Febrero 2014, 00:51 AM
Logre acomodarlo de forma que ahora si cumple su cometido, aunque buscare maneras mas eficientes de trabajarlo, estas son las 2 funciones que modifique:Código (c) [Seleccionar]
int borrarTope( Pila *miPila )
{
Nodo *nodo;
int valor;
if( miPila->ultimo == miPila->primero )
{
valor = miPila->ultimo->num;
free( miPila->ultimo );
miPila->primero = NULL;
miPila->ultimo = NULL;
}
else
{
nodo = miPila->primero;
while( nodo->sig != miPila->ultimo )
nodo = nodo->sig;
valor = miPila->ultimo->num;
free( miPila->ultimo );
miPila->ultimo = nodo;
miPila->ultimo->sig = NULL;
}
return valor;
}
void borrarTodo( Pila *miPila )
{
while( miPila->primero != NULL )
{
Nodo *nodo;
nodo = miPila->primero;
miPila->primero = miPila->primero->sig;
free(nodo);
}
}
De todas maneras, gracias por haberte tomado la molestia
Ahora entiendo por que haces el while en borrarTope, tienes los punteros invertidos. Si inviertes la dirección de los punteros, obtendrás una clase pila mucho más eficiente. Sigo pensando que deberías mirarte el enlace, ya que tienes mal planteada la pila.
Saludos