En realidad me acabo de dar cuenta que es suficiente un puntero que se ubique en el tope jejeje, gracias por la ayuda, y sobre C++ aun estoy en los comienzos
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
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);
}
}
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo
{
int num;
struct nodo *sig;
}Nodo;
typedef struct pila
{
Nodo *primero;
Nodo *ultimo;
}Pila;
void resetPila( Pila * );
int estaVacia( Pila * );
void agregarValor( Pila *, int );
void mostrarPila( Pila * );
int borrarTope( Pila * );
void borrarTodo( Pila * );
int main( int argc, char* args[] )
{
Pila miPila;
int valor, opcion;
resetPila( &miPila );
do
{
system("cls");
printf("Ingrese una opcion\n");
printf("\n1.- Ingresar numero a la pila");
printf("\n2.- Mostrar numeros en la pila");
printf("\n3.- Eliminar tope de la pila");
printf("\n4.- Salir\n\n");
scanf("%d", &opcion);
switch( opcion )
{
case 1:
printf("Ingrese el numero para la pila: ");
scanf("%d", &valor);
agregarValor( &miPila, valor );
system("pause");
break;
case 2:
if( estaVacia( &miPila ) == 1 )
printf("\nLa pila esta vacia");
else
mostrarPila( &miPila );
system("pause");
break;
case 3:
if( estaVacia( &miPila ) == 1 )
printf("\nLa pila esta vacia");
else
printf("Se elimino el numero %d\n\n", borrarTope( &miPila ));
system("pause");
break;
case 4:
if( estaVacia( &miPila ) == 0 )
borrarTodo( &miPila );
break;
}
}while( opcion != 4 );
return 0;
}
void resetPila( Pila *miPila )
{
miPila->primero = NULL;
miPila->ultimo = NULL;
}
int estaVacia( Pila *miPila )
{
if( miPila->primero == NULL )
return 1;
else
return 0;
}
void agregarValor( Pila *miPila, int valor )
{
Nodo *nodo;
nodo = (Nodo *)malloc(sizeof(Nodo));
nodo->num = valor;
nodo->sig = NULL;
if( estaVacia( miPila ) == 1 )
miPila->primero = nodo;
else
miPila->ultimo->sig = nodo;
miPila->ultimo = nodo;
}
void mostrarPila( Pila *miPila )
{
Nodo *nodo;
for( nodo = miPila->primero; nodo != NULL; nodo = nodo->sig )
printf("%d\n", nodo->num);
}
int borrarTope( Pila *miPila )
{
Nodo *nodo;
int valor;
if( miPila->ultimo == miPila->primero )
{
valor = miPila->ultimo->num;
free( miPila->ultimo );
}
else
{
nodo = miPila->primero;
while( nodo->sig != miPila->ultimo )
nodo = nodo->sig;
valor = miPila->ultimo->num;
free( miPila->ultimo );
miPila->ultimo = nodo;
}
return valor;
}
void borrarTodo( Pila *miPila )
{
Nodo *nodo;
nodo = miPila->primero->sig;
while( miPila->ultimo != NULL )
{
free( miPila->primero );
miPila->primero = nodo;
if( nodo != miPila->ultimo )
nodo = nodo->sig;
}
}
void generar( int **arreglo, int fil, int col )
{
int i;
arreglo = (int **)malloc(fil*sizeof(int *));
for( i = 0; i < fil; i++ )
arreglo[i] = (int *)malloc(col * sizeof(int));
}