1. Realizzare una copia di una lista con puntatore di testa e di codaRealizzare una copia significa costruire una lista a puntatori che contenga alla fine le stesse informazioni dell'originale (dovendo essere i nodi creati ex-novo...).Bisogna effettuare una visita completa della prima lista e per ogni informazione contenuta in essa realizzare una "aggiungi in coda" alla seconda lista; in coda perché bisogna conservare anche l'ordine di "apparizione". Se la prima lista è vuota anche la seconda dovrà esserlo. Se la prima lista contiene le informazioni "a", "b" e "c" in questo ordine allora la seconda dovrà contenere "a", "b" e "c" nello stesso ordine. (diagramma...)
Procedure COPIATC(Lin: ListaTC; Var Lout: ListaTC); |
Si tratta di procedure perché non è richiesta una "risposta". Lin è la lista dalla quale copiare (in ingresso), Lout è la lista da produrre (in uscita). Si richiede che Lout sia una lista vuota altrimenti si otterrà un'operazione di "appendi" piuttosto che di copia; oppure bisognerà aggiungere un'istruzione iniziale di "crealista" oppure "distruggilista" per Lout.
Procedure COPIATC(Lin: ListaTC; Var Lout: ListaTC);
Var
P: pNodoTC;
Begin
P:=L.Testa;
while(P <> Nil) do
begin
AggInCoda(Lout, P^.Info);
P:=P^.Succ;
end;
End;
Procedure AggInCoda(Var L: ListaTC; I: tInfo);
Var
P: pNodoTC;
Begin
New(P);
P^.Info:=I;
P^.Succ:=Nil;
If(L.Testa = Nil) Then
L.Testa:=P
Else
L.Coda^.Succ:=P;
L.Coda:=P;
End; |
2. Confrontare due liste bidirezionali per determinare se una è l'inversa dell'altraBisogna confrontare le informazioni contenute nei nodi delle due liste; la prima con l'ultima, la seconda con la penultima, ... cioè bisogna visitare contemporaneamente le due liste partendo da estremi opposti. Se le due liste sono vuote il confronto ha successo; se non sono vuote allora se la prima contiene "a", "b" e "c", la seconda contiene "c", "b" e "a". (diagramma)
Function INVERSEBI(L1, L2: ListaBi): Boolean; |
Si tratta di function perché è richiesta una "risposta" (vero/falso). Due liste bidirezionali in ingresso; nessun prerequisito.
Function INVERSEBI(L1, L2: ListaBi): Boolean;
Var
P, Q: pNodoBi;
Begin
P:=L1.Testa;
Q:=L2.Coda;
while(P <> Nil) and (Q <> Nil) and (P^.Info = Q^.Info) do
begin
P:=P^.Succ;
Q:=Q^.Prec;
end;
INVERSEBI:=(P = Nil) and (Q = Nil);
End; |
|