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:
Eternal Idol, gracias por la observación olvide colocar las estructuras y la función borrar lista. //************************************************************ //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; }