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


0