Inicialmente todas as posições do vetor A estão disponíveis, portanto fazem parte de "Dispo".
Procedure Init(var L: Lista); Begin L.Dispo:=1; {primeiro elemento} L.Prim:=0; {lista principal está vazia} For i:=1 to n-1 do L.A[i].lig:=i+1; L.A[n].lig:=0; {receber 0 corresponde ao nil} End;
Obter_No(L, j): obtém um registro de índice j da Dispo. Se estiver vazia, retorna zero em j. L é, portanto, modificada.
Procedure Obter_No(var L: Lista; var j: endereco); Begin if L.Dispo <> 0 then { Se Dispo estiver vazia, não pode obter registro } begin j:= L.Dispo; { A dispo passa a apontar para quem ela apontava } L.Dispo:= L.A[L.Dispo].lig; end else j:= L.Dispo End;
Devolver_No(L, j): O registro de indice j, fornecido ao procedimento, passa a fazer parte da Dispo, como novo primeiro elemento. L é, portanto, modificada.
Procedure Devolver_No(var L: Lista; j:endereco); Begin L.A[j].lig := L.Dispo; L.Dispo := j; End;
OBS: Dispo está vazia quando a lista está cheia Dispo está cheia quando a lista está vazia.