Autor
|
Tema: Pilas (Ejemplo) (Leído 8,567 veces)
|
@synthesize
Wiki
Desconectado
Mensajes: 640
Another Brick in the Wall
|
Intento aplicar una Lista a un vector (Si, en vez de sacar elementos los dejo a 0) pero no funciona del todo bien. ¿Ideas? #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 ]); } }
|
|
« Última modificación: 27 Junio 2010, 06:52 am por Daemon Freedom »
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
http://es.wikipedia.org/wiki/Pila_%28inform%C3%A1tica%29/* 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... altura:0 push:2 push:3 altura:2 pop:3 pop:2 altura:0 Salu10.
|
|
|
En línea
|
|
|
|
cbug
Desconectado
Mensajes: 147
|
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.
|
|
|
En línea
|
|
|
|
|
|