programa de pila dinamica

¿Has encontrado un error? ¿Tienes la solución? Deja tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por estudiante con únicamente conocimiento básico del lenguaje, no de programación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <stdio.h>
#include <stdlib.h>
 
/* estructura auto-referenciada */
struct nodoPila {      int dato;                  /* define un dato como int */
   struct nodoPila *ptrSiguiente; /* apuntador a nodoPila */
}; /* fin de la estructura nodoPila */
 
typedef struct nodoPila NodoPila; /* sinónimo de la estructura nodoPila */typedef NodoPila *ptrNodoPila; /* sinónimo para NodoPila* */
 
/* prototipos */
void empujar( ptrNodoPila *ptrCima, int info );
int sacar( ptrNodoPila *ptrCima );int estaVacia( ptrNodoPila ptrCima );
void imprimePila( ptrNodoPila ptrActual );
void instrucciones( void );
 
/* la función main comienza la ejecución del programa */int main()
{ 
   ptrNodoPila ptrPila = NULL; /* apunta al tope de la pila */
   int eleccion; /* elección de menú del usuario */
   int valor;  /* entrada int del usuario */ 
   instrucciones(); /* despliega el menú */
   printf( "? " );
   scanf( "%d", &eleccion );
    /* mientras el usuario no introduzca 3 */
   while ( eleccion != 3 ) { 
 
      switch ( eleccion ) { 
          /* empuja el valor dentro de la pila */
         case 1:      
            printf( "Introduzca un entero: " );
            scanf( "%d", &valor );
            empujar( &ptrPila, valor );            imprimePila( ptrPila );
            break;
 
         /* saca el valor de la pila */
         case 2:       
            /* si la pila no esta vacía */
            if ( !estaVacia( ptrPila ) ) {
               printf( "El valor sacsdo es %d.n", sacar( &ptrPila ) );
            } /* fin de if */ 
            imprimePila( ptrPila );
            break;
 
         default:            printf( "Eleccion no valida.nn" );
            instrucciones();
            break;
 
      } /* fin de switch */ 
      printf( "? " );
      scanf( "%d", &eleccion );
   } /* fin de while */
    printf( "Fin del programa.n" );
 
   return 0; /* indica terminación exitosa */
 
} /* fin de main */ 
/* despliega las instrucciones del programa para el usuario */
void instrucciones( void )
{ 
   printf( "Introduzca su eleccion:n"      "1 para empujar un valor dentro de la pilan"
      "2 para sacar un valor dwe la pilan"
      "3 para terminar el programan" );
} /* fin de la función instrucciones */
 /* Inserta un nodo en la cima de la pila */
void empujar( ptrNodoPila *ptrCima, int info )
{ 
   ptrNodoPila ptrNuevo; /* apuntador al nuevo nodo */
    ptrNuevo = malloc( sizeof( NodoPila ) );
 
   /* inserta el nodo en la cima de la pila */
   if ( ptrNuevo != NULL ) {   
      ptrNuevo->dato = info;      ptrNuevo->ptrSiguiente = *ptrCima;
      *ptrCima = ptrNuevo;
   } /* fin de if */
   else { /* no queda espacio disponible */
      printf( "%d no se inserto. Memoria insuficiente.n", info );   } /* fin de else */
 
} /* fin de la función empujar */
 
/* Elimina un nodo de la cima de la pila */int sacar( ptrNodoPila *ptrCima )
{ 
   ptrNodoPila ptrTemp; /* apuntador a un nodo temporal */
   int valorElim; /* valor del nodo */
    ptrTemp = *ptrCima;
   valorElim = ( *ptrCima )->dato;
   *ptrCima = ( *ptrCima )->ptrSiguiente;
   free( ptrTemp );
    return valorElim;
 
} /* fin de la función sacar */
 
/* Imprime la pila */void imprimePila( ptrNodoPila ptrActual )
{ 
 
   /* si la pila esta vacía */
   if ( ptrActual == NULL ) {      printf( "La pila esta vacia.nn" );
   } /* fin de if */
   else { 
      printf( "La pila es:n" );
       /* mientras no sea el final de la pila */
      while ( ptrActual != NULL ) { 
         printf( "%d --> ", ptrActual->dato );
         ptrActual = ptrActual->ptrSiguiente;
      } /* fin de while */ 
      printf( "NULLnn" );
   } /* fin de else */
 
} /* fin de la función imprimePila */ 
/* Devuelve 1 si la pila está vacía, de lo contrario 0 */
int estaVacia( ptrNodoPila ptrCima )
{ 
   return ptrCima == NULL; 
} /* fin de la función estaVacia */

14 comentarios en "programa de pila dinamica"

Miriam

Hola buenisimo tu codigo, lo corri en c++ y es excelente.. tengo una duda como puedo ordenar este codigo por medio de la insercion directa??
De manera que al sacar un elemento no me saque el ultimo introducido si no los dos ultimos introducidos?

Punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C <code lang="c">Código en C</code>
  • Si es lenguaje Pascal <code lang="pascal">Aquí dentro el código de Pascal</code>.

De esta manera el código coloreas el código.

Deja un comentario

Suscribirse a los comentarios.