Pascal/Turbo Pascal - Ordenar lista enlazada

 
Vista:

Ordenar lista enlazada

Publicado por Sol (5 intervenciones) el 10/07/2007 01:47:12
hola como estan, me ayudan con este problema. Me piden hacer un procedimiento en pascal en el que tengo q ordenar una lista enlazada en forma ascendente (son letras) Me ayudas por favor?' 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

RE:Ordenar lista enlazada

Publicado por damian (31 intervenciones) el 10/07/2007 05:34:06
un algoritmo ya asi rapido que te pueda decir, el cual no recuerdo el nombre, pero es utilizado por todos los lenguajes, como ejemplo de ordenar una lista seria.
- Empezando por el primer nodo de la lista, comparas el dato de la misma con el menor de la lista en si, recorriendola, si es menor, intercambias datos, y avanzas a la siguiente posicion de la lista, y luego repetis el mismo proceso, comparas el 2do elemento de la lista, con el minimo recorriendo, y intercambias datos otra vez si es necesario (siempre vas a recorrer N-1 posiciones hasta que llegas a la ultima posicion y termina), es relativamente facil de implementar.
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

RE:Ordenar lista enlazada

Publicado por klaytor (7 intervenciones) el 10/07/2007 12:52:13
Hola. Otro posible algoritmo sería el conocido como "algoritmo de la burbuja", sería así:

Coges el primer nodo y el segundo; los comparas y si el 2º es menor que el 1º los intercambias sino los dejas igual.
Ahora coges el segundo y el tercero; los comparas y si el 3º es menor que el 2º los intercambias sino los dejas igual. Así sucesivamente.
Cuando llegues al final de la lista tienes que volver a empezar y hacer lo mismo. Cuando recorras la lista y no hayas hecho ningún cambio quiere decir que la lista está ya ordenada.

Te aconsejo hacer un procedure que se encargue de hacer el intecambio de los nodos.

Creo que hay que tener muy claro el manejo de punteros para hacerlo pero es un método bastante elegante para ordenar.

Saludos.
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

RE:Ordenar lista enlazada

Publicado por Sol (5 intervenciones) el 10/07/2007 17:34:59
Y para hacerla utilizando soloun puntero auxiliar??
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

RE:Ordenar lista enlazada

Publicado por Diego Romero (996 intervenciones) el 10/07/2007 18:07:03
Hay muchas formas de ordenar una lista pero los algoritmos varian dependiendo si la lista en cuestión es simplemente enlazada o doblemente enlazada. Aclara esto último.
Fundamental saber bien cómo trabajar con punteros.
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

RE:Ordenar lista enlazada

Publicado por Sol (5 intervenciones) el 10/07/2007 18:10:07
La lista es simplemente enlazada.
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

RE:Ordenar lista enlazada

Publicado por damian (31 intervenciones) el 11/07/2007 04:11:45
si ya lo dijiste eso, pero es esencial que sepas manejar punteros para hacer esto, yo te diria que leas alguna bibliografia sobre punteros antes de mandarte a hacer un metodo de ordenacion...
y con respecto a tu pregunta, un puntero auxiliar vas a necesitar siempre, ya que con algo te tenes que mover en la lista, y no precisamente con el pto principal........... osea existir algoritmos que no utilizen ptos auxiliares existen, pero no es el caso, se entiende ?
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

RE:Ordenar lista enlazada

Publicado por klaytor (7 intervenciones) el 11/07/2007 14:17:44
Está claro que para implementar un algoritmo de ordenación de listas tienes que tener cierta habilidad con el manejo de punteros, si no estas perdido.

P.D: Hasta donde yo sé, en una lista simplemente enlazada, si quieres recorrerla SIEMPRE necesitas un puntero auxiliar.

Saludos.
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

RE:Ordenar lista enlazada

Publicado por Sol (5 intervenciones) el 11/07/2007 18:18:23
Eso ya lo tengo claro...pero he intentando hacer el algoritmo y no me sale
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

RE:Ordenar lista enlazada

Publicado por Sol (5 intervenciones) el 11/07/2007 18:25:52
Me podrian decir un algoritmo para ordenar la lista simplemente enlazada de forma ascendente , que, ademas de utilizar el puntero a la lista, se utilice un unico puntero auxiliar ? Mil gracias
Saludos
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

RE:Ordenar lista enlazada

Publicado por Diego Romero (996 intervenciones) el 12/07/2007 21:27:04
Me parece que no estás entendiendo el mensaje: aquí nadie va a ponerse a escribir código por ti. Postea lo que llevas hecho, aunque esté mal, lo revisamos y te damos pistas de cómo seguir si es posible.
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

RE:Ordenar lista enlazada

Publicado por sofia (1 intervención) el 11/09/2007 11:36:11
ola buenas yo tengo hecho algo pero estoy en la misma situaicon que la chica

procedure ordenar_lista(var l:tlista);
var
aux:Tlista;
valor:integer;
begin
while (l<>nil) do
begin
aux:=l^.sig;
while( aux<>nil) do
begin
if l^.info>aux^.info then
begin
valor:=l^.info;
l^.info:=aux^.info;
aux^.info:=valor;

en;{if}
aux:=aux^.sig;
end;{segund while }
l:=l^.sig;
end;{primer while}
end;

quiero ordenar una lista de enteros de manera descendente(de menor a mayor)

me gustaría saber porque no me ordena del todo bien es decir

7 2 4 1 y me sale 1 4 2 7

gracias por ayudrme!!!
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