generic
type ElementoLista is private;
with function "="(ELista1 , ELista2: ElementoLista) return Boolean;
package Listas_Secuenciales is
-- Tipo Lista: Asignable (:=) y comparable (=, /=). Representa un
-- contenedor (lista secuencial) limitado en tamaño cuyo
-- contenido serán elementos no repetidos del tipo del
-- parámetro genérico del paquete. Se implementará como un
-- record variante con un parámetro de tipo Positive que
-- servirá para establecer el tamaño máximo de la lista.
type Lista(TamañoMaximo: Positive) is private;
Error_Repetido: exception; --| Se utilizará para señalar que se intenta insertar un
-- elemento que ya está en la lista, para el caso en que se
-- quiera sustituir.
procedure Insertar(Lis: in out Lista; ELista: in ElementoLista; NoExiste: in Boolean);
-- El procedimiento Insertar, inserta el elemento indicado por el
-- segundo parámetro en la lista indicada por el primero. Si el
-- elemento a insertar ya se encuentra en la lista, lo sustituirá
-- por el nuevo si el tercer parámetro tiene el valor True o lanzará
-- la excepción Error_Repetido si tiene el valor False. Los elementos
-- en la lista estarán organizados secuencialmente según el orden de llegada,
-- salvo en caso de sustitución que se mantiene la posición original. El
-- elemento recién insertado se convierte en el actual a efectos de acceso. Si,
-- cuando se intenta insertar, la lista está llena, se lanza la excepción
-- predefinida Constraint_Error y la lista queda como estaba.
procedure Inicio(Lis: in out Lista); --|
-- El procedimiento Inicial, designa como actual al elemento
-- más antiguo de la lista. Si la lista está vacía el actual
-- queda indefinido.
procedure Siguiente(Lis: in out Lista);
-- El procedimiento Siguiente, prepara la lista para
-- acceder al elemento siguiente al actual, según el
-- orden secuencial de la misma. Si actual ya está
-- en el último elemento, queda indefinido. Si la
-- lista está vacía o el actual está indefinido, actual
-- queda indefinido.
function Examinar(Lis: in Lista)return Lista;
-- la Función Examinar devuelve el elemento actual
-- de la lista. Si el elemento actual está indefinido
-- se lanzará la excepción Constraint_Error.
function Fin_Lista(Lis: in Lista)return boolean;
-- La función Fin_Lista, devuelve True si actual está indefinido.
procedure Extraer(Lis: in out Lista);
-- El procedimiento Extraer, elimina de la lista el
-- elemento actual. Si actual está indefinido no se
-- producirá ningún efecto apreciable. Tras la
-- extracción, actual debe quedar situado en el
-- elemento siguiente al extraído; si el elemento
-- que se extrae es el último de la lista, actual
-- queda indefinido.
private
-- -- Estructura de representación del tad Listas_Secuenciales
type Nodo_Lista;
type TNodo_Lista is access Nodo_Lista;
type Nodo_Lista is record
dato:ElementoLista;
sig:TNodo_Lista;
end record;
type Lista(TamañoMaximo: Positive) is record
Actual: TNodo_Lista;
Inicio: TNodo_Lista;
Fin: TNodo_Lista ;
Tamaño: Natural:= 0;
end record;
end Listas_Secuenciales;