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.
Código [Seleccionar]
#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);
}