You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Mientras la lista sea distina de nil va a pasar al siguiente nodo, es decir, a L se le va a asignar la dirección del siguiente nodo (en memoria dinamica)
A la función booleana se le va a pasar por parámetros L de tipo lista y el elemento a buscar.
Para buscar un elemento vamos a necesitar una variable de tipo booleana para determinar si se pudo encontrar o no ese elemento.
Primero vamos a inicializar la variable booleana en falso y luego la lista se va a recorrer desde el nodo inicial.
Mientras L no llegue al final de la lista y el elemento no se encuentre, se avanzaría una posición en el nodo de la lista, en el caso contrario cambiamos el valor de la variable booleana a TRUE para confirmar que se encontro el elemento.
En el caso de que se haya avanzado en la lista hasta el final y no se haya encontrado el elemento, la función retorna false.
Ordenada
A la función booleana se le va a pasar por parámetro L de tipo lista y el elemento a buscar.
Para buscar un elemento vamos a necesitar una variable de tipo booleana para determinar si se pudo o no encontrar ese elemento.
Primero vamos a inicializar la variable booleana en falso luego la lista se va a recorrer desde el nodo inicial.
Mientras L no llegue al final de la lista y el elemento actual de la lista sea menor/mayor (segun el caso) al que estamos buscando se avanzaría una posición en la lista.
Una vez que una de las dos condiciones no se cumpla, se evalua si no se llegó al final de la lista y se encontró el elemento que se estaba buscando, se modifica el booleano a true.
En el caso de que se haya avanzado en la lista hasta el final y no se haya encontrado el elemento, la funcion retornara false.
Desordenada
Ordenada
functionbuscar (l:lista; x:integer):boolean;
var
encontre: boolean;
begin
encontre:=false;
while (l <> nil) and (not encontre) dobeginif (x = l^.dato) then
encontre:=true;
else
encontre:=false;
end;
buscar:=encontre;
end;
functionbuscar (l:lista; x:integer):boolean;
var//Ordenada De menor a mayor
encontre: boolean;
begin
encontre:=false;
while (l <> nil) and (not encontre) and (x > l^.dato) dobeginif (x = l^.dato) then
encontre:=true;
else
encontre:=false;
end;
buscar:=encontre;
end;
Crear_una_Lista_Vacia
begin
l:=nil;
end.
Agregar_un_Elemento_al_Principio_de_la_Lista
EL modulo Agregar_Adelante va a recibir como parametros el puntero inicial de la lista y los datos que va a aguardar la lista.
En el módulo Agregar_Adelante se crea una variable de tipo lista.
Se pide espacio en memoria dinamica NEW.
En el campo dato de dicha variable se le asigna el dato pasado por parámetro.
Y en el campo siguiente la dirección de la lista pasada por parámetro.
Dicho nodo L de tipo lista, se le asignara lo cargado en la variable local al módulo. El nodo que se crea ira por delande del último.
Retorna al programa principal o moduló que lo invoco.
ProcedureAgregarAdelante (var L:lista; per:persona);
Var
nue:Lista;
Begin
New(nue);
nue^.datos:=per;
nue^.sig:=L;
L:=nue;
End;
Agregar_un_Elemento_al_Final_de_la_Lista
Ordenando la lista
Con un puntero al ultimo
procedureAgregarAlFinal1(var pri:lista;per:persona);
var
act, nue : lista;
begin
new (nue);
nue^.datos:= per;
nue^.sig := NIL;
if pri <> Nilthenbegin
act := pri ;
while (act^.sig <> NIL ) do
act := act^.sig ;
act^.sig := nue ;
endelse
pri:= nue;
end;
procedureAgregarAlFinal2(var pri,ult:lista;per:persona);
var
nue : lista;
begin
new (nue);
nue^.datos:= per;
nue^.sig := NIL;
if pri <> Nilthen
ult^.sig := nue;
else
pri := nue;
ult := nue;
end;
Eliminar_un_Elemento_de_la_Lista
En el módulo se usan dos variables auxiliares que ayudaran a recorrer la lista: Actual y Anterior
Se iguala la variable auxiliar Anterioral primer puntero de la lista Actual al siguiente elemento de la lista para poder recorrer dicha lista sin modificar los enlases.
Se recorre la lista con la condición que actual sea distinta de Nil (y el dato actual sea distinto al buscado en el caso de que se sepa que el dato se encuentra en la lista)
Una vez que 'se sale del while' , es necesario saber por que lo hizo (solo en el caso donde no se sepa si el elemento esta en la lista. Si se sabe, no es necesario preguntar porque ya siempre sale porque encontro el elemento). En el caso que lo haya hecho porque se encontro el elemento se vuelve a preguntar si el nodo se trata del primero o de los siguientes para luego hacer el nuevo enlace
Se hace Dispose del elemento actual
ProcedureBorrarElemento (var pri:lista; nom:cadena50; var exito: boolean);
var ant, act: lista;
begin
exito := false;
act := pri;
{Recorro mientras no se termine la lista y no encuentre el elemento}while (act <> NIL) and (act^.datos.nom <> nom) dobegin
ant := act;
act := act^.sig
end;
if (act <> NIL) thenbegin
exito := true;
if (act = pri) then
pri := act^.sig;
else
ant^.sig:= act^.sig;
dispose (act);
end;
end;
Insertar_un_Nuevo_Elemento_en_una_Lista_Ordenada
ProcedureInsertarElemento ( var pri: lista; per: persona);
var
ant, nue, act: lista;
begin
new (nue);
nue^.datos := per;
act := pri;
ant := pri;
{Recorro mientras no se termine la lista y no encuentro la posición correcta}while (act<>NIL) and (act^.datos.nombre < per.nombre) do//De menor a mayorbegin
ant := act;
act := act^.sig ;
end;
if (ant = act) then
pri := nue {el dato va al principio}else
ant^.sig := nue; {va entre otros dos o al final}
nue^.sig := act ;
end;
Corte_de_control
ProcedureCorteDeControl(var l:info;var v:vCantidadDia;var cant, total:integer);
var
p:rPrestamos;
info: rinfo;
begin
LeerPrestamo(p);
while (p.ISBN <> -1) dobegin
info.ISBN:=p-ISBN;
info.cantidad:=0;
while (p.ISBN = info.ISBN) dobegin
info.cantidad:=info.cantidad+1;
v[p.dia]:=v[p.dia]+1;
if (p.nro_p mod2 = 1) and (p.nro_s mod2 = 0) then
cant := cant + 1;
leerPrestamo(p);
end;
agregarAtras(l,info);
end;
end;