Problemita en código de PILA a LISTA en DEV C++

Iniciado por Gntzx, 20 Septiembre 2012, 09:28 AM

0 Miembros y 1 Visitante están viendo este tema.

Gntzx

Hola amigos he estado trabajando con un programita pero todavía no lo he podido correr en lista sólo en pila si alguien se apiada de mi y me ayuda a ir editando el programa le agradecería mucho ya que no soy muy bueno en programación aún.


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


struct autos
{
char placa[10];
char propietario[10];
char color[10];
char marca[10];
struct autos *sig;
};

struct mpila
{
int nom;
struct autos *ini;
struct autos *tope;
int numel;
struct mpila *next;
};

struct mpila *vinicio=NULL;



int crear_pila(int vnom)
{
int vres=0;
struct mpila *actual, *last;

actual=(struct mpila *)malloc (sizeof(mpila));
if (actual != NULL)
{
last=vinicio;
while(last->next != NULL) last=last->next;
if(vinicio==NULL) vinicio=actual;

last->next =actual;
actual->nom =vnom;
actual->ini =NULL;
actual->tope =NULL;
actual->numel=0;
actual->next =NULL;
vres=1;
}
return vres;
}




int insertar (int pila, struct autos dato_auto)
{
int vfound=0;
int vres=0;
struct mpila *arranca=vinicio;
struct autos *nuevo_nodo, *vtope;

while (arranca!=NULL)
{
if (arranca->nom==pila)
{
vfound=1;
break;
}
arranca=arranca->next;
}

if (vfound==1)
{
vres=1;
nuevo_nodo=(struct autos *)malloc(sizeof(autos));
if (arranca->ini==NULL) arranca->ini=nuevo_nodo;
vtope=arranca->tope;
arranca->tope=nuevo_nodo;
arranca->numel=arranca->numel+1;
strcpy(nuevo_nodo->placa,dato_auto.placa);
strcpy(nuevo_nodo->propietario,dato_auto.propietario);
strcpy(nuevo_nodo->marca,dato_auto.marca);
strcpy(nuevo_nodo->color,dato_auto.color);
nuevo_nodo->sig=vtope;
}
return vres;
}



void comprobar (int pila)
{
int vfound=0;
int vft=1;
struct mpila *arranca=vinicio;
struct autos *vtope;

while(arranca!=NULL)
{
if (arranca->nom==pila)
{
vfound=1;
break;
}
arranca=arranca->next;
}

if(vfound==1)
{
vtope=arranca->tope;
while(vtope!=NULL)
{
if(vft==1)
{
cout<<"Tope==> ";
vft=0;
}
cout<<vtope->placa<<" , ";
cout<<vtope->propietario<<" , ";
cout<<vtope->marca<<",";
cout<<vtope->color<<" \n";
vtope=vtope->sig;
}
}
}



/************************************************/
//verifica si la pila esta vacia
//////////////////////////////////////////////////
int pila_vacia(int mpila)
{
int vvacia=0;
struct mpila *last=NULL;

last=vinicio;
while(last->next!=NULL)
{
if (mpila==last->nom) break;
last=last->next;
}

if(last!=NULL)
if(last->numel==0) vvacia=1;

return vvacia;
}



//saca elementos de la pila
struct autos sacar(int nompila)
{
struct autos *vtope=NULL;
struct autos sal;
struct mpila *last=NULL;

last=vinicio;
while (last->next!=NULL)
{
if (nompila==last->nom) break;
last =last->next;
}

if (last!=NULL)
{
vtope=last->tope;
strcpy(sal.propietario,vtope->propietario);
strcpy(sal.placa,vtope->placa);
strcpy(sal.marca,vtope->marca);
strcpy(sal.color,vtope->color);
last->tope=vtope->sig;
last->numel=last->numel-1;
free(vtope);
if(last->numel==0)
{
last->ini=NULL;
last->tope=NULL;
}
cout<<"sacar.Numel "<<last->numel<<"\n";
}
return sal;
}



/**********************************/
//retorna el tope de una pila
/**********************************/

struct autos tope(int nompila)
{
struct mpila *last=NULL;
struct autos *vtope=NULL;
struct autos autotope;

last=vinicio;
while (last->next!=NULL)
{
if(nompila==last->nom) break;
last=last->next;
}
if(last!=NULL)
{
if( last->tope != NULL )
{
vtope=last->tope;
strcpy(autotope.placa, vtope->placa);
strcpy(autotope.marca, vtope->marca);
strcpy(autotope.propietario, vtope->propietario);
strcpy(autotope.color, vtope->color);
autotope.sig=NULL;
}
else cout<<"cochera vacia \n";
}
return autotope;
}



/***********************************/
//numero de elemnetos de la pila
/***********************************/

int numel(int nompila)
{
struct mpila *last=NULL;
int total=0;
last=vinicio;

while(last->next!=NULL)
{
if(nompila==last->nom) break;
last=last->next;
}

if(last!=NULL) total=last->numel;
else cout<<"pila inexistente \n";

return total;
}



/***************************************************/
//estacionando cualquier auto
/***************************************************/
void estacionar(void)
{
struct autos cliente;

if( numel(1) <6 )
{
cout<<"dame el nombre del due¤o del acrro: "<<endl;
cin>>cliente.propietario;
cout<<"dame las placas del acrro: "<<endl;
cin>>cliente.placa;
cout<<"dame la marca del carro: "<<endl;
cin>>cliente.marca;
cout<<"dame el color del carro: "<<endl;
cin>>cliente.color;

insertar(1,cliente);
}
else cout<<"la cochera esta llena \n";
}

/***************************************************/
//sacando un auto del estacionamiento y lo estaciona en la calle
//al final devuelve todos los autos a la cochera
/***************************************************/
void desestacionar (void)
{
char placa[7];
struct autos found;

cout<<"dame como identificaci¢n la placa del carro: ";
cin>>placa;

if( numel(1) > 0 )
{
while( numel(1) !=0)
{
found=tope(1);

if ( strcmp(placa, found.placa) == 0 )
{
found=sacar(1);
cout<< "Sacando Auto del cliente "<<found.propietario<<"\n";
break;
}
else
{
found=sacar(1);
insertar(2,found);
}

}
cout<<"carros en pila 2 "<<numel(2) <<"\n";
comprobar(2);

while( numel(2) !=0 )
{
found=sacar(2);
cout<<"Regresa.auto "<<found.propietario<<endl;
insertar(1,found);
}

}

}







void main()
{
int opcion;
char total;
int mpila;
//creando las dos pilas
crear_pila(1);
crear_pila(2);

do
{  clrscr();
cout<<"Ahora elige una de las siguientes opciones del menu. "<<"\n";
cout<<"1. Estacionar un auto a la cochera: "<<"\n";
cout<<"2. Sacar un auto de la cochera "<<"\n";
cout<<"3. Conocer el limite (tope) de la cochera "<<"\n";
cout<<"4. Conocer la cantidad (numel) de carros en la cochera "<<"\n";
cout<<"5. Salir "<<"\n";
cout<<"6. Comprobar "<<"\n";
cin>>opcion;

switch(opcion)
{
case 1:
clrscr();
estacionar();
break;
case 2:
clrscr();
desestacionar();
break;
case 3:
clrscr();
tope(1);
break;
case 4:
clrscr();
cout<<"el n£mero de carros es: "<<numel(1);
break;
case 5:
cout<<"Oprima enter para salir"<<endl;
break;
case 6:
clrscr();
cout<<"Pila: ";
cin>>mpila;
comprobar(mpila);
break;

default:
cout<<"Opcion no valido vuelva a intentarlo ....\n";
break;
}

getch();
}while(opcion!=5);
}