elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemita en código de PILA a LISTA en DEV C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemita en código de PILA a LISTA en DEV C++  (Leído 2,918 veces)
Gntzx

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Problemita en código de PILA a LISTA en DEV C++
« en: 20 Septiembre 2012, 09:28 am »

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:
  #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);
}


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines