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

duda con pilas

Estas en el tema de duda con pilas en el foro de C/C++ en Foros del Web. Hola q tal, aprendiendo sobre el tema de pilas, hice un pequeño código donde solamente esta insertando en la pila cualquier caracter y lo muestra, ...
  #1 (permalink)  
Antiguo 04/10/2010, 22:17
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 12 años, 8 meses
Puntos: 0
duda con pilas

Hola q tal, aprendiendo sobre el tema de pilas, hice un pequeño código donde solamente esta insertando en la pila cualquier caracter y lo muestra, el problema es q me marca al introducir por ejemplo un 1 me muestra q hay 0 elementos en la pila, este es el código

Código PHP:
struct pila
{
int item[30];    //espacio para almacenar los elementos insertados
int top;                    //para saber cual es utlimo elemento(cima-top)de la pila
}pila;

struct pila a;
//int valReturn;
int pop(struct pila *S);
//int stackEmpty(struct stack *);
void push(struct pila *,int);
int expr;
int valor;


void main()
{

    
cout<<"Inserta una expresion";
    
    
cin>>expr;

    switch(
expr)
    {
        case 
1:
                
push(&a,valor);
                
valor=pop(&a);
                
cout<<"la cima de la pila es"<<valor<<"\n";
                                
push(&a,valor);
                
getch();
                break;
        case 
2:
                
cout<<"en proceso";
                break;
        default:
                break;
    }
    
getche();
}

//push-> insertar
void push(struct pila *S,int e)
{


 
S->item[S->top]=e//asigna el valor 'e' en la casilla s-<top del arreglo item de la pila
 
S->top++;//se incrementa la cima
}



//pop->quitar
int pop(struct pila *S)
{
 
//int valItem,valTop;
 
int valReturn;
  
S->top--;
 
valReturn=S->item[S->top];

 return 
valReturn;

  #2 (permalink)  
Antiguo 05/10/2010, 04:14
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 14 años, 2 meses
Puntos: 61
Respuesta: duda con pilas

Al menos falta inicializar "top".
  #3 (permalink)  
Antiguo 05/10/2010, 22:11
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: duda con pilas

si inicializo la variable top

int top[30];

me marca 4 errores






Código PHP:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>



struct pila
{
int item[30];    //espacio para almacenar los elementos insertados
int top[30];                    //para saber cual es utlimo elemento(cima-top)de la pila
}pila;

struct pila a;
//int valReturn;
int pop(struct pila *);
//int stackEmpty(struct stack *);
void push(struct pila *,int);
int expr;
int valor;


void main()
{

     
cout<<"Inserta una expresion";

     
cin>>expr;

     switch(
expr)
     {
          case 
1:
                     
push(&a,valor);
                     
valor=pop(&a);
                     
cout<<"la cima de la pila es"<<valor<<"\n";
                                          
push(&a,valor);
                     
getch();
                     break;
          case 
2:
                     
cout<<"en proceso";
                     break;
          default:
                     break;
    } 
    
getche(); 


//push-> insertar 
void push(struct pila *S,int e

 
S->item[S->top]=epila//cannot convert  'int *'   to 'int' in function push(pila *, int)
 
S->top++; // L value required  in push(pila *, int) q no sé ni de donde saca la L




//pop->quitar 
int pop(struct pila *S

 
//int valItem,valTop; 
 
int valReturn
  
S->top--; // L value required  in pop(pila *)
 
valReturn=S->item[S->top]; //cannot convert  'int *'   to 'int' in function pop(pila *)

 
return valReturn

supongo q es por los punteros, aunque no le veo el error en q parte
  #4 (permalink)  
Antiguo 05/10/2010, 22:25
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 14 años, 6 meses
Puntos: 1
Respuesta: duda con pilas

en primera top no debe ser un arreglo, podria ser un apuntador el cual apuntara al ultimo elemento insertado.
en segunda debes considerar que el numero de elementos insertados no sobrepasen a la de tu pila.
Para incialiaziar debes declarar una funcion que inicialice top en -1.

con respecto a tu duda de que es L, lo entederas mejor cuando estudies compiladores
  #5 (permalink)  
Antiguo 06/10/2010, 00:49
Avatar de Lizy94  
Fecha de Ingreso: diciembre-2009
Mensajes: 149
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: duda con pilas

oye gracias me has dado una mejor idea en cuanto a pilas, el código lo modifique un poco aunque sigue = de sencillo, y me marca unos errores, es este

Código PHP:

typedef struct Spila
{
 
int item[30];   //elementoa
 
int top;//cima
};

void crea(Spila *);
int estaVacia(Spila *);
int estaLlena(Spila *);
void push(Spila *,int);
void pop(Spila *,int *);
Spila pila;
    
int e;
    
int dato,Sdato;

void main()
{

    
int opcion;
    
cout<<"Inserta una expresion\n";
    
cout<<"QUE DEDEAS HACER <inserta el numero de la operacion deseada>\n\n";

    
cout<<"1. insertar en la pila ";
    
cout<<"2. eliminar un elemento de la pila";
    
cout<<"3. visualizar la pila";
    
cin>>opcion;

    switch(
opcion)
    {
        case 
1:
                 
crea(&pila);

                 if(
estaLlena(&pila)){ printf("\nPila llena."); getch();}
                 else
                     {
                  
cout<<"inserta un dato";
                  
cin>>dato;
                  
push(&pila,dato);
                  
Sdato=pop(&pila,&e);//not an allowed in function main()
                  
cout<<"la cima de la pila es"<<Sdato<<"\n";
                  
push(&pila,dato);
                  
getch();
                  }

                break;
        case 
2:

                
cout<<"en proceso";
                break;
        default:
                break;
    }
    
getche();
}

void crea(Spila *pila) { pila->top=-1;}

int estaVacia(Spila *pila)
int vacia;
  if(
pila==-1){vacia=0;}else {vacia=1;}//cannot convert to int to Spila*
  
return vacia;
}
int estaLlena (Spila *pila ) { return(pila==30);}//cannot convert to int to Spila*
void push(Spila *pila,int e){ pila->item[++pila->top]=e;}
void pop(Spila *pila,int *e){ *e=pila->item[pila->top--];} 
a segun yo no le veo el error, y otra duda también
lo quise probar con malloc y eliminé lo que son las funciones de crea, estaVacia y estaLlna y cree esta funcion

Código PHP:
int iniciaPila(Spila *pila)
{
 
Spila *size;
 
int vacia;
 
size=(pila*)malloc(sizeof(struct Lista));
 if(
size!=NULL)
 {
vacia=0;}
 else
 {
vacia=1;}
 return 
vacia;

y en el main quedó así, aunqe me marca varios errores,

Código PHP:

    
case 1:
                    case 
1:
                 
iniciaPila(&pila);

                 if(!
iniciaPila(&pila)){ printf("\nPila llena."); getch();}
                 else
                     {
                  
cout<<"inserta un dato";
                  
cin>>dato;
                  
push(&pila,dato);
                  
Sdato=pop(&pila,&e);
                  
cout<<"la cima de la pila es"<<Sdato<<"\n";
                  
push(&pila,dato);
                  
getch();
                  }

                break; 
si me pudieses decir q esta mal de favor en el primer código y dar una idea gral para implementar en este codigo la instruccion malloc por favor

Última edición por Lizy94; 06/10/2010 a las 01:05
  #6 (permalink)  
Antiguo 06/10/2010, 08:10
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 14 años, 2 meses
Puntos: 61
Respuesta: duda con pilas

Si pop() es void, no tiene sentido hacer x = pop( .. );
  #7 (permalink)  
Antiguo 06/10/2010, 08:12
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 14 años, 2 meses
Puntos: 61
Respuesta: duda con pilas

Si p es un puntero no tiene sentido compararlo contra un entero, como -1. Tiene mas sentido compararlo contra otro puntero o contra NULL.

Etiquetas: pilas
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




La zona horaria es GMT -6. Ahora son las 20:08.