Implementación de una pila de enteros

Alejandro Sierra Domínguez
 
// La pila se almacena en el vector de enteros p[],
// y el indicador de siguiente posición vacía lo indica ‘top’.

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
 
#define MAX 100
#define NODATO -1
 
int top=0,dato;
int p[MAX];
FILE *fichero;
 
void push(int);
int pop(void);
void borrar(void);
void salir(void);
void extraer(void);
void listar(void);
 
int main()
{
      char s[20];
      int t;
      top=0;
      for(t=0;t<MAX;++t) p[t]=0;
      extraer();
      for( ; ; ){
           //system("cls"); borra la pantalla
           printf("n Introducir,Recuperar,Borrar,Salir,Listar n");
           printf("(escribir la accion deseada:  ");
           gets(s);
           *s=toupper(*s);
           switch(*s){
                      case ‘I’: //system("cls");
                                printf("n introduce el dato a colocar en la pila : ");
                                dato=0;
                                scanf("%d",&dato);
                                push(dato);
                                fflush(stdin);
                                break;
                      case ‘R’: //system("cls");
                                dato=pop();
                                printf("El dato recuperado es %d n",dato);
                                break;
                      case ‘S’: salir();
                                return;
                                break;
                      case ‘B’: borrar();
                                break;
                      case ‘L’:listar();
                                break;
                     }
                  }
      system("PAUSE");
      return 0;
}
 
void push(int i){
     if(top>MAX){
                 printf("n Pila llena n");
                 return;
                 }
     p[top]=i;
     top++;
     }
 
int pop(void){
    if(top<=0){
               printf("n Pila vacia n");
               return(NODATO);
               }
    top–;
    return p[top];
    }
 
void extraer(void){
     int i,d;
     fichero=fopen ("datos.dat","r"); //poner el nombre de fichero que se quiera
     if(fichero==NULL){
                       printf(" n El fichero no se ha abiero o no existe n");
                       return;
                       }
     i=0;
     fscanf(fichero,"%d",&d);
     while (feof(fichero)==0){  
           p[i]=d;
           printf(" %d ",p[i]);
           i++;
           fscanf(fichero,"%d",&d);
           }
     top=i;
     fclose(fichero);
     }
 
void borrar(void){
     if(top<=0){
                printf("n Pila vacia n");
                return;
                }
     top–;
     printf("n se borra %d en posicion %d ",p[top],top);
     p[top]=0;
     return;
     }
 
void salir(void){
     int i;
     fichero=fopen("datos.dat","w");
     if(fichero==NULL){
                       printf("n el fichero no se ha podido crear n");
                       return;
                       }
     i=0;
     for(i=0;i<top;i++){
           fprintf(fichero,"%dn",p[i]);
                      }
     fclose(fichero);
     return;
     }
 
void listar(void){
     int i;
     for(i=0;i<top;i++){
                        printf(" %d ",p[i]);
                        }
     return;
     }

Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

Una respuesta a Implementación de una pila de enteros

  1. Ricardo dijo:

    unos detalles:(1) he quitado el ‘conio.h'(2) en el menu, la opción R, la recuperación se hace con ‘dato'(3) la función ‘extraer()’ info de disco, quedaría más elegante si la carga de datos la hicieses con ‘push()’muy bien,ric.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s