Pascal/Turbo Pascal - Ordenar lista con punteros

 
Vista:

Ordenar lista con punteros

Publicado por Max (20 intervenciones) el 28/10/2013 00:16:22
Hola, quisiera ver si alguien me da una mano con un programa para ordenar una lista simple utilizando solamente sus punteros y no intercambiando los datos de los nodos, sino los nodos de la lista. Lo que tengo de codigo es lo siguiente...

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
program OrdenaListaEnteros;
{Ordenar una lista de enteros}
 
uses crt;
 
const MAX = 5;
 
type PNodo = ^Nodo;
	Nodo = record
		num: integer;
		sig: PNodo;
	end;
 
procedure CargarL (var L: PNodo);
// Carga la lista con un maximo de MAX enteros
var i, dato: integer; C: PNodo;
begin
	L:= nil;
	New (L);
	Writeln ('Ingrese valores');
	Readln (dato);
	L^.num:= dato;
	L^.sig:= nil;
	C:= L;
	for i:= 2 to MAX do
		begin
			New (C^.sig);
			C:= C^.sig;
			writeln ('Ingrese valores:');
			Readln (dato);
			C^.num:= dato;
			C^.sig:= nil;
		end;
end;
 
procedure MostrarL (var L: PNodo);
// Muestra por pantalla la lista
var C: PNodo;
begin
	Writeln;
	C:= L;
	While (C <> nil) do
		begin
			Writeln (C^.num);
			C:= C^.sig;
		end;
	Writeln;
end;
 
procedure Ordenar (var L: PNodo);
// Ordena la lista por seleccion
var AntMenor, Cursor1, Cursor2, Menor: PNodo;
begin
	Cursor1:= L;
	While (Cursor1 <> nil) do
		begin
			Cursor2:= Cursor1;
			Menor:= Cursor1;
			While (Cursor2^.sig <> nil) do
				begin
					if (Cursor2^.sig^.num < Menor^.num) then
						begin
							Menor:= Cursor2^.sig;
							AntMenor:= Cursor2;
						end;
					Cursor2:= Cursor2^.sig;
				end;
			If (Cursor1 = Menor) then
				Cursor1:= Cursor1^.sig
			else
				begin
					AntMenor^.sig:= Menor^.sig;
					Menor^.sig:= Cursor1;
					Cursor1:= Menor;
					Cursor1:= Cursor1^.sig;
				end;
		end;
end;
 
// PROGRAMA PRINCIPAL
var Lista: PNodo;
begin
	CargarL (Lista);
	MostrarL (Lista);
	Ordenar (Lista);
	MostrarL (Lista);
	ReadKey;
end.
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