Dev - C++ - Como puedo ordenar una lista enlazada simple (dinamica) por metodo insercion

 
Vista:
sin imagen de perfil
Val: 89
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Como puedo ordenar una lista enlazada simple (dinamica) por metodo insercion

Publicado por Patricio (25 intervenciones) el 11/04/2019 01:16:03
Buenas, queria preguntar como puedo ordenar usando el método de inserción de forma ascendentemente, una lista enlazada simple (lista dinámica, SIN estar doblemente enlazada) de números enteros de 10 elementos desordenados y hacer una función que recorra la lista y mostrar el contenido de la lista?.
En esto se usan estructuras y punteros.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 89
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Como puedo ordenar una lista enlazada simple (dinamica) por metodo insercion

Publicado por Patricio (25 intervenciones) el 11/04/2019 05:23:23
Gracias de igual forma. se hace de la siguiente manera.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
struct lista{
	int numero;
	struct lista *sgte;
};
 
struct lista *primero, *ultimo, *nuevo, *i, *j;
 
void sort_lista(){
	int temp;
	for(i=primero;i->sgte!=NULL;i=i->sgte){
		for(j=i->sgte;j!=NULL;j=j->sgte){
			if(i->numero < j->numero){ // "< de Mayor a menor" y "> de menor a mayor"
				temp = i->numero;
				i->numero=j->numero;
				j->numero=temp;
			}
		}
	}
}
void mostrar_lista(){
	struct lista *aux;
	int i = 0;
	aux=primero;
	printf("\n     Mostrando 10 Datos de la Lista: ");
	while(aux!=NULL){
		printf("\n El dato de TEST 2 de aux->numero es: %d",aux->numero);
		aux = aux->sgte;
		i++;
	}
	if(i==0)
		printf("\n\t La lista esta vacia...");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 554
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Como puedo ordenar una lista enlazada simple (dinamica) por metodo insercion

Publicado por Rodrigo (130 intervenciones) el 11/04/2019 13:46:24
Esta implementacion no parece ser el metodo de insercion.
Ademas no estas tomando partido que tienes una lista, estas actuando igual que si tuvieras un arreglo.
Lo digo pues intercambias valores que no es necesario hacer en el caso de insercion.

Si tienes esto

1
-> 1 -> 3 -> 4 -> 5  -> 6 -> 2 -> ...

y en la iteracion tienes que llevar el 2 a la posicion que le corresponde, creo que tu algoritmo hara estos intercambios

1
2
3
4
5
6
7
8
9
-> 1 -> 3 -> 4 -> 5 -> 6 -> 2 -> ...
(intercambiar 2 y 3, queda)
-> 1 -> 2 -> 4 -> 5 -> 6 -> 3 -> ...
(intercambiar 4 y 3, queda)
-> 1 -> 2 -> 3 -> 5 -> 6 -> 4 -> ...
(intercambiar 5 y 4, queda)
-> 1 -> 2 -> 3 -> 4 -> 6 -> 5 -> ...
(intercambiar 6 y 5, queda)
-> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> ...

pero lo que tendria que hacer, usando listas es identificar la posicion donde el 2 deberia ir (despues del 1) y moverlo alli actualizando los punteros.

1
2
3
4
5
6
7
8
9
10
11
-> 1 -> 3 -> 4 -> 5  -> 6 -> 2 -> ...
(hacer que el anterior modifique su siguiente a lo siguiente del 2)
-> 1 -> 3 -> 4 -> 5  ->  6 -> ...
 
(hacer que el siguiente del 2 sea el 3, ahora 2 nodos apuntan al 3)
-> 1 -> 3 -> 4 -> 5  -> 6 -> ...
        |
     -> 2
 
(finalmente, hacer que el 1 apunte al 2)
-> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> ..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar