Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[Ejemplo] Pilas en C

Estas en el tema de [Ejemplo] Pilas en C en el foro de C/C++ en Foros del Web. Para los que esteis estudiando listas enlazadas sabreis que las pilas son un tipo concreto: LIFO (Last In, First Out). Al caso, no voy a ...
  #1 (permalink)  
Antiguo 29/05/2012, 05:08
 
Fecha de Ingreso: diciembre-2008
Mensajes: 50
Antigüedad: 15 años, 11 meses
Puntos: 0
Información [Ejemplo] Pilas en C

Para los que esteis estudiando listas enlazadas sabreis que las pilas son un tipo concreto: LIFO (Last In, First Out). Al caso, no voy a explicarlas, sólo voy a dejar un ejemplo que he desarrollado yo mismo con comentarios explicativos.

:)

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct pila
  5. {
  6. int clave;
  7. struct pila *psig;
  8. }pila;
  9.  
  10. pila *pmaestro;
  11. /*Declaración de funciones*/
  12. pila *NuevoElem();
  13. void push(int dato);
  14. int pop(void);
  15. void imprimir(pila *);
  16. /*Fin de las declaraciones*/
  17.  
  18.  
  19. /*******************************FUNCION MAIN*****************************/
  20.  
  21. main()
  22. {
  23.   char m;
  24.   int k;
  25.   puts("Anadir un elemento [A], borrar el ultimo elemento [B], listar todo [L] o salir [S]: ");
  26.   while(1){
  27.   printf("[A], [B], [L] o [S]: ");
  28.   m=getchar();
  29.   getchar();
  30.  
  31.   switch(m){
  32.   case 'A': printf("Introduzca un número: "); scanf("%d", &k); getchar(); push(k); break;
  33.   case 'B': pop(); break;
  34.   case 'L': imprimir(pmaestro); break;
  35.   case 'S': exit(0);
  36.   default: puts("\nSaliendo del programa...");
  37.  
  38.   return 0;
  39.   }
  40. }
  41. }
  42.  
  43. /**************************************************************************/
  44.  
  45. void push(int dato) /*Añade un nuevo elemento a la pila*/
  46. { pila *q = NuevoElem();
  47. q->psig = pmaestro;
  48. q->clave = dato;
  49. pmaestro = q;
  50. }
  51.  
  52. int pop(void) /*Esta función "desecha" el último elemento introducido*/
  53. { pila *q; int x;
  54.   if (pmaestro==NULL) { puts("Lista vac¡a"); return EOF; }
  55.   else{
  56.   x = pmaestro->clave;
  57.   q = pmaestro;
  58.   pmaestro = pmaestro->psig;
  59.   free(q);
  60.  
  61.   return x;
  62. }}
  63.  
  64. pila *NuevoElem() /*Crea un nuevo elemento. Atento: retorna un puntero*/
  65. { pila *q = (pila *)malloc(sizeof(pila));
  66.   if (q==NULL) { printf("Falta memoria"); exit(0);}
  67.   return q;
  68. }
  69.  
  70. void imprimir(pila *pmaestro) /*Imprime todos los datos albergados en la pila hasta el momento*/
  71. {
  72.  printf("Las claves introducidas son: ");
  73.  while(pmaestro!=NULL)
  74.  {
  75.  printf("%d ", pmaestro->clave);
  76.  pmaestro = pmaestro->psig;
  77.  }
  78.  printf("\n");
  79.  
  80. }

Etiquetas: funcion, int, pilas, programa, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:42.