Cita de: rir3760 en 7 Noviembre 2011, 02:21 AM
Te respondo al MP:
Los datos en el programa aparecen desordenados en el programa porque este ... no los ordena. Para ello necesitas de una función mas que ordene los nodos de la lista. En el caso de listas vinculadas lo usual es MergeSort pero si apenas empiezas es mejor la ordenación al insertar cada nodo.
En cuanto a la función que imprima el numero de caracteres antes de uno dado debes descomponer eso también en funciones: una que imprima el resultado y otra que calcule el numero de caracteres antes del buscado.
Y faltan los requisitos de la(s) funcion(es). Sin eso difícil dar una respuesta exacta.
No voy a hacerlo todo. En el caso del calculo de forma recursiva del numero de elementos antes de uno dado ello se puede realizar de esta forma:Código (c) [Seleccionar]struct nodo {
char valor;
struct nodo *sig;
};
/* ... */
struct nodo *nodos_antes(struct nodo *p, int *num, char ch);
/* ... */
void imprimir_na(struct nodo *p, char ch)
{
int num = 0;
if (nodos_antes(p, &num, ch) == NULL)
puts("El caracter no es parte de la lista");
else
printf("Hay %d elementos antes del caracter %c\n", num, ch);
}
struct nodo *nodos_antes(struct nodo *p, int *num, char ch)
{
if (p == NULL || p->valor == ch)
return p;
else {
++*num;
return nodos_antes(p->sig, num, ch);
}
}
Es una función de soporte "imprimir_na" que imprime el resultado de la otra función recursiva "nodos_antes".
Un saludo
Me pueden ayudar diciendome como mando llamar esta función en el programa...
Ya me he roto la cabeza y no puedo...