• Martes 21 de Mayo de 2024, 12:20

Autor Tema:  pila con listas y clases  (Leído 1008 veces)

dunkelheit

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
pila con listas y clases
« en: Sábado 7 de Noviembre de 2009, 00:41 »
0
hola tenia un problema de invertir el orden de una fila secuencial y la idea era guardarla en una pila y luego pasarla a otra fila , hize mi programa pero lo quise hacer con mas funciones para hacerlo mas ordenados, el problema es que al poner de argumento la pila al empilar ...no empila.

Código: C++
  1. #include <iostream>
  2. #include <conio.h>
  3. using namespace std;
  4.  
  5. struct nodo{
  6.        int valor;
  7.        nodo *sig;
  8. };
  9.  
  10. class pila{
  11.       private:
  12.               nodo *cima;
  13.       public:
  14.               void empilar(int);
  15.               int desempilar();
  16.               void mostrar();
  17.               pila();
  18.               ~pila();      
  19. };
  20.  
  21. pila::pila(){
  22.      cima = NULL;            
  23. }
  24.  
  25. pila::~pila(){
  26.    nodo * n = new nodo;
  27.    n = cima;
  28.    while(n!=NULL){
  29.         cima = n;
  30.         n=n->sig;
  31.         delete(cima);            
  32.    }
  33.    delete(n);                            
  34. }
  35.  
  36. void pila::empilar(int v){
  37.      nodo * nuevo = new nodo;
  38.      nuevo->valor = v;
  39.      nuevo->sig = NULL;
  40.      if(cima != NULL){
  41.         nuevo->sig = cima;      
  42.      }
  43.      cima = nuevo;    
  44. }
  45. int pila::desempilar(){
  46.      int valor;
  47.      if(cima==NULL) cout<<"Pila vacia";
  48.      else{
  49.           valor = cima->valor;
  50.           cima = cima->sig;
  51.      }
  52.      return valor;
  53. }
  54.  
  55. void pila::mostrar(){
  56.    nodo * n = new nodo;
  57.    n = cima;
  58.    if(n==NULL){cout<<"nVACIO"<<endl;}
  59.    while(n!=NULL){
  60.        cout<<"Valor:"<<n->valor<<endl;
  61.        n=n->sig;              
  62.    }
  63.    
  64. }
  65.  
  66. int menu(){
  67.    int op;
  68.    cout<<"[1]Crear fila"<<endl;
  69.    cout<<"[2]Invertir fila"<<endl;
  70.    cout<<"elegir:";
  71.    cin>>op;
  72.    return op;
  73. }
  74. void fila(){
  75.    FILE *F;
  76.    int n,dato;
  77.    F=fopen("datos.txt","a+");  
  78.    cout<<"cuantos datos desea ingresar:";
  79.    cin>>n;
  80.    for(int i=0;i<n;i++){
  81.        cout<<"escribe el dato:";cin>>dato;    
  82.        fwrite(&dato,sizeof(dato),1,F);      
  83.    }
  84.    fclose(F);
  85. }
  86.  
  87. int empilarfila(pila p){
  88.      FILE *F;
  89.      int dato,i=0;
  90.       F=fopen("datos.txt","r");
  91.       fread(&dato,sizeof(dato),1,F);
  92.       while(!feof(F)){
  93.             cout<<"empilando:"<<dato<<endl;
  94.             p.empilar(dato);
  95.             fread(&dato,sizeof(dato),1,F);          
  96.             i++;
  97.       }
  98.       return i;
  99. }
  100. void desempilarfila(int n,pila p){
  101.      FILE *G;
  102.      int dato;
  103.      G=fopen("back.txt","a+");
  104.      for(int i=0;i<n;i++){
  105.         dato=p.desempilar();
  106.         fwrite(&dato,sizeof(dato),1,G);    
  107.      }
  108.      fclose(G);
  109.      
  110. }
  111. int main(){
  112.    pila p1;
  113.    int opcion,n;
  114.    do{
  115.       opcion=menu();
  116.       if(opcion==1){
  117.            fila();        
  118.       }  
  119.       else{
  120.            if(opcion==2){
  121.                n=empilarfila(p1);
  122.                p1.mostrar();
  123.                //desempilarfila(n,p1);          
  124.            }
  125.       }
  126.        
  127.    }while(opcion);
  128.    
  129.    
  130. return 0;
  131. }
  132.  

espero que me puedan ayudar cual seria el problema ..gracias