elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pilas (Ejemplo)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pilas (Ejemplo)  (Leído 8,384 veces)
@synthesize
Wiki

Desconectado Desconectado

Mensajes: 640


Another Brick in the Wall


Ver Perfil WWW
Pilas (Ejemplo)
« en: 27 Junio 2010, 06:42 am »

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
  1. #include <stdio.h>
  2. #define PILA_MAX 5
  3.  
  4. /*
  5.  * Implementación de una pila
  6.  * en un vector de 5 elementos
  7.  * por Sergio L. para
  8.  * daemonfreedom.blogspot.com
  9.  * Compilable bajo GCC
  10.  */
  11.  
  12. void mostrarPila();                                 // Mostrar Pila
  13. void pilaPush(int);                                 // Acción PUSH
  14. void pilaPop(int);                                  // Acción POP
  15. void inicializa();                                  // Inicializar la Pila
  16.  
  17. int pila[PILA_MAX];                                 // Definición de la Pila
  18. int cont;                                           // Contador
  19.  
  20. int main (void)
  21. {
  22. int i2;
  23. cont =0;
  24.  
  25. inicializa();
  26. do
  27. {
  28. for (i2=0;i2<PILA_MAX;i2++)         // Llenamos la pila
  29. {
  30. pilaPush(i2);
  31. }
  32. mostrarPila();
  33.  
  34. for (i2=PILA_MAX;i2>0;i2--)         // Vaciamos la pila tal y como indica LIFO
  35. {
  36. pilaPop(i2);
  37. }
  38. mostrarPila();                      // Mostramos la pila
  39.  
  40. cont++;
  41.  
  42. } while (cont!=6);
  43.  
  44. return 0;
  45. }
  46.  
  47. void inicializa()
  48. {
  49. int i;
  50. for (i=0;i<PILA_MAX;i++)
  51. {
  52. pila[i] =0;
  53. }
  54. }
  55.  
  56. void pilaPop(dnum)
  57. {
  58. pila[dnum] =0;
  59. }
  60.  
  61. void pilaPush(dnum2)
  62. {
  63. pila[dnum2] =cont;
  64. }
  65.  
  66. void mostrarPila()
  67. {
  68. int interior;
  69. for (interior=PILA_MAX;interior>0;interior--)
  70. {
  71. fprintf(stdout, "Elemento %d es %d\n", interior, pila[interior]);
  72. }
  73. }
  74.  


« Última modificación: 27 Junio 2010, 06:52 am por Daemon Freedom » En línea

nicolas_cof


Desconectado Desconectado

Mensajes: 348


Into the Wild


Ver Perfil WWW
Re: Pilas (Ejemplo)
« Respuesta #1 en: 27 Junio 2010, 08:25 am »

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.


En línea

cbug

Desconectado Desconectado

Mensajes: 147



Ver Perfil
Re: Pilas (Ejemplo)
« Respuesta #2 en: 27 Junio 2010, 19:29 pm »

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejemplo del uso de udpclient
.NET (C#, VB.NET, ASP)
juanedwin 1 2,155 Último mensaje 10 Abril 2022, 04:32 am
por BloodSharp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines