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.