esto es en C
como podria sin destruir o crear nuevos nodos
ordenar una lista enlazada simple?
yo lo e echo guardando valores en una variable comun
pero me dijeron que existe otra manera!!
| |||
como podria ordenar sin destruir y crear esto es en C como podria sin destruir o crear nuevos nodos ordenar una lista enlazada simple? yo lo e echo guardando valores en una variable comun pero me dijeron que existe otra manera!! |
| |||
Respuesta: como podria ordenar sin destruir y crear Hola, Existen una serie de algoritmos que permiten ordenar los elementos de un conjunto, ya sea una tabla o una lista. Los algoritmos básicos son:
Puedes encontrar más sobre estos métodos en Internet o en libros de programación, aunque no sea un libro de C/C++, ya que son fácilmente implementables. Te recomiendo que estudies cómo funcionan y los apliques a una tabla primero. Una vez entendido, la implementación en una lista no es complicada. Un saludo, gonzo |
| |||
Respuesta: como podria ordenar sin destruir y crear Puede que el Intercambio (método de la burbuja) sea el mas asequible, consiste en repetir varias ordenaciones donde en cada iteracion comparas un nodo con el siguiente (y los ordenas segun quieras), de forma que en cada pase el ultimo elemento comparado queda ordenado y en el pase siguiente lo omites. No te pongo el codigo, pero enseguida veras como funciona, supongamos que tienes la lista 37514 y quieres ordenarla de forma creciente:
Código C:
Ver original Es decir, en cada pase comparas todos los elementos con el siguiente excepto contra el elemento que quedo ordenado al final del pase anterior, de esta forma si tienes una lista de 5 elementos en el primer pase comparas 5, en el segundo comparas 4, en el tercero 3, etc... Solo una anotacion: en cualquier caso cuando mueves punteros tienes que controlar los casos de perdida de memoria (o memory leak): se produce cuando pierdes la referencia a una posicion de memoria:
Código C:
Ver original En este ejemplo estoy perdiendo la referencia a nodo1, de forma que pierdo la capacidad de trabajar con esa direccion de memoria (y el tamaño que ocupa) mientras tenga abierta la aplicacion (los s.o. actuales y no tan actuales liberan la memoria bloqueada por la aplicacion al finalizar la misma aplicacion); en el caso de sizeof(int) bytes perdidos no hay problema, pero imagina que pierdes elementos mas grandes y/o mas numerosos. Cuando hay memoria suficiente la perdida de memoria tal vez sea un problema minimo, pero en caso de listas la perdida de memoria se traduce a la perdida de un elemento por mucha memoria libre que tengas. Para evitarlo copias la direccion del elemento a sobreescribir a un puntero temporal y haces las operaciones:
Código C:
Ver original Saludos vosk |
Etiquetas: |