Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Colas dinamicas URGENTE

Estas en el tema de Colas dinamicas URGENTE en el foro de C/C++ en Foros del Web. Hola amigos del foro Bueno mi problema es el siguiente: Debo implementar una cola dinamica para un ejercicio, ya tengo gran parte del codigo, pero ...
  #1 (permalink)  
Antiguo 23/05/2008, 00:52
 
Fecha de Ingreso: noviembre-2007
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Colas dinamicas URGENTE

Hola amigos del foro

Bueno mi problema es el siguiente:

Debo implementar una cola dinamica para un ejercicio, ya tengo gran parte del codigo, pero tiene al parecer problemas por que no funciona correctamente.

El problema reside en las impresiones, el enunciado de mi problema indica lo siguiente:

"Mostrar los datos de los pasajeros de determinado pais proporcionado por el usuario, utilice solo Operaciones de cola para realizar esta funcion"

y pues lo q se me ocurrio para resolver dicho enunciado no funciona para nada, se cicla.
Por eso les pidos si me pudieran dar una manito para resolver aquello, alguna idea.
Mi codigo seria el siguiente:

principal.cpp

Código:
 #include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include <iostream>
#include "cola.h"

using namespace std;

int menu()
{
	int op;
	printf("1. Ingresar un pasajero\n");
	printf("2. Mostrar los pasajeros por algun TAG\n");
	printf("3. Eliminar algun pasajero\n");
	printf("4. Salir\n");
	printf("Ingresa una opcion:");
	scanf("%d", & op);
	return op;
}

int menu_tag()
{
	int op;
	printf("1. Buscar por asiento\n");
	printf("2. Buscar por pais\n");
	printf("3. Buscar por edad\n");
	printf("4. Volver al menu anterior\n");
	printf("Ingresa una opcion:");
	scanf("%d", & op);
	return op;
}

void listar(Cola c1)
{
	int op=0,x;
	char name[30];
	do
	{
		op=menu_tag();
		switch(op)
		{
		case 1:
			cout<<"Ingrese el numero de asiento: ";
			cin>>x;
			c1.print_by_asiento(x);
			break;
		case 2:
			cout<<"Ingrese el nombre de una pais: ";
			cin>>name;
			c1.print_by_country(name);
			break;
		case 3:
			cout<<"Ingrese una edad: ";
			cin>>x;
			c1.print_by_edad(x);
			break;
		case 4:
			cout<<"De vuelta al menu principal"<<endl;
			break;
		default:
			cout<<"Ingrese un valor entre 1 y 4"<<endl;
			break;
		}
		
	}while(op!=4);
}

void main()
{
	Cola c1;
	int dato,op=0,cont=0;
	pasajero pas;
	char name[30];
	do
	{
		op=menu();
		switch(op)
		{
		case 1:
			cout<<"Ingrese el nombre del pasajero: ";
			fflush(stdin);
			cin>>pas.nombre;
			cout<<"Ingrese el pais del pasajero: ";
			fflush(stdin);
			cin>>pas.pais;
			cout<<"Ingrese la edad del pasajero: ";
			cin>>pas.edad;
			cout<<"Ingrese el asiento del pasajero: ";
			cin>>pas.asiento;
			c1.encolar(pas);
//			c1.print();
		break;
		case 2:
			listar(c1);
		break;
		case 3:
			cout<<"Ingrese el nombre de un pasajero: ";
			cin>>name;
			c1.desencolar_especifico(name);
			c1.print();
			
		break;
		}
	}while(op!=4);
}
y mi fichero de cabecera cola.h seria el siguiente:

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

using namespace std;
struct pasajero//Estructura con los datos del pasajero
{
	char nombre[30];
	int edad;
	int asiento;
	char pais[25];
};

class nodo//Clase que define los nodos de la cola
{
public:
	nodo()
	{
		this->elemento.asiento=0;
		this->elemento.edad=0;
		this->sig=NULL;
	}
	nodo(pasajero x, nodo *y)
	{
		this->elemento=x;
		this->sig=y;
	}

private:
	pasajero elemento;
	nodo *sig;
	friend class Cola;
};





class Cola //clase cola
{
public:
	char vista;
	Cola()
	{
		this->cola=NULL;
	}
	void encolar(pasajero elem)//metodo que agrega un pasajero a la cola
	{
		nodo *nuevo;
		nuevo =new nodo;
		nuevo->elemento = elem;
		if (cola == NULL)
			nuevo->sig = nuevo;
		else 
		{
			nuevo->sig = cola->sig;
			cola->sig = nuevo;
		}
		cola = nuevo;
	}

	void desencolar() //Metodo que elimina un pasajero de la cola (el primer pasajero q entro)
	{
		nodo *aux;
		if (cola == cola->sig) 
		{
			delete cola;
			cola = NULL;
		}
		else 
		{
			aux = cola->sig;
			cola->sig = aux->sig;
			delete(aux);
		}
	}

	void desencolar_especifico(char name[])//Este metodo elimina a un pasajero en especifico, dado el nombre
	{
		int centinela=0;
		nodo *aux;

			if (cola == cola->sig) 
			{
				if(strcmp(name,cola->elemento.nombre)==0)
				{
					delete cola;
					cola = NULL;
					cout<<"El pasajero "<<name<<" ha sido eliminado de la lista correctamente"<<endl;
				}
				else
				{
					cout<<"El pasajero "<<name<<" no esta en la lista, ingrese un nombre correcto"<<endl;
				}
			}
			else 
			{
				while(centinela==0)
				{
					if(strcmp(cola->elemento.nombre,name)==0)
					{
						centinela=1;
						aux = cola;
						cola = aux->sig;
						delete(aux);
					}
					else
					{
						aux = cola->sig;
						cola->sig = aux->sig;
						encolar(aux->elemento);					
						delete(aux);
					}
				}
			}
	}

	void print()//MEtodo q imprime los elementos de la cola
	{
		if (cola == cola->sig) 
		{
		cout<<cola->elemento.nombre<<" "<<cola->elemento.edad<<" "<<cola->elemento.edad<<" "<<cola->elemento.asiento<<endl;	;
		}
		else
		{
			int centinela=0;
			nodo *temp;
			temp=cola;
			//while(temp->sig!=NULL)
			while(centinela==0)
			{
				if(temp->sig->sig==NULL)
				{
					centinela=1;
				}
				cout<<temp->elemento.nombre<<" "<<temp->elemento.edad<<" "<<temp->elemento.edad<<" "<<temp->elemento.asiento<<endl;	
				temp=temp->sig;
			}
		}
		/*
		else//Este es un segmento  de codigo alternativo para imprimir los elementos de la cola
		{
			nodo *aux, *aux2;
			aux2=cola; 
			int centinela=0,cod=0;			
				while(centinela==0)//Revisar los metodos de impresion, poseen errores
				{
					aux = cola->sig;
					cola->sig = aux->sig;
					cout<<aux->elemento.nombre<<endl;
					encolar(aux->elemento);		
					if(strcmp(aux->elemento.nombre,aux2->elemento.nombre)==0)
					{
						centinela=1;
					}
					delete(aux);
				}
		}*/


	}
	void print_by_country(char country[])
//Metodo q imprime los pasajeros de un determinado pais, aqui es donde deveria de imprimir los pasajeros de un pais dado, pero lo deveria de hacer con operaciones de la cola, en este caso serian con mis metodos(encolar y desencolar)
	{
		nodo *temp;
		temp=cola;
		int i=0;
		while(temp!=NULL)
		{
			if(strcmp(temp->elemento.pais,country)==0)
			{
				cout<<temp->elemento.nombre<<" "<<temp->elemento.edad<<" "<<temp->elemento.edad<<" "<<temp->elemento.asiento<<endl;	
				i++;
			}
			temp=temp->sig;
		}
		if(i==0)
		{
			cout<<"No existen pasajeros de ese pais"<<endl;
		}
	}
		
	void print_by_edad(int x)
//Metodo q imprime los pasajeros de una determinada edad
	{
		nodo *temp;
		temp=cola;
		int i=0;
		while(temp!=NULL)
		{
			if(temp->elemento.edad==x)
			{
				cout<<temp->elemento.nombre<<" "<<temp->elemento.edad<<" "<<temp->elemento.edad<<" "<<temp->elemento.asiento<<endl;	
				i++;
			}
			temp=temp->sig;
		}
		if(i==0)
		{
			cout<<"No existen pasajeros con esa edad"<<endl;
		}
	}
		
	void print_by_asiento(int x)
	{
//Metodo q imprime los pasajeros de un determinado asiento
		nodo *temp;
		temp=cola;
		int i=0;
		while(temp!=NULL)
		{
			if(temp->elemento.asiento==x)
			{
				cout<<temp->elemento.nombre<<" "<<temp->elemento.edad<<" "<<temp->elemento.edad<<" "<<temp->elemento.asiento<<endl;	
				i++;
			}
			temp=temp->sig;
		}
		if(i==0)
		{
			cout<<"No existen pasajeros en ese asiento"<<endl;
		}
	}
private:
	nodo *cola;
	
};
ME despido dandoles las gracias de antemano.
bye bye
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:18.