Pilas (Ejemplo)
(1/1)
@synthesize:
Intento aplicar una Lista a un vector (Si, en vez de sacar elementos los dejo a 0) pero no funciona del todo bien. ¿Ideas?
Código
#include <stdio.h>
#define PILA_MAX 5
/*
* Implementación de una pila
* en un vector de 5 elementos
* por Sergio L. para
* daemonfreedom.blogspot.com
* Compilable bajo GCC
*/
void mostrarPila(); // Mostrar Pila
void pilaPush(int); // Acción PUSH
void pilaPop(int); // Acción POP
void inicializa(); // Inicializar la Pila
int pila[PILA_MAX]; // Definición de la Pila
int cont; // Contador
int main (void)
{
int i2;
cont =0;
inicializa();
do
{
for (i2=0;i2<PILA_MAX;i2++) // Llenamos la pila
{
pilaPush(i2);
}
mostrarPila();
for (i2=PILA_MAX;i2>0;i2--) // Vaciamos la pila tal y como indica LIFO
{
pilaPop(i2);
}
mostrarPila(); // Mostramos la pila
cont++;
} while (cont!=6);
return 0;
}
void inicializa()
{
int i;
for (i=0;i<PILA_MAX;i++)
{
pila[i] =0;
}
}
void pilaPop(dnum)
{
pila[dnum] =0;
}
void pilaPush(dnum2)
{
pila[dnum2] =cont;
}
void mostrarPila()
{
int interior;
for (interior=PILA_MAX;interior>0;interior--)
{
fprintf(stdout, "Elemento %d es %d\n", interior, pila[interior]);
}
}
nicolas_cof:
http://es.wikipedia.org/wiki/Pila_%28inform%C3%A1tica%29
Código:
/* Implementacion en C de Pila (Stack) by nicolas_cof */
#include <stdio.h>
#include <stdlib.h>
typedef struct _nodo
{
int num;
struct _nodo *siguiente;
} nodo;
typedef nodo *pila;
typedef nodo *pNodo;
void push( pila*, int*, int );
int pop( pila*, int* );
int altura( int* );
int main( void )
{
int elementos = 0;
pila p = NULL;
printf( "altura:%d\n", altura( &elementos ) );
printf( "push:2\n" );
push( &p, &elementos, 2 );
printf( "push:3\n" );
push( &p, &elementos, 3 );
printf( "altura:%d\n", altura( &elementos ) );
printf( "pop:%d\n", pop( &p, &elementos) );
printf( "pop:%d\n", pop( &p, &elementos) );
printf( "altura:%d\n", altura( &elementos ) );
return 0;
}
void push( pila *p, int *elementos, int num )
{
pNodo nuevo;
/* creo un nodo nuevo */
nuevo = malloc( sizeof( nodo ) );
/* asigno el valor al contenido del nodo */
nuevo->num = num;
/* le asigno la pila al siguiente del nuevo nodo */
nuevo->siguiente = *p;
/* el comiendo de nuestra pila es el nodo nuevo */
*p = nuevo;
/* aumento en uno la cantidad de elementos de la pila */
++(*elementos);
}
int pop( pila *p, int *elementos )
{
pNodo nodo; /* nodo auxiliar */
int num;
/* si no hay ningun elemento en la pila devuelve 0 */
if ( *elementos <= 0 ) return 0;
/* nodo apunta al primer elemento de la pila */
nodo = *p;
/* asignamos a p toda la pila menos el primer elemento */
*p = nodo->siguiente;
/* guardamos el valor contenido en el nodo */
num = nodo->num;
/* liberamos la memoria asignada al nodo en el push */
free( nodo );
/* disminuyo en uno la cantidad de elementos de la pila */
--(*elementos);
return num;
}
int altura( int *elementos )
{
/* devuelve la cantidad de elementos de la pila */
return (*elementos);
}
Salida...
Código:
altura:0
push:2
push:3
altura:2
pop:3
pop:2
altura:0
Salu10.
cbug:
1- Trata de no usar variables globales.
2- En la teoría de pilas se específica que el pop devuelve el elemento.
3- El problema supongo que está en el bucle para eliminar elementos ya que su condición es > 0, cuando tus push comienzan precisamente en el elemento 0.
Navegación