01/07/2010, 18:06
|
| | Fecha de Ingreso: octubre-2009
Mensajes: 25
Antigüedad: 15 años Puntos: 0 | |
Respuesta: ayuda con pilas Cita:
Iniciado por margarito04 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)--]);
}
|