Ver Mensaje Individual
  #5 (permalink)  
Antiguo 01/07/2010, 18:06
maur1c10
 
Fecha de Ingreso: octubre-2009
Mensajes: 25
Antigüedad: 15 años
Puntos: 0
Respuesta: ayuda con pilas

Cita:
Iniciado por margarito04 Ver Mensaje
mas bien STACKELEMENT deberia ser de tipo vehiculo, asi

struct vehiculo{
char placa[7];
char cat[3];
char marca[15];
char nombre[50];
}v1,v2,v3,v4,v5,v6,v7,v8,v9;

typedef vehiculo STACKELEMENT;

typedef struct {
int top; //representa la parte final de tu cola = al numero de elementos
int botton; //agregar esta variable
STACKELEMENT items[STACKSIZE];
} STACK;

asi al momento de insertar Insertas en la posicion top e incrementas en uno top, y al sacar obtienes el valor en la posicion botton y lo incremas en uno. en un inicio los dos tendrian 0.
margarito04 ahi pones algo de una cola pero en mi caso que es pila no afectaria?

bueno voy a poner a continuacion el codigo completo como lo tengo al compilar me da en la declaracion de la funcion push un error que dice ) expected y tambien en cada parte que uso push me dice cannot convert char to STACK o al reves

Código:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <string.h>

#define TRUE 1
#define FALSE 0
#define STACKSIZE 100
#define num 9

/* definicion de tipos de datos */
typedef char STACKELEMENT;
typedef struct {
	int top;
	STACKELEMENT items[STACKSIZE];
        } STACK;

/* estructura de datos vehiculo */
struct vehiculo{
         char placa[7];
         char cat[14];
         char marca[15];
         char nombre[50];
        } vehiculo[num];


/*prototipos de funciones de la pila y funciones para el tipo vehiculo */
int introducir(STACK , int n);
int retirar(STACK , STACK , int n);
void verificar(STACK , int n);
void Clear(STACK *);
int Empty(STACK *);
int Full(STACK *);
STACKELEMENT Pop(STACK *);
void Push(STACK *, vehiculo);

/* funcion principal */
void main() {
 STACKELEMENT a;
 int p, i;
 STACK b;
 STACK *c=&b;
 STACK d;
 STACK *e=&d;
 d.top=-1;
 b.top=-1;
 clrscr();
 int op, n=0;

 printf("\n digite un numero segun la accion que desea realizar:\n1.Intruducir un vehiculo \n2.Retirar un vehiculo \n3.Verificar informacion de ultimo  vehiculo ingresado \n4.Salir \n");
 scanf("%i", &op);
 switch(op)
 {
   case 1:introducir(*c, n);
   break;
   case 2:retirar(*c, *e, n);
   break; 
   case 3:verificar(*c, n);
   break;
   case 4:exit(1);
   break;
 }
 getch();
}

 
/* funcion para introducir datos de vehiculo */
int introducir(STACK c, int n)
{
 char kat[3];
 printf("\n digite el nombre del propietario:\n");
 cin.getline (vehiculo[n].nombre,50);
 printf("\m digite el no. de placa del vehiculo (max. 6 digitos)\n:");
 cin.getline (vehiculo[n].placa,7);
 printf("\n digite la marca del vehiculo:\n");
 cin.getline (vehiculo[n].marca,15);;
 printf("\n digite la categoria del vehiculo segun la letra mostrada:\n p-particular mb-microbus a-alquiler c-camion \n");
 gets(kat);
 if(kat[0]=='p')
   strcpy(vehiculo[n].cat,"particular"); 
 else
  if((kat[0]=='m')&&(kat[1]=='b'))
    strcpy(vehiculo[n].cat,"microbus");
  else
    if(kat[0]=='a')
      strcpy(vehiculo[n].cat,"alquiler");
    else
      if(kat[0]=='c')
         strcpy(vehiculo[n].cat,"camion");
      else
       printf("\n esa categoria no existe");
 n++;
 Push(c, vehiculo[n]); 
 getch();
 return n;
}

/* funcion para retirar vehiculo usando la placa como identificador */ 
int retirar(STACK c, STACK e, int n)
{
 STACK p;
 STACK *p1=&p;
 p.top=-1;
 char plak[7]; 
 printf("\n digite el numero de placa del vehiculo que desea retirar:\n");
 gets(plak);
 if(vehiculo[n].placa==plak)
  e=Pop(&c);
 else
 { 
  while((vehiculo[n].placa!=plak)&&((&c)!=NULL))
   e=Pop(&c);
  if(vehiculo[n].placa==plak)
   {
    p1=Pop(&c);
    printf("\n vehiculo retirado exitosamente"); 
    n--;
    while((&e)!=NULL)
      c=Pop(&e);
   }  
   else
    while((&e)!=NULL)
      c=Pop(&e);
 } 
 getch();
 return n;
}

/* funcion para revisar informacion del ultimo vehiculo ingresado */
void verificar(STACK c,int n)
{
 if(Empty(&c))
  {
    printf("\n no hay vehiculos en el estacionamiento");
    exit(1);
  }
 printf("\n datos del ultimo vehiculo ingresado:");
 printf("\n\n nombre del propietario:\n");
 cout << vehiculo[n].nombre;
 printf("\n\n no. de placa del vehiculo:\n");
 cout << vehiculo[n].placa;
 printf("\n\n marca del vehiculo:\n");
 cout << vehiculo[n].marca;
 printf("\n\n categoria del vehiculo:\n");
 cout << vehiculo[n].cat;
} 
 

/* limpia la pila */
void Clear(STACK * ps) {
	ps->top= -1 ;
	}

/* verifica si la pila esta vacia */
int Empty(STACK * ps) {
	if (ps->top == -1)
		return(TRUE);
	else
		return(FALSE);
	}

/* verifica si la pila esta llena, si ya no se pueden introducir mas elementos en el arreglo */
int Full(STACK * ps) {
	if (ps->top == STACKSIZE - 1)
		return(TRUE);
	else
		return(FALSE);
	}

/* introduce un elemento en la pila */
void Push(STACK * ps, vehiculo x) {
     if (Full(ps)) {
		   printf("%s","Pila desbordada");
	 	   exit(1); }
     else
		   ps->items[++(ps->top)]=x;
   }
/* quita un elemento de la pila y lo devuelve */
STACKELEMENT Pop(STACK * ps) {
  if (Empty(ps)) {
		 printf("%s","Pila subdesbordada");
		 exit(1); }
  return(ps->items[(ps->top)--]);
 }