Lista dinámica circular. Inserción y elimina- ción.

Anuncio
Lista dinámica circular. Inserción y eliminación.
function Crear nodo ( x : t i n f o ; var nuevo : tPos ) : boolean ;
begin
i f Hay memoria then
begin
new( nuevo ) ;
nuevo ˆ . i n f o :=x ;
nuevo ˆ . s i g := nuevo ; { Se apunta a s i mismo}
Crear nodo : = true ;
end
e l s e Crear nodo := f a l s e ;
end ;
function I n s e r t a r ( x : t i n f o ; P : tPos ; var L i s t a : t L i s t a ) :
boolean ;
{PreCond : P p o s i c i o n v a l i d a en l a l i s t a }
var aux : tPos ;
begin
i f Crear nodo ( x , nuevo )
then begin
I n s e r t a r : = true ;
i f Es vacia ( Lista )
then L i s t a : = nuevo
else
begin
A n t e r i o r (P , L i s t a ) ˆ . s i g := nuevo ;
nuevo ˆ . s i g :=P
end
end
else I n s e r t a r := false ;
end ;
function Anadir ( x : t i n f o ; var L i s t a : t L i s t a ) : boolean ;
var nuevo : tPos ;
begin
i f Crear nodo ( x , nuevo )
then begin
i f Es vacia ( Lista )
then L i s t a : = nuevo
e l s e begin
nuevo ˆ . s i g : = L i s t a ˆ . s i g ;
L i s t a ˆ . s i g : = nuevo ;
L i s t a : = nuevo
end ;
Anadir : = true
end
e l s e Anadir : = f a l s e ;
end ;
function E l i m i n a r c o n t e n i d o ( x : t I n f o ; var L i s t a : t L i s t a )
: boolean ;
var ant , p : t p o s ;
begin
i f Es vacia ( Lista )
then E l i m i n a r c o n t e n i d o := f a l s e
e l s e begin
p:= l i s t a ;
i f p ˆ . i n f o=x
then begin
i f p=p ˆ . s i g
{ s i s o l o hay un e l e m e n t o }
then l i s t a := n u l o
e l s e begin
l i s t a := a n t e r i o r ( p , L i s t a ) ;
l i s t a ˆ . s i g :=p ˆ . s i g ;
end
dispose (p) ;
E l i m i n a r c o n t e n i d o := true ;
end
e l s e begin
{ Busca e l e l e m e n t o a b o r r a r . Guarda l a
posicion del anterior }
while ( p ˆ . i n f o <>x ) and ( p ˆ . s i g <> l i s t a ) do
begin
ant :=p ;
p:=p ˆ . s i g ;
end ;
i f p ˆ . i n f o <>x
then E l i m i n a r c o n t e n i d o := f a l s e
e l s e begin
ant ˆ . s i g :=p ˆ . s i g ;
d i s p o s e (P) ;
E l i m i n a r c o n t e n i d o := true ;
end
end
end ;
Descargar