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

[0] Índice de Mensajes