Foros del Web » Programación para mayores de 30 ;) » Programación General »

C++ [Ordenar Lista]

Estas en el tema de C++ [Ordenar Lista] en el foro de Programación General en Foros del Web. Hola ¿Qué tal? Cree una función para ordenar una lista enlazada, con ayuda de un vector dinámico, pero tiene un pequeño error, no sé cual ...
  #1 (permalink)  
Antiguo 10/07/2005, 04:04
Avatar de Shia  
Fecha de Ingreso: septiembre-2003
Mensajes: 202
Antigüedad: 20 años, 7 meses
Puntos: 0
C++ [Ordenar Lista]

Hola ¿Qué tal?

Cree una función para ordenar una lista enlazada, con ayuda de un vector dinámico, pero tiene un pequeño error, no sé cual es. ¿Puede alguien echarle una ojeada a ver si pilla dónde cometí el error?

En el programa general compila pero no tiene nada la lista ni el vector. Ah, la lista la recibe llena.

Intente hacerla sin utilizar un vector pero me enredé un poco y tampoco me funciona, ^^.
¿Alguien sabe cómo es sin utilizar un vector?

Gracias Embarassed
Pd. Ahí coloqué las dos funciones.
//************************************************** **********
//Estructura
struct Nodo
{
char Info; //Dato.
int ContS; //Contador
Nodo *Sig; //Apuntador.
float Pro; //La Probabilidad de la letra.
Nodo(char val,Nodo *p){Info = val;Sig = p;ContS = Pro =1;};
Nodo(char val,Nodo *p,int cont,float pro){Info = val;Sig = p;ContS = cont;Pro =pro;}
};

//Estructura: Lista enlazada.
struct ListaEnlazada
{
Nodo *Cabecera; //Apuntador al primer nodo de la lista.
Nodo *Cola; // Apuntador al último nodo de la lista.
int NumElementos; //Número de elementos que contiene la lista.
ListaEnlazada() { Cabecera = Cola = NULL;NumElementos = 0; };
};


Código:
//************************************************************
//Utilizando un vector
ListaEnlazada OrdenarListaV (ListaEnlazada Lista)
 {
   int i, Tope=Lista.NumElementos;
   float  *v=new float[Tope];
   Nodo *P=Lista.Cabecera;
   for (i=0; i<Lista.NumElementos && P;i++)
    {
      v[i]=P->Pro;
      P=P->Sig;
    }
   P=Lista.Cabecera;
   for (int i=0; i<Lista.NumElementos && P;i++)
    {
      P->Pro = v[i];
      P=P->Sig;
    }
   delete []v;
   return(Lista);
}
//************************************************************
//Sin utilizar un vector
void OrdenarLista(ListaEnlazada &L,ListaEnlazada &L2)
{
   Nodo *Lista =L.Cabecera;
   Nodo *Aux2 = L2.Cabecera;
   while(Lista){
      Nodo *Aux = new Nodo(Lista->Info,NULL,Lista->ContS,Lista->Pro);
      if (!L2.Cabecera || L2.Cabecera->Pro > Lista->Pro)
      {
         Aux->Sig = L2.Cabecera;
         L2.Cabecera = Aux;
      }
      else
      {
         Aux2 = L2.Cabecera;
         while(Aux2->Sig && Aux2->Sig->Pro < Aux->Pro)
            Aux2=Aux2->Sig;
         Aux->Sig = Aux2->Sig;
         Aux2->Sig = Aux;
      }
      Lista = Lista->Sig;
    }
   BorrarLista(L);
}
//*******************************************************
//Función: Borra una lista.
	void BorrarLista(ListaEnlazada &L)
	{
		Nodo *Temp;
		while (L.Cabecera)
		{
			Temp = L.Cabecera;
			L.Cabecera = L.Cabecera->Sig;
			delete Temp;
		}
		L.Cabecera = L.Cola = NULL;
	}
Eternal Idol, gracias por la observación olvide colocar las estructuras y la función borrar lista.

Última edición por Shia; 10/07/2005 a las 05:52
  #2 (permalink)  
Antiguo 10/07/2005, 04:25
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
No lo mire demasiado pero en el codigo no esta ListaEnlazada, Nodo ni BorrarLista.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 22/11/2005, 10:04
Avatar de jose_d  
Fecha de Ingreso: enero-2003
Ubicación: Cali
Mensajes: 220
Antigüedad: 21 años, 3 meses
Puntos: 4
Hola muchachos, se que esto no tiene que ver con ordenar una lista pero hay va.

necesito hacer una funcion que me devuelva una estructura y asignarsela a una variable del mismo tipo ejemplo
la estructura es de tipo ciudad.

typedef struct ciudad{
struct datos_ciudad datciu;
struct ciudad *sig;
};
y esta es la funcion la idea es que si yo le mando un codigo el me devuelva la estructura para poder trabajar con ella. en este caso es simple lo unico que necesito es el nombre. pero la idea es hacer cosas mas complejas.

Código:
ciudad busciudad(int codigo)
{
 	   if (cab_ciu!=NULL)
 	   {
				 aux_ciu2=cab_ciu;
     			 while (aux_ciu2->sig!=NULL){
				 	   if (aux_ciu2->datciu.codigo == codigo)
				 	   {
				 	   return(aux_ciu2);
					   }
     			 	            aux_ciu2=aux_ciu2->sig;
					   }
				 }
 	   }
ya he hecho eso de mil formas y me salen diefrentes errores


espero me puedan ayudar muchas gracias
__________________
El leer te da el poder de mejorar
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 03:57.