Professional Documents
Culture Documents
1. Este ejemplo se trata de una multilista (lista compuesta de listas) que utilizaremos
para mantener la lista de los usuarios de un sistema informatico, siendo sus datos su
login y password encriptada. Para cada uno de ellos, ademas, guardaremos la lista de
los trabajos que tiene en ese momento en ejecucion. En este caso, para cada trabajo
guardaremos su identificador y la carga maxima de CPU que supone. La estructura
de datos se corresponde con la mostrada en la Figura 1.
id_trabajo1 id_trabajo2
id_trabajo1 id_trabajo2
load1 load2
load1 load2
sig_trabajo sig_trabajo
sig_trabajo sig_trabajo
En este caso, nos interesa mantener una lista de personas ordenadas por apellido
y tambien por DNI, tal como se refleja en la Figura 2. El nodo de cabecera sera
un registro con dos punteros, uno al principio de la lista de registros ordenados por
nombres y otro a la lista de los mismos registros pero ordenados por edad.
2
3. En este ejemplo manejaremos una multilista que, a su vez esta multiordenada (or-
denada por varios criterios). Se trata de un ambulatorio en el que se desea asociar
asegurados con medicos, de manera que podamos acceder a la lista de medicos del
seguro, a la lista de pacientes del seguro y, ademas, a la lista de pacientes que son
atendidos por un determinado medico. La estructura se refleja en la Figura 3. Como
se puede observar, se mantienen dos listas doblemente enlazadas: una para los ase-
gurados y otra para los medicos. Para facilitar la busqueda de medicos y pacientes
ambas listas estan ordenadas: la lista de medicos esta ordenada alfabeticamente por
apellido y la de pacientes por DNI. Ademas, para poder saber que pacientes atiende
que medico, cada nodo medico tiene un puntero al nodo del primer asegurado asocia-
do, y cada nodo de asegurado tiene un enlace al siguiente asegurado al que le atiende
el mismo medico.
Lista_mdicos
A B C
dir 1 dir 2 dir 3
27 31 25
paciente paciente paciente
Lista_asegurados
X Z Y
dir 1 dir 2 dir 3
27 31 25
paciente paciente nil paciente nil
Soluciones
Unit L i s t a U s u a r i o s ;
uses ListaTrabajos ;
interface
const
nul o=n i l ;
type
tLogin = s t r i n g [ 1 0 ] ;
tPass = s t r i n g [ 1 0 ] ;
tInfoUsuario = record
l o g i n : tLogin ;
pass : tPass ;
end ;
t P o s U s u a r i o = tNodoUsuario ;
tNodoUsuario = r e c o r d
Info : tinfousuario ;
ant , s i g : t P o s U s u a r i o ;
trabajos : tListaTrabajos ;
end ;
t L i s t a U s u a r i o s = tPosUsuario ;
{ operaciones }
p r o c e d u r e L i s t a T r a b a j o s V a c i a ( var L : t L i s t a T r a b a j o s ) ;
...
implementation
...
end .
end ;
tLista = record
nombre : tPos ;
DNI : tPos ;
end ;
...
implementation
...
Este ejemplo esta tomado del Joyanes. En el libro aparecen tanto las dos unit
desarrolladas como las funciones para hacer consultas a las listas y dar altas. La definicion
de tipos sera:
unit ListaAsegurados ;
interface
interface
const
nulo=n i l ;
type
tNombre : s t r i n g [ 2 5 ] ;
tDir : s t r i n g [ 4 0 ] ;
tDNI : i n t e g e r ;
tinfoAsegurado = record
Nombre : tNombre ;
d i r e c c i o n : tDir ;
DNI : tDNI ;
end ;
tPosAsegurado = tNodoAsegurado ;
tNodoAsegurado = r e c o r d
info : tinfoAsegurado ;
antAsegurado , s i g A s e g u r a d o : tPosAsegurado ;
s i g P a c i e n t e : tPosAsegurado ;
end ;
t L i s t a A s e g u r a d o s = tPosAsegurado ;
...
end .
6
unit ListaMedicos ;
interface
uses ListaAsegurados ;
type
tinfoMedico = tinfoAsegurado ;
tPosMedico = tNodoMedico ;
tNodoMedico = r e c o r d
info : tinfoMedico ;
antMedico , s i g M e d i c o : tPosMedico ;
pacientes : tListaAsegurados ;
end ;
...
end .