Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/07/2005, 04:04
Avatar de Shia
Shia
 
Fecha de Ingreso: septiembre-2003
Mensajes: 202
Antigüedad: 20 años, 8 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