Sunteți pe pagina 1din 7

Algoritmos y estructuras de

datos
Operaciones sobre listas enlazadas
Todas las operaciones que se resumen a continuacin trabajan sobre una lista enlazada
de valores enteros cuyos nodos tienen la siguiente estructura.
type
// definicion del puntero a nodo
PNodo = ^Nodo;
// definicion del nodo
Nodo = record
v:integer;
sig:PNodo;
end;

Agregar un elemento a la lista


Agrega un nodo con un valor x al final de la lista direccionada por p.
agregar
var p:PNodo; x:integer
new(nuevo)
nuevo^.v x
nuevo^.sig nil
p = nil
p nuevo

aux p
aux^.sig <> nil
aux aux^.sig
aux^.sig nuevo

R
Agrega un elemento al final de la lista enlazada

procedure agregar(var p:PNodo; x:integer);


var aux,nuevo:PNodo;
begin
new(nuevo);
nuevo^.v:=x;
nuevo^.sig:=nil;
if( p=nil ) then begin
p:=nuevo;
end else begin
aux:=p;
while(aux^.sig<>nil) do begin
aux:=aux^.sig;
end;
aux^.sig:=nuevo;
end;
end;

Recorrer y mostrar el contenido de una lista enlazada


Recorre la lista direccionada por p mostrando el valor v que contiene cada uno de sus
nodos.
mostrar
p:PNodo
aux p
aux<>nil
aux^.v
aux aux^.sig

R
Recorre la lista y muestra el valor contenido en cada nodo

procedure mostrar(p:PNodo);
var aux:PNodo;
begin
aux:=p;
while( aux<>nil ) do begin
writeln(aux^.v);
aux:=aux^.sig;
end;
end;

Liberar la memoria que insumen los nodos de una lista enlazada


Libera la memoria insumida por cada uno de los nodos de la lista direccionada por p.
liberar
var p:PNodo
p<>nil
sig p^.sig
dispose(p)
p sig

R
Recorre la lista y libera cada uno de sus nodos

procedure liberar(var p:PNodo);


var sig:PNodo;
begin
while(p<>nil) do begin
sig:=p^.sig;
dispose(p);
p:=sig;
end;
end;

Determinar si la lista contiene un determinado valor


Recorre la lista direccionada por p para determinar si existe al menos un nodo cuyo
valor v coincida con el valor de x. Retorna un puntero al nodo que contiene el valor
buscado o nil si ningn nodo lo contiene.
buscar: PNodo
p:PNodo; x:integer
aux p
aux<>nil and aux^.v <> x
aux aux^.sig
buscar aux

R
Recorre la lista para determinar si contiene o no un valor determinado

function buscar(p:PNodo; x:integer):PNodo;


var aux:PNodo;
begin
aux:=p;
while( (aux<>nil) and (aux^.v<>x)) do begin
aux:=aux^.sig;
end;
buscar:=aux;
end;

Eliminar un valor de la lista


Recorre la lista direccionada por p para buscar y eliminar el primer nodo que contenga
un valor igual a x. Si no existe ningn nodo con ese valor entonces no hace nada.
eliminar
var p:PNodo; x:integer
aux p
ant nil
aux<>nil and aux^.v<>x
ant aux
aux aux^.sig
aux<>nil
ant<>nil
ant^.sig aux^.sig

p aux^.sig

dispose(aux)

R
Elimina el nodo que contiene un valor determinado

procedure eliminar(var p:PNodo;x:integer);


var ant,aux:PNodo;
begin
aux:=p;
ant:=nil;
while( (aux<>nil) and (aux^.v<>x) ) do begin
ant:=aux;
aux:=aux^.sig;

end;
if( aux<>nil ) then begin
if( ant<>nil ) then begin
ant^.sig:=aux^.sig;
end else begin
p:=aux^.sig;
end;
dispose(aux);
end;
end;

Insertar un valor respetando el ordenamiento de la lista


Inserta un nodo con valor x en la lista direccionada por p respetando el criterio de
ordenamiento de la lista. En esta implementacin se respeta el orden de precedencia de
los nmeros enteros. La funcin retorna un puntero al nodo recientemente insertado.
insertarOrdenado:PNodo
var p:PNodo; x:integer
new(nuevo)
nuevo^.v x
nuevo^.sig nil
aux p
ant nil
aux<>nil and aux^.v<=x
ant aux
aux aux^.sig

ant=nil
p nuevo

ant^.sig nuevo

nuevo^.sig aux
insertarOrdenado nuevo

R
Inserta un nodo cuyo valor respeta el criterio de precedencia de la lista

function insertarOrdenado(var p:PNodo; x:integer):PNodo;


var nuevo,ant,aux:PNodo;
begin

new(nuevo);
nuevo^.v:=x;
nuevo^.sig:=nil;
aux:=p;
ant:=nil;
while( (aux<>nil) and (aux^.v<=x) ) do begin
ant:=aux;
aux:=aux^.sig;
end;
if( ant=nil ) then begin
p:=nuevo;
end else begin
ant^.sig:=nuevo;
end;
nuevo^.sig:=aux;
insertarOrdenado:=nuevo;
end;

Insertar un valor solo si la lista an no lo contiene


Inserta un nodo con valor x en la lista direccionada por p solo si no existe an ningn
nodo que contenga dicho valor. En este caso asignar false al parmetro enc y
retornar un puntero al nodo insertado. Si la lista ya contena un nodo cuyo valor v
coincide con el valor de x entonces simpemente asignar true al parmetro enc, no
insertar nada y retornar un puntero al nodo encontrado.
buscarEInsertarOrdenado: PNodo
var p:PNodo; x:integer; var enc:boolean
r buscar(p,x)
r = nil
r insertarOrdenado(p,x)

enc true

enc false
buscarEInsertarOrdenado r

R
Inserta un nodo cuyo valor en la lista ser nico

function buscarEInsertarOrdenado(var p:PNodo


;x:integer
;var enc:boolean):PNodo;
var r:PNodo;
begin

r:=buscar(p,x);
if( r= nil ) then begin
r:=insertarOrdenado(p,x);
enc:=false;
end else begin
enc:=true;
end;
buscarEInsertarOrdenado:=r;
end;

S-ar putea să vă placă și